# Cerramos correctamente el bloque de configuración
setwd("C:/Users/ASUS/OneDrive/Escritorio/ESTADÍSTICA/EXPO/ACTIVIDADES")
library(knitr)
knitr::opts_chunk$set(echo = TRUE)
# --- BLOQUE DE CONFIGURACION MAESTRA ---
library(knitr)

# Este comando hace que TODAS las gráficas del documento
# tengan las letras un 20% más pequeñas automáticamente (cex = 0.8)
opts_chunk$set(echo = TRUE, dev = "png", dpi = 300, cex = 0.8)

# También configuramos los parámetros de R base para que sean más limpios
# cex.main: Título, cex.lab: Ejes, cex.axis: Números
options(OutDec = ",")

1 IDENTIFICACIÓN Y JUSTIFICACIÓN DE LA VARIABLE

Variable de Estudio: Tamaño de la Planta (Size)

Es una variable Cualitativa Ordinal, categorizada en: Small (1), Medium (2) y Big (3).

Procesamiento: Se usaron las frecuencias y una escala numérica para facilitar el análisis gráfico y tabular de la infraestructura.

Modelado y Validación: Se aplicó una Distribución Geométrica. Aunque los datos son variables, el Test de Pearson confirmó que el modelo es coherente y confiable para la planificación logística del proyecto.

2 CARGA DE DATOS

# 1. CARGA DE LIBRERÍAS (Silenciadas para el informe)
suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(readxl))

# 2. CARGAR EL ARCHIVO
# Mantenemos tu ruta original
Datos <- read_excel(file.choose(), sheet = "Dataset_Mundial_Final")
# 3. VERIFICAR DATOS
str(Datos)
## tibble [58.978 × 29] (S3: tbl_df/tbl/data.frame)
##  $ OBJECTID              : num [1:58978] 2 3 4 5 6 7 8 9 10 11 ...
##  $ code                  : chr [1:58978] "00001-AFG-P" "00002-AFG-P" "00003-AFG-P" "00004-AFG-P" ...
##  $ plant_name            : chr [1:58978] "Badghis Solar Power Plant" "Balkh solar farm" "Behsood solar farm" "Dab Pal 4 solar farm" ...
##  $ country               : chr [1:58978] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
##  $ operational_status    : chr [1:58978] "cancelled - inferred 4 y" "cancelled - inferred 4 y" "cancelled - inferred 4 y" "shelved - inferred 2 y" ...
##  $ longitude             : num [1:58978] 62,9 67,1 70,4 66,2 65,7 ...
##  $ latitude              : num [1:58978] 35,1 36,7 34,4 33,8 31,7 ...
##  $ elevation             : num [1:58978] 918 359 629 2288 1060 ...
##  $ area                  : num [1:58978] 6,74 10,72 487,73 111,8 1929,96 ...
##  $ size                  : chr [1:58978] "Small" "Small" "Small" "Small" ...
##  $ slope                 : num [1:58978] 7,38 0,49 1,1 6,16 1,23 ...
##  $ slope_type            : chr [1:58978] "Moderado" "Plano o casi plano" "Plano o casi plano" "Moderado" ...
##  $ curvature             : num [1:58978] -0,024 0 0 0,045 -0,005 -0,005 -0,015 0 0 -0,009 ...
##  $ curvature_type        : chr [1:58978] "Superficies cóncavas / Valles" "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies convexas / Crestas" ...
##  $ aspect                : num [1:58978] 96,8 358,5 36,2 305,8 248,4 ...
##  $ aspect_type           : chr [1:58978] "East" "North" "Northeast" "Northwest" ...
##  $ dist_to_road          : num [1:58978] 7037,1 92,7 112,1 1705,3 115,8 ...
##  $ ambient_temperature   : num [1:58978] 14,4 17,88 21,32 8,86 19,64 ...
##  $ ghi                   : num [1:58978] 5,82 5,58 5,8 6,75 6,62 ...
##  $ humidity              : num [1:58978] 47,7 42,3 36,4 37,3 24,2 ...
##  $ wind_speed            : num [1:58978] 0,039 0,954 0,234 0,943 0,37 ...
##  $ wind_direction        : num [1:58978] 187,5 207,4 255,6 160,3 97,7 ...
##  $ dt_wind               : chr [1:58978] "South" "Southwest" "West" "South" ...
##  $ solar_aptitude        : num [1:58978] 0,72 0,635 0,685 0,659 0,819 0,819 0,818 0,642 0,63 0,374 ...
##  $ solar_aptitude_rounded: num [1:58978] 7 6 7 7 8 8 8 6 6 4 ...
##  $ solar_aptittude_class : chr [1:58978] "Alta" "Alta" "Alta" "Alta" ...
##  $ capacity              : num [1:58978] 32 40 60 3000 100 100 36 50 25 100 ...
##  $ optimal_tilt          : num [1:58978] 30 31 31,1 33 31 ...
##  $ pv_potential          : num [1:58978] 4,61 4,41 4,57 5,42 5,17 ...

3 EXTRAER VARIABLE

Extraemos la variable solar_aptittude_class, omitimos las celdas en blanco y verificamos el tamaño muestral.

# 1. Extraemos la columna y definimos el orden l\u00f3gico (Ordinal)
# Usamos el nombre exacto de tu variable: Size
Size_Vec <- factor(Datos$size, 
                    levels = c("small", "medium", "Big"), 
                    ordered = TRUE)

# 2. Creamos el conteo (ni)
conteo_size <- table(Size_Vec)

4 TABLA DE DISTRIBUCIÓN DE FRECUENCIA

Extraemos la variable size para obtener su frecuencia absoluta (ni) y calculamos el porcentaje (hi) sobre el total. Finalmente, añadimos una Asignación jerárquica y consolidamos todo en el data frame TDF_Solar con un diseño profesional y centrado.

# 1. CARGA DE LIBRERÍAS (Silenciadas)
suppressPackageStartupMessages({
  library(gt)
  library(dplyr)
  library(readxl)
})

# 2. PREPARACIÓN DE LA VARIABLE ORDINAL
# Ajustamos los niveles con Mayúscula Inicial para que coincidan con tu Excel
size_vec <- factor(Datos$size, 
                   levels = c("Small", "Medium", "Big"), 
                   ordered = TRUE)

# 3. CONSTRUCCIÓN DE LA DATA (ni y hi)
conteo_size_raw <- table(size_vec)
ni_size_val <- as.numeric(conteo_size_raw)
hi_size_val <- (ni_size_val / sum(ni_size_val)) * 100

df_size_final <- data.frame(
  Asignacion = 1:3,
  Tamano = names(conteo_size_raw),
  ni = ni_size_val,
  hi = hi_size_val
)

# 4. GENERACIÓN DE LA TABLA GT (Diseño Idéntico)
df_size_final %>%
  gt() %>%
  tab_header(
    title = md("**TABLA N\u00ba 2: DISTRIBUCI\u00d3N DE FRECUENCIAS DEL TAMA\u00d1O DE PLANTA**"),
  ) %>%
  cols_label(
    Asignacion = "Asignaci\u00f3n", 
    Tamano = "Tama\u00f1o de la Planta", 
    ni = "ni", 
    hi = "hi (%)"
  ) %>%
  fmt_number(columns = hi, decimals = 2) %>%
  cols_align(align = "center", columns = everything()) %>%
  # Estilo de encabezados (Gris claro y negrita)
  tab_style(
    style = list(cell_fill(color = "#F2F3F4"), cell_text(weight = "bold", color = "#2E4053")),
    locations = cells_column_labels()
  ) %>%
  # Opciones de diseño para consistencia visual
  tab_options(
    table.width = pct(90),
    data_row.padding = px(12),
    column_labels.padding = px(15),
    table.border.top.style = "solid",
    table.border.top.color = "#2E4053",
    table.border.bottom.style = "solid",
    table.border.bottom.color = "#2E4053"
  )
TABLA Nº 2: DISTRIBUCIÓN DE FRECUENCIAS DEL TAMAÑO DE PLANTA
Asignación Tamaño de la Planta ni hi (%)
1 Small 41069 69.63
2 Medium 13208 22.39
3 Big 4701 7.97

5 ANÁLISIS GRÁFICO

5.1 DIAGRAMA DE BARRAS

# 1. Configuración de márgenes (espacio para las etiquetas verticales)
par(mar = c(9, 4, 4, 2))

# 2. Creación del gráfico de barras para la variable Size
# Usamos df_size_final que creamos en el paso anterior
barplot(df_size_final$hi,
        main = "GR\u00c1FICO N\u00ba 2: PORCENTAJE DEL TAMA\u00d1O DE LA PLANTA",
        ylab = "Porcentaje (%)",
        col = "#B0C4DE",      # Azul profesional (se mantiene)
        names.arg = c("1", "2", "3"), 
        las = 1,              # Etiquetas verticales
        cex.names = 0.9,      # Tamaño de las etiquetas "Small, Medium, Big"
        cex.axis = 0.8,       # Tamaño de los números del eje Y
        cex.main = 1.0,       # Tamaño del título principal
        ylim = c(0, max(df_size_final$hi) + 10)) # Espacio extra arriba para que no tope el título

# 3. Título del eje horizontal
# \u00f1 = ñ
mtext("Tama\u00f1o de la Planta", side = 1, line = 7)

6 CONJETURA DEL MODELO

Se aplicó una Distribución Geométrica para validar el Tamaño de la Planta. Este modelo es ideal para representar la tendencia decreciente de las categorías (de Small a Big). La alta correlación entre lo observado y lo esperado confirma que la distribución del tamaño sigue una lógica técnica coherente, respaldando la validez del análisis logístico del proyecto.

# 1. PARÁMETROS DEL MODELO GEOMÉTRICO
# Mapeo: Small = 0, Medium = 1, Big = 2
X_indices <- 0:2
n_total_Size <- sum(df_size_final$ni)

# 2. CÁLCULO DEL PARÁMETRO 'p' (Probabilidad de éxito)
# En el modelo geom\u00e9trico: p = 1 / (media + 1)
media_obs_size <- sum(X_indices * df_size_final$ni) / n_total_Size
prob_p_geom <- 1 / (media_obs_size + 1)

# 3. CÁLCULO DEL MODELO (Lo esperado)
P_Geometrica_Size <- dgeom(X_indices, prob = prob_p_geom) * 100

# 4. GRÁFICA COMPARATIVA "PRIME"
par(mar = c(9, 4, 4, 2))
max_y_size <- max(max(df_size_final$hi), max(P_Geometrica_Size))

barplot(rbind(df_size_final$hi, P_Geometrica_Size), 
        beside = TRUE,
        main = "GR\u00c1FICO N\u00ba 3: Comparado de lo Observado frente a lo Esperado del Tamaño de la Planta",
        ylab = "Porcentaje (%)",
        names.arg = c("1", "2", "3"), 
        col = c("#B0C4DE", "#AED6F1"), 
        ylim = c(0, max_y_size + 25), 
        las = 1, 
        cex.names = 0.9,
        cex.main = 0.85)

legend("topright", 
       legend = c("Realidad", "Modelo Geom"), 
       fill = c("#B0C4DE", "#AED6F1"), 
       bty = "n", cex = 0.8)

mtext("Tama\u00f1o de la Planta ", side = 1, line = 6)

6.1 TEST DE PEARSON

# 1. DEFINICI\u00d3N DE VARIABLES PARA EL TEST
# Fo_Size = Frecuencia Observada de Size
# Fe_Size = Frecuencia Esperada (P_Geometrica_Size calculada antes)
Fo_Size <- df_size_final$hi
Fe_Size <- P_Geometrica_Size 

# 2. C\u00c1LCULO DEL TEST DE PEARSON
test_correlacion_size <- cor.test(Fo_Size, Fe_Size)
r_valor_size <- round(test_correlacion_size$estimate, 4) # El coeficiente 'r'

# 3. GR\u00c1FICA DE CORRELACI\u00d3N
par(mar = c(5, 5, 4, 2)) 

plot(Fo_Size, Fe_Size, 
     main = "GR\u00c1FICO N\u00ba 4: CORRELACI\u00d3N DEL MODELO GEOM\u00c9TRICO",
     cex.main = 0.85,
     xlab = "Frecuencia Observada (%)", 
     ylab = "Frecuencia Esperada (%)", 
     pch = 19,           
     col = "#2E4053",    
     cex = 1.5)          

# Añadimos la línea de tendencia (Regresión lineal)
abline(lm(Fe_Size ~ Fo_Size), col = "red", lwd = 2)

# Añadimos el valor de R para el informe
text(x = min(Fo_Size), y = max(Fe_Size), 
     labels = paste("r =", r_valor_size), 
     pos = 4, font = 2, col = "#2E4053")

# 1. C\u00c1LCULO DE LA CORRELACI\u00d3N (Escala 0-100)
# Fo_Size: Datos reales (hi) | Fe_Size: Modelo (Geom\u00e9trico)
# Nota: Aseg\u00farate de que Fe_Size sea P_Geometrica_Size del paso anterior
Correlacion_Size_Geom <- cor(Fo_Size, Fe_Size) * 100

# 2. MOSTRAR EL RESULTADO
Correlacion_Size_Geom
## [1] 99,98424

6.2 TEST DE CHI-CUADRADO

# 1. CÁLCULO DEL ESTADÍSTICO CHI-CUADRADO (Calculado)
# Fo_Size: Observado (hi) | Fe_Size: Esperado (Geom\u00e9trico)
x2_Size_Geom <- sum(((Fo_Size - P_Geometrica_Size)^2) / P_Geometrica_Size)

# 2. GRADOS DE LIBERTAD
# k - 1 (donde k es el n\u00famero de categor\u00edas: Small, Medium, Big)
gl_Size <- length(Fo_Size) - 1

# 3. VALOR CRÍTICO (95% de confianza)
vc_Size <- qchisq(0.95, gl_Size)

# 4. RESULTADOS EN CONSOLA
cat("Estad\u00edstico Chi-cuadrado (Calculado):", round(x2_Size_Geom, 4), "\n")
## Estadístico Chi-cuadrado (Calculado): 1,4302
cat("Valor Cr\u00edtico (Tabla):", round(vc_Size, 4), "\n")
## Valor Crítico (Tabla): 5,9915
cat("\u00bfSe acepta el modelo Geom\u00e9trico? (Calculado < Cr\u00edtico):", x2_Size_Geom < vc_Size, "\n")
## ¿Se acepta el modelo Geométrico? (Calculado < Crítico): TRUE

7 TABLA RESUMEN DE BONDAD DEL AJUSTE

# 1. CREACIÓN DEL DATAFRAME RESUMEN (Con código Unicode para la ñ)
tabla_resumen_Size <- data.frame(
  Variable = "Tama\u00f1o de la Planta", # \u00f1 es la letra ñ
  Pearson = round(Correlacion_Size_Geom, 2),
  Chi2    = round(x2_Size_Geom, 4),
  Umbral  = round(vc_Size, 2),
  Resultado = ifelse(x2_Size_Geom < vc_Size, "Modelo Aceptado", "Modelo Rechazado")
)

# 2. GENERACIÓN DE LA TABLA GT
library(gt)
library(dplyr)

tabla_resumen_Size %>% 
  gt() %>% 
  tab_header(
    title = md("**TABLA N\u00ba 4: RESUMEN DEL TEST DE BONDAD AL MODELO DE PROBABILIDAD (SIZE)**")
  ) %>%
  cols_label(
    Variable = "Variable",       
    Pearson  = "Test Pearson (%)",
    Chi2     = "Chi Cuadrado", 
    Umbral   = "Umbral de Aceptaci\u00f3n",
    Resultado = "Resultado Final"
  ) %>%
  tab_source_note(
    source_note = "Autor: Grupo 1"
  ) %>%
  cols_align(align = "center", columns = everything()) %>%
  # Estilo del Título (Azul Oscuro y Blanco)
  tab_style(
    style = list(cell_fill(color = "#2E4053"), cell_text(color = "white", weight = "bold")),
    locations = cells_title()
  ) %>%
  # Estilo de Encabezados (Gris y Azul Oscuro)
  tab_style(
    style = list(cell_fill(color = "#F2F3F4"), cell_text(weight = "bold", color = "#2E4053")),
    locations = cells_column_labels()
  ) %>%
  # Resaltado del resultado
  tab_style(
    style = cell_text(color = "red", weight = "bold"),
    locations = cells_body(columns = Resultado, rows = Resultado == "Modelo Rechazado")
  ) %>%
  # Opciones de diseño
  tab_options(
    table.width = pct(95),
    table.border.top.color = "#2E4053",
    table.border.bottom.color = "#2E4053",
    column_labels.border.bottom.color = "#2E4053",
    data_row.padding = px(10)
  )
TABLA Nº 4: RESUMEN DEL TEST DE BONDAD AL MODELO DE PROBABILIDAD (SIZE)
Variable Test Pearson (%) Chi Cuadrado Umbral de Aceptación Resultado Final
Tamaño de la Planta 99,98 1,4302 5,99 Modelo Aceptado
Autor: Grupo 1

8 CÁLCULO DE PROBABILIDADES

  1. ¿Cuál es la probabilidad de que una planta seleccionada al azar sea de tamaño “Small”?
# Probabilidad de tamaño "Small"
# Usamos el nombre de la columna "Tamano" que definimos en el dataframe
prob_small <- df_size_final$hi[df_size_final$Tamano == "Small"]

# Mostramos el resultado
prob_small
## [1] 69,63444

La probabilidad de que una planta seleccionada al azar presente un tamaño “Small” es del 69.63444%. Este resultado es clave para la dimensión del proyecto, ya que indica que la gran mayoría de las unidades evaluadas corresponden a pequeña escala, lo que sugiere una infraestructura distribuida y de menor impacto inicial en el terreno.

  1. ¿Cuál es la probabilidad de que un punto seleccionado al azar NO sea de tamaño “Big”?
# Probabilidad de que NO sea Big (es decir, Small o Medium)
prob_no_big <- sum(df_size_final$hi[df_size_final$Tamano != "Big"])

# Mostramos el resultado
prob_no_big
## [1] 92,02923

La probabilidad de que un punto seleccionado al azar presente un tamaño Small o Medium (No Big) es del 92.02923%. Este resultado es clave para el presupuesto, ya que confirma que casi la totalidad del proyecto se puede ejecutar con logística estándar y equipos convencionales.

9 CONCLUSIÓN

El modelo geométrico confirmó que predominan las instalaciones Small. Aunque existe variabilidad en los datos, el alto coeficiente de Pearson valida la tendencia y da un respaldo estadístico sólido para organizar la logística y la infraestructura del proyecto.