1 Configuración y Carga de Datos

##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: MARTIN SARMIENTO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####

#### VARIABLE PAISES ####
## DATASET ##
setwd("~/R INFERENCIAL/COUNTRY")
# Cargar dataset
Datos <- read.csv("Dataset_Mundial_Final.csv", sep = ";", fileEncoding = "latin1")
## Estructura de los datos
str(Datos)
## 'data.frame':    58978 obs. of  29 variables:
##  $ ï..OBJECTID           : int  2 3 4 5 6 7 8 9 10 11 ...
##  $ code                  : chr  "00001-AFG-P" "00002-AFG-P" "00003-AFG-P" "00004-AFG-P" ...
##  $ plant_name            : chr  "Badghis Solar Power Plant" "Balkh solar farm" "Behsood solar farm" "Dab Pal 4 solar farm" ...
##  $ country               : chr  "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
##  $ operational_status    : chr  "cancelled - inferred 4 y" "cancelled - inferred 4 y" "cancelled - inferred 4 y" "shelved - inferred 2 y" ...
##  $ longitude             : chr  "62,874" "67,121" "70,413" "66,239" ...
##  $ latitude              : chr  "35,078" "36,714" "34,407" "33,768" ...
##  $ elevation             : int  918 359 629 2288 1060 1060 1392 398 410 1012 ...
##  $ area                  : chr  "6,735" "10,718" "487,729" "111,801" ...
##  $ size                  : chr  "Small" "Small" "Small" "Small" ...
##  $ slope                 : chr  "7,375" "0,49" "1,099" "6,162" ...
##  $ slope_type            : chr  "Moderado" "Plano o casi plano" "Plano o casi plano" "Moderado" ...
##  $ curvature             : chr  "-0,024" "0" "0" "0,045" ...
##  $ curvature_type        : chr  "Superficies cóncavas / Valles" "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies convexas / Crestas" ...
##  $ aspect                : chr  "96,77" "358,452" "36,18" "305,766" ...
##  $ aspect_type           : chr  "East" "North" "Northeast" "Northwest" ...
##  $ dist_to_road          : chr  "7037,104" "92,748" "112,117" "1705,255" ...
##  $ ambient_temperature   : chr  "14,402" "17,875" "21,315" "8,857" ...
##  $ ghi                   : chr  "5,824" "5,579" "5,805" "6,749" ...
##  $ humidity              : chr  "47,743" "42,305" "36,396" "37,344" ...
##  $ wind_speed            : chr  "0,039" "0,954" "0,234" "0,943" ...
##  $ wind_direction        : chr  "187,481" "207,422" "255,601" "160,331" ...
##  $ dt_wind               : chr  "South" "Southwest" "West" "South" ...
##  $ solar_aptitude        : chr  "0,72" "0,635" "0,685" "0,659" ...
##  $ solar_aptitude_rounded: int  7 6 7 7 8 8 8 6 6 4 ...
##  $ solar_aptittude_class : chr  "Alta" "Alta" "Alta" "Alta" ...
##  $ capacity              : chr  "32" "40" "60" "3000" ...
##  $ optimal_tilt          : chr  "30" "31" "31,063" "33" ...
##  $ pv_potential          : chr  "4,613" "4,408" "4,572" "5,424" ...
# Cargamos las librerias
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(gt)

2 Extraer Variable

Se realizó la agrupación geográfica de la variable country mediante técnicas de mapeo y expresiones regulares en R. Esto permitió consolidar los países en 7 categorías continentales uniformes para facilitar el tratamiento inferencial de los 58,978 datos registrados a nivel global.

tabla_PAIS <- Datos %>%
  select(Pais = country) 
tabla_PAIS$Pais <- gsub("Türkiye", "Türkiye", tabla_PAIS$Pais)
tabla_PAIS$Pais <- gsub("Réunion", "Réunion", tabla_PAIS$Pais)
tabla_PAIS$Pais <- gsub("Côte d'Ivoire", "Côte d'Ivoire", tabla_PAIS$Pais)

tabla_PAIS <- tabla_PAIS %>%
  ungroup() %>% 
  mutate(Continente = case_when(
    grepl("Argentina|Bolivia|Brazil|Chile|Colombia|Ecuador|Guyana|Paraguay|Peru|Suriname|Uruguay|Venezuela", 
          Pais, ignore.case = TRUE) ~ "América del Sur",
    
    grepl("United States|USA|Canada|Mexico|México", 
          Pais, ignore.case = TRUE) ~ "América del Norte",
    
    grepl("Guatemala|Belize|Honduras|El Salvador|Nicaragua|Costa Rica|Panama|Panamá|Cuba|Dominican Republic|Haiti|Jamaica|Puerto Rico|Antigua and Barbuda|Cayman Islands|Bonaire|Virgin Islands|Saint Kitts and Nevis|Guadeloupe", 
          Pais, ignore.case = TRUE) ~ "América Central y Caribe",
    
    grepl("Spain|España|France|Germany|Alemania|Italy|Italia|United Kingdom|UK|Portugal|Netherlands|Belgium|Poland|Sweden|Norway|Denmark|Finland|Greece|Russia|Ukraine|Albania|Andorra|Austria|Belarus|Bosnia and Herzegovina|Bulgaria|Croatia|Cyprus|Czech Republic|Estonia|Holy See|Hungary|Ireland|Isle of Man|Kosovo|Latvia|Lithuania|Luxembourg|Malta|Moldova|Montenegro|North Macedonia|Romania|Serbia|Slovakia|Slovenia|Switzerland", 
          Pais, ignore.case = TRUE) ~ "Europa",
    
    grepl("China|India|Japan|Japón|Korea|Vietnam|Thailand|Indonesia|Malaysia|Philippines|Saudi Arabia|UAE|United Arab Emirates|Israel|Turkey|Turquía|Iran|Iraq|Afghanistan|Armenia|Azerbaijan|Bahrain|Bangladesh|Bhutan|Brunei|Cambodia|Georgia|Hong Kong|Jordan|Kazakhstan|Kuwait|Kyrgyzstan|Laos|Lebanon|Mongolia|Myanmar|Nepal|Oman|Pakistan|Palestine|Qatar|Singapore|Sri Lanka|Syria|Taiwan|Tajikistan|Timor-Leste|Türkiye|Uzbekistan|Yemen", 
          Pais, ignore.case = TRUE) ~ "Asia",
    
    grepl("South Africa|Egypt|Egipto|Nigeria|Morocco|Marruecos|Algeria|Kenya|Ethiopia|Ghana|Senegal|Angola|Benin|Botswana|Burkina Faso|Burundi|Cabo Verde|Cameroon|Central African Republic|Chad|Comoros|Côte d'Ivoire|DR Congo|Republic of the Congo|Djibouti|Eritrea|Eswatini|Gabon|Guinea|Guinea-Bissau|Lesotho|Liberia|Libya|Madagascar|Malawi|Mali|Mauritania|Mauritius|Mayotte|Mozambique|Namibia|Niger|Réunion|Rwanda|Sao Tome and Principe|Seychelles|Sierra Leone|Somalia|South Sudan|Sudan|Tanzania|The Gambia|Togo|Tunisia|Uganda|Western Sahara|Zambia|Zimbabwe", 
          Pais, ignore.case = TRUE) ~ "África",
    
    grepl("Australia|New Zealand|Fiji|Papua|British Indian Ocean Territory|Vanuatu|New Caledonia", 
          Pais, ignore.case = TRUE) ~ "Oceanía",
    
    TRUE ~ "Otros / No Especificado"
  ))

TDF_continente <- table(tabla_PAIS$Continente)

3 Tabla de Distribución de Frecuencias

Se calculó la distribución de frecuencias absolutas (\(n_i\)) y relativas (\(h_i\)). Los resultados determinan que la región de Asia predomina con el 48.16%, seguida por Europa con un 31.85%, lo que evidencia una fuerte concentración del desarrollo de plantas solares en el eje euroasiático.

Tabla <- as.data.frame(TDF_continente)

colnames(Tabla) <- c("Continente", "ni")

Tabla$Continente <- as.character(Tabla$Continente)

Tabla$`hi (%)` <- (Tabla$ni / sum(Tabla$ni)) * 100

fila_total <- tibble(
  Continente = "TOTAL",
  ni = sum(Tabla$ni),
  `hi (%)` = sum(Tabla$`hi (%)`)
)

tabla_Final <- bind_rows(Tabla, fila_total)

tabla_gt <- tabla_Final %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1 de Distribución de Frecuencias por Continentes de las Plantas Solares**")
  ) %>%
  tab_source_note(
    source_note = "Autor: Martin Sarmiento"
  ) %>%
  cols_label(
    Continente = "Continente",
    ni = "Frecuencia (ni)",
    `hi (%)` = "Porcentaje (hi%)"
  ) %>%
  fmt_number(
    columns = `hi (%)`,
    decimals = 2
  ) %>%
  tab_options(
    heading.title.font.size = px(16),
    column_labels.background.color = "#F0F0F0"
  )

tabla_gt
Tabla N°1 de Distribución de Frecuencias por Continentes de las Plantas Solares
Continente Frecuencia (ni) Porcentaje (hi%)
África 1072 1.82
América Central y Caribe 379 0.64
América del Norte 7783 13.20
América del Sur 2346 3.98
Asia 28403 48.16
Europa 18787 31.85
Oceanía 208 0.35
TOTAL 58978 100.00
Autor: Martin Sarmiento

4 Análisis Gráfico

4.1 Diagramas de Barras de Cantidad

Mediante un diagrama de barras de cantidad, se identificó una distribución global asimétrica con una dominancia clara de ciertas regiones sobre otras. Esta observación justificó la división del análisis en dos agrupaciones geoeconómicas (Mercados Consolidados y Mercados Emergentes) para aplicar modelos de probabilidad que describan el comportamiento de inversión y desarrollo en cada segmento.

Tabla_Grafica <- tabla_Final %>% filter(Continente != "TOTAL")

par(mar = c(11, 4, 4, 2))
barplot(height = Tabla_Grafica$ni, 
        names.arg = Tabla_Grafica$Continente,
        main = "Gráfica N°1: Distribución de Cantidad de Plantas Solares por Continentes",
        xlab = "",
        ylab = "Cantidad",
        col = "skyblue",
        las = 3, 
        cex.names = 0.8,
        cex.main = 0.9,
        ylim = c(0, max(Tabla_Grafica$ni) * 1.2))
mtext("País", side = 1, line = 7)

5 Agrupación 1 (Mercados Consolidados)

Se realiza un mapeo asignando valores numéricos a las potencias solares líderes. Este proceso permite cuantificar la presencia regional para ajustar el Modelo Geométrico a la frecuencia observada de los mercados con mayor madurez tecnológica.

niveles_consolidados <- c("Asia", "Europa", "América del Norte")

Datos_Consolidados <- tabla_PAIS %>% 
  filter(Continente %in% niveles_consolidados)

Datos_Consolidados$Continente <- factor(Datos_Consolidados$Continente, 
                                        levels = niveles_consolidados, 
                                        ordered = TRUE)

TDF_G1_Cons <- as.data.frame(table(Datos_Consolidados$Continente))
colnames(TDF_G1_Cons) <- c("Continente", "ni")

TDF_G1_Cons$X <- 0:(nrow(TDF_G1_Cons) - 1)
TDF_G1_Cons$hi <- TDF_G1_Cons$ni / sum(TDF_G1_Cons$ni)

TDF_G1_Cons %>% 
  select(Continente, X, ni, hi) %>%
  gt() %>% 
  tab_header(
    title = md("**Tabla N°2 de Distribución de Frecuencias del Continente - Mapeado**"),
    subtitle = "Segmento: Mercados Consolidados (Liderazgo Global)"
  ) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  cols_label(
    Continente = "Continente",
    X = "Valor Asignado",
    ni = "Frecuencia (ni)",
    hi = "Porcentaje (hi%)"
  ) %>%
  fmt_number(columns = hi, decimals = 4) %>%
  tab_options(
    heading.title.font.size = px(16),
    column_labels.background.color = "#F0F0F0"
  )
Tabla N°2 de Distribución de Frecuencias del Continente - Mapeado
Segmento: Mercados Consolidados (Liderazgo Global)
Continente Valor Asignado Frecuencia (ni) Porcentaje (hi%)
Asia 0 28403 0.5167
Europa 1 18787 0.3417
América del Norte 2 7783 0.1416
Autor: Martin Sarmiento

5.1 Conjetura del Modelo (Geométrico)

Se seleccionaron las regiones de Asia, Europa y América del Norte para analizar el comportamiento del liderazgo industrial. Se aplica un Modelo Geométrico bajo la premisa de que la probabilidad de encontrar una planta solar de alta capacidad disminuye conforme el mercado se vuelve más exigente y saturado, concentrando la mayor frecuencia en Asia como el principal nodo de manufactura y despliegue global.

n_total_cons <- sum(TDF_G1_Cons$ni)
media_obs_cons <- sum(TDF_G1_Cons$X * TDF_G1_Cons$ni) / n_total_cons


prob_geom_cons <- 1 / (media_obs_cons + 1)

P_Geom_Cons <- dgeom(TDF_G1_Cons$X, prob = prob_geom_cons)
P_Geom_Cons <- P_Geom_Cons / sum(P_Geom_Cons) # Normalización



par(mar = c(10, 5, 5, 2))
barplot(rbind(TDF_G1_Cons$hi, P_Geom_Cons), 
        beside = TRUE,
        main = "Gráfica N°2: Comparado de lo Observado frente a lo Esperado (Consolidados)",
        ylab = "Porcentaje (%)",
        names.arg = TDF_G1_Cons$Continente, 
        col = c("skyblue", "blue"),
        legend.text = c("Observado", "Esperado"), 
        args.legend = list(x = "topright", bty = "n", cex = 0.8),
        las = 2, 
        cex.names = 0.8,
        cex.main = 0.8)
mtext("Mercado Geoeconómico", side = 1, line = 7)

5.2 Test de Pearson

Fo_C <- TDF_G1_Cons$hi
Fe_C <- P_Geom_Cons


plot(Fo_C, Fe_C, 
     main = "Gráfica N°3: Correlación del Modelo Observado y Esperado de Mercados Consolidados",
     cex.main = 0.7,
     xlab = "Frecuencia Observada", 
     ylab = "Frecuencia Esperada", 
     pch = 19, col = "#21618C")
abline(lm(Fe_C ~ Fo_C), col = "red", lwd = 2)

Correlacion_C <- cor(Fo_C, Fe_C) * 100
Correlacion_C
## [1] 95.82311

5.3 Test de Chi-cuadrado

x2_C <- sum(((Fo_C - Fe_C)^2) / Fe_C)


gl_C <- length(Fo_C) - 1


vc_C <- qchisq(0.95, gl_C)


x2_C
## [1] 0.08218442
vc_C
## [1] 5.991465
x2_C < vc_C
## [1] TRUE

5.4 Tabla Resumen del Test

tabla_resumen_C <- data.frame(
  Variable = "Mercados Consolidados",
  Pearson = round(Correlacion_C, 2),
  Chi2 = round(x2_C, 4),
  Umbral = round(vc_C, 2),
  Resultado = x2_C < vc_C
)


tabla_resumen_C %>% 
  gt() %>% 
  cols_label(
    Variable = "Variable",           
    Pearson  = "Test Pearson (%)",
    Chi2     = "Chi Cuadrado", 
    Umbral   = "Umbral de Aceptación",
    Resultado = "Resultado"
  ) %>%
  tab_header(
    title = md("**Tabla N°3 Resumen del Test de Bondad al Modelo de Probabilidad**")) %>%
  tab_source_note(
    source_note = "Autor: Martin Sarmiento") %>%
  cols_align(
    align = "center", 
    everything()) %>%
  tab_options(
    heading.title.font.size = px(16),
    column_labels.background.color = "#F0F0F0"
  )
Tabla N°3 Resumen del Test de Bondad al Modelo de Probabilidad
Variable Test Pearson (%) Chi Cuadrado Umbral de Aceptación Resultado
Mercados Consolidados 95.82 0.0822 5.99 TRUE
Autor: Martin Sarmiento

5.5 Cálculo de Probabilidades

¿Cuál es la probabilidad de que una planta solar seleccionada de forma aleatoria dentro del bloque de mercados consolidados esté ubicada específicamente en el continente de Asia?

prob_asia_geom <- dgeom(0, prob = prob_geom_cons)

paste0("La probabilidad estimada para el mercado de Asia es de: ", 
       round(prob_asia_geom * 100, 2), "%")
## [1] "La probabilidad estimada para el mercado de Asia es de: 61.54%"

6 Agrupación 2 (Mercados Emergentes)

Se asignan valores numéricos a las categorías de los mercados en vías de desarrollo. Esta codificación permite parametrizar el Modelo de Poisson, el cual es ideal para evaluar la tasa de aparición de proyectos en regiones con densidades industriales variables.

# 1. Definición de niveles y filtrado
niveles_emergentes <- c("América del Sur", "América Central y Caribe", "África", "Oceanía")

Datos_Emergentes <- tabla_PAIS %>% 
  filter(Continente %in% niveles_emergentes)

# 2. Creación de Tabla de Frecuencias
TDF_G2_Emer <- as.data.frame(table(Datos_Emergentes$Continente))
colnames(TDF_G2_Emer) <- c("Continente", "ni")

# 3. Ordenamiento jerárquico para optimizar el modelo de Poisson
TDF_G2_Emer <- TDF_G2_Emer %>% arrange(desc(ni))

# 4. Mapeo y cálculo de hi
TDF_G2_Emer$X <- 0:(nrow(TDF_G2_Emer) - 1)
TDF_G2_Emer$hi <- TDF_G2_Emer$ni / sum(TDF_G2_Emer$ni)

# 5. Visualización con el formato exacto de la Tabla N°2
TDF_G2_Emer %>% 
  select(Continente, X, ni, hi) %>%
  gt() %>% 
  tab_header(
    title = md("**Tabla N°4 de Distribución de Frecuencias del Continente - Mapeado**") ) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  cols_label(
    Continente = "Continente",
    X = "Valor Asignado",
    ni = "Frecuencia (ni)",
    hi = "Porcentaje (hi%)"
  ) %>%
  fmt_number(
    columns = hi, 
    decimals = 4
  ) %>%
  tab_options(
    heading.title.font.size = px(16),
    heading.subtitle.font.size = px(14),
    column_labels.background.color = "#F0F0F0"
  )
Tabla N°4 de Distribución de Frecuencias del Continente - Mapeado
Continente Valor Asignado Frecuencia (ni) Porcentaje (hi%)
América del Sur 0 2346 0.5858
África 1 1072 0.2677
América Central y Caribe 2 379 0.0946
Oceanía 3 208 0.0519
Autor: Martin Sarmiento

6.1 Conjetura del Modelo (Poisson)

Esta agrupación comprende las regiones de América Latina, África y Oceanía. Se propone un Modelo de Poisson para representar este segmento, ya que es el más robusto para modelar eventos independientes que ocurren con una tasa constante en un área geográfica. A diferencia de otros modelos, Poisson captura mejor la dispersión de proyectos en mercados donde la infraestructura aún no es uniforme, permitiendo un ajuste de alta precisión al Sur Global.

n_total_emerg <- sum(TDF_G2_Emer$ni)
lambda_emerg <- sum(TDF_G2_Emer$X * TDF_G2_Emer$ni) / n_total_emerg


P_Pois_Emer <- dpois(TDF_G2_Emer$X, lambda = lambda_emerg)
P_Pois_Emer <- P_Pois_Emer / sum(P_Pois_Emer) 


par(mar = c(10, 5, 5, 2))
barplot(rbind(TDF_G2_Emer$hi, P_Pois_Emer), 
        beside = TRUE,
        main = "Gráfica N°4: Comparado de lo Observado frente a lo Esperado (Poisson)",
        ylab = "Porcentaje (%)",
        names.arg = TDF_G2_Emer$Continente, 
        col = c("skyblue", "blue"),
        legend.text = c("Observado", "Esperado"), 
        args.legend = list(x = "topright", bty = "n"),
        las = 2, 
        cex.names = 0.8,
        cex.main = 0.8) 
mtext("Mercado Geoeconómico", side = 1, line = 9)

6.2 Test de Pearson

Fo_E <- TDF_G2_Emer$hi
Fe_E <- P_Pois_Emer


plot(Fo_E, Fe_E, 
     main = "Gráfica N°5: Correlación del Modelo (Poisson) en Mercados Emergentes",
     xlab = "Frecuencia Observada", ylab = "Frecuencia Esperada", 
     pch = 19, col = "#1B4F72")
abline(lm(Fe_E ~ Fo_E), col = "red", lwd = 2)

Correlacion_E <- cor(Fo_E, Fe_E) * 100
Correlacion_E
## [1] 97.97459

6.3 Test de Chi-cuadrado

x2_E <- sum(((Fo_E - Fe_E)^2) / Fe_E)
gl_E <- length(Fo_E) - 1
vc_E <- qchisq(0.95, gl_E)


x2_E
## [1] 0.06301499
vc_E
## [1] 7.814728
x2_E < vc_E
## [1] TRUE

6.4 Tabla Resumen del Test

tabla_resumen_E <- data.frame(
  Variable = "Mercados Emergentes",
  Pearson = round(Correlacion_E, 2),
  Chi2 = round(x2_E, 4),
  Umbral = round(vc_E, 2),
  Resultado = x2_E < vc_E
)

tabla_resumen_E %>% 
  gt() %>% 
  cols_label(
    Pearson  = "Test Pearson (%)",
    Chi2     = "Chi Cuadrado", 
    Umbral   = "Umbral de Aceptación"
  ) %>%
  tab_header(title = md("**Tabla N°5 Resumen del Test de Bondad (Modelo Poisson)**")) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  tab_options(heading.title.font.size = px(16), column_labels.background.color = "#F0F0F0")
Tabla N°5 Resumen del Test de Bondad (Modelo Poisson)
Variable Test Pearson (%) Chi Cuadrado Umbral de Aceptación Resultado
Mercados Emergentes 97.97 0.063 7.81 TRUE
Autor: Martin Sarmiento

6.5 Cálculo de Probabilidades

¿Cuál es la probabilidad estimada de que una nueva planta solar se localice específicamente en América del Sur (Valor 0) bajo la tasa de ocurrencia de Poisson?

prob_sur_pois <- dpois(0, lambda = lambda_emerg)
paste0("La probabilidad estimada para América del Sur es de: ", 
       round(prob_sur_pois * 100, 2), "%")
## [1] "La probabilidad estimada para América del Sur es de: 54.19%"

7 Conclusiones

El análisis probabilístico permitió modelar la distribución geográfica de las plantas solares a nivel mundial mediante un modelo geométrico para los mercados consolidados y un modelo de Poisson para los mercados emergentes. Los resultados muestran una clara dominancia del eje asiático en el liderazgo industrial, mientras que en el segmento de mercados en desarrollo, América del Sur se posiciona como la región con mayor tasa de aparición de nuevos proyectos.

Las pruebas de bondad de ajuste, con coeficientes de Pearson del 95.82% y 97.97% respectivamente, confirman que ambos modelos representan adecuadamente los datos observados por continentes. Esto evidencia una descripción estadística precisa de la segmentación geoeconómica actual, validando la diferencia entre la concentración industrial en potencias globales y la dispersión de proyectos en regiones emergentes.