…
“La variable Estado Operacional se define como una variable cualitativa ordinal, puesto que sus categorías no solo clasifican el estatus de las plantas solares, sino que se organizan siguiendo una secuencia lógica y jerárquica basada en el ciclo de vida del proyecto (desde la fase de anuncio y pre-construcción hasta la etapa operativa o de retiro).”
Importamos el archivo “Mundial.csv” desde una ruta local y lo almacena en el objeto datos, usando espacios o tabulaciones como separador.
Extraemos la variable estado operacional, omitimos las celdas en blanco o valores iguales a cero y verificamos el tamaño muestral
# 1. Eliminar valores nulos (NAs) de la variable de estado operativo
operational_status <- na.omit(datos$operational_status)
# 2. Eliminar celdas vacías o registros sin texto
operational_status <- operational_status[operational_status != ""]
# 3. Contar el total de registros válidos para esta variable
n_operativo <- length(operational_status)
# 4. Mostrar el resultado en el reporte
cat("Registros válidos de operational_status:", n_operativo)## Registros válidos de operational_status: 58978
En este apartado se cuantifican los estados operacionales de las plantas solares a nivel mundial y se asigna un identificador numérico (\(X_i\)) a cada subtipo de estado operacional.
# 1. Extraer y limpiar la variable directamente del archivo
operativo_limpio <- datos$operational_status[!is.na(datos$operational_status) & datos$operational_status != ""]
# 2. Convertir en Factor usando los nombres exactos detectados en el CSV
operativo_factor <- factor(operativo_limpio,
levels = c(
"operating",
"construction",
"pre-construction",
"announced",
"shelved",
"shelved - inferred 2 y",
"cancelled",
"cancelled - inferred 4 y",
"mothballed",
"retired"
),
labels = c(
"OPERATIVA",
"EN CONSTRUCCIÓN",
"PRE-CONSTRUCCIÓN",
"ANUNCIADA",
"SUSPENDIDA",
"SUSPENDIDA (INF. 2A)",
"CANCELADA",
"CANCELADA (INF. 4A)",
"EN RESERVA",
"RETIRO / CERRADA"
))
# 3. Cálculo de frecuencias ni y hi
ni_op <- table(operativo_factor)
hi_op <- prop.table(ni_op) * 100
# 4. Construcción de la tabla base con ID (Xi)
tabla_op_base <- data.frame(
ID = 1:length(ni_op),
Estado_Operativo = names(ni_op),
ni = as.vector(ni_op),
hi = round(as.vector(hi_op), 2)
)
# 5. Fila de TOTAL
fila_total_op <- data.frame(
ID = NA,
Estado_Operativo = "TOTAL",
ni = sum(tabla_op_base$ni),
hi = round(sum(tabla_op_base$hi), 0)
)
# 6. Consolidación
tabla_final_op <- rbind(tabla_op_base, fila_total_op)
# 7. Mostrar la tabla
knitr::kable(tabla_final_op,
col.names = c("Valor (Xi)", "Estado Operativo", "Frecuencia (ni)", "Porcentaje (hi %)"),
caption = "Tabla 1: Distribución por Estado Operativo",
align = "clcc")| Valor (Xi) | Estado Operativo | Frecuencia (ni) | Porcentaje (hi %) |
|---|---|---|---|
| 1 | OPERATIVA | 47538 | 80.60 |
| 2 | EN CONSTRUCCIÓN | 2005 | 3.40 |
| 3 | PRE-CONSTRUCCIÓN | 6246 | 10.59 |
| 4 | ANUNCIADA | 1382 | 2.34 |
| 5 | SUSPENDIDA | 246 | 0.42 |
| 6 | SUSPENDIDA (INF. 2A) | 530 | 0.90 |
| 7 | CANCELADA | 564 | 0.96 |
| 8 | CANCELADA (INF. 4A) | 426 | 0.72 |
| 9 | EN RESERVA | 9 | 0.02 |
| 10 | RETIRO / CERRADA | 32 | 0.05 |
| NA | TOTAL | 58978 | 100.00 |
“La decisión de agrupar las categorías originales de la variable Estado Operacional responde criterios fundamentales como Corrección de la Asimetría Extrema: La base de datos original presentaba una distribución altamente desequilibrada, donde la categoría ‘Operativa’ concentraba la gran mayoría de las observaciones, mientras que las demas representaban mucho menos.
# 1. Crear la nueva columna agrupada
datos <- datos %>%
mutate(Estado_5_Grupos = case_when(
operational_status == "operating" ~ "1. OPERATIVA",
operational_status %in% c("construction", "pre-construction") ~ "2. EN CONSTRUCCIÓN",
operational_status == "announced" ~ "3. PLANIFICADA / ANUNCIADA",
operational_status %in% c("shelved", "shelved - inferred 2 y", "mothballed") ~ "4. SUSPENDIDA / EN RESERVA",
operational_status %in% c("cancelled", "cancelled - inferred 4 y", "retired") ~ "5. CANCELADA / RETIRADA",
TRUE ~ "6. OTROS"
))
# 2. Calcular frecuencias
ni_op <- table(datos$Estado_5_Grupos)
hi_op <- prop.table(ni_op) * 100
# 3. Construir la tabla base con Xi
tabla_op_5 <- data.frame(
ID = 1:length(ni_op),
Estado_Operativo = names(ni_op),
ni = as.vector(ni_op),
hi = round(as.vector(hi_op), 2)
)
# 4. Fila de TOTAL
fila_total_op <- data.frame(
ID = NA,
Estado_Operativo = "**TOTAL**",
ni = sum(tabla_op_5$ni),
hi = 100
)
tabla_final_op <- rbind(tabla_op_5, fila_total_op)
# 5. Renderizar tabla con formato profesional
knitr::kable(tabla_final_op,
caption = "Tabla 2: Tabla de Distribución por Estado Operativo ",
col.names = c("Xi", "Estado del Proyecto", "Frecuencia (ni)", "Porcentaje (hi %)"),
align = "clcc",
digits = 2) | Xi | Estado del Proyecto | Frecuencia (ni) | Porcentaje (hi %) |
|---|---|---|---|
| 1 | 1. OPERATIVA | 47538 | 80.60 |
| 2 | 2. EN CONSTRUCCIÓN | 8251 | 13.99 |
| 3 | 3. PLANIFICADA / ANUNCIADA | 1382 | 2.34 |
| 4 | 4. SUSPENDIDA / EN RESERVA | 785 | 1.33 |
| 5 | 5. CANCELADA / RETIRADA | 1022 | 1.73 |
| NA | TOTAL | 58978 | 100.00 |
# Filtramos el TOTAL
grafico_op_data <- tabla_final_op[!is.na(tabla_final_op$ID), ]
ggplot(grafico_op_data, aes(x = factor(ID), y = ni)) +
geom_bar(stat = "identity", fill = "skyblue", color = "#5D6D7E") +
theme_minimal() +
labs(title = "Gráfica N° 1:Distribución general por estado operacional",
x = "Estado Operacional (Xi)", y = "Cantidad")Se seleccionó el modelo geométrico debido a que la distribución de frecuencias presenta un decaimiento constante y sucesivo. Este comportamiento visual, donde cada barra es proporcionalmente menor a la anterior, constituye la firma característica de una distribución geométrica.
# 1. Filtramos la fila de TOTAL para realizar los cálculos
tabla_modelo_op <- tabla_final_op[!is.na(tabla_final_op$ID), ]
# 2. Estimación del parámetro p basado en la media observada
media_observada_op <- sum(tabla_modelo_op$ID * tabla_modelo_op$ni) / sum(tabla_modelo_op$ni)
p_estimado_op <- 1 / media_observada_op
# 3. Cálculo de frecuencias relativas teóricas (Modelo %)
# Fórmula: P(X=k) = p * (1-p)^(k-1)
tabla_modelo_op$hi_modelo <- (p_estimado_op * (1 - p_estimado_op)^(tabla_modelo_op$ID - 1)) * 100
# 4. Preparación de datos para la comparación (Uso de tidyr)
library(tidyr)
df_comparativo_op <- pivot_longer(tabla_modelo_op,
cols = c("hi", "hi_modelo"),
names_to = "Origen",
values_to = "Valor")
# Ajuste de etiquetas para la leyenda coincidiendo con tu ejemplo
df_comparativo_op$Origen <- ifelse(df_comparativo_op$Origen == "hi", "Realidad", "Modelo")
# 5. Generación de la Gráfica
ggplot(df_comparativo_op, aes(x = factor(ID), y = Valor, fill = Origen)) +
geom_bar(stat = "identity", position = "dodge", color = "black") +
# Colores exactos: skyblue para modelo y dodgerblue4 para realidad
scale_fill_manual(values = c("Modelo" = "skyblue", "Realidad" = "dodgerblue4")) +
theme_minimal() +
labs(
title = "Gráfica N°2 : Modelo de probabilidad geométrico de estado operacional",
subtitle = paste("Parámetro p (Éxito) estimado =", round(p_estimado_op, 4)),
x = "Estado Operacional (Xi)",
y = "Probabilidad",
fill = "Leyenda"
) +
theme(
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank()
)Mide la correlación entre las frecuencias observadas (Realidad) y las esperadas (Modelo). Una correlación cercana al 100% indica que la tendencia de los datos sigue fielmente la progresión geométrica.
# 1. Definir Fo (Frecuencias Observadas - Realidad)
Fo_op <- tabla_modelo_op$hi
# 2. Definir Fe (Frecuencias Esperadas - Modelo Geométrico)
Fe_op <- tabla_modelo_op$hi_modelo
# 3. Cálculo de la Correlación de Pearson
Correlacion_Op <- cor(Fo_op, Fe_op) * 100
# 4. Mostrar el resultado
cat("La correlación de Pearson (afinidad) entre la Realidad y el Modelo es:",
round(Correlacion_Op, 2), "%")## La correlación de Pearson (afinidad) entre la Realidad y el Modelo es: 99.77 %
El test Chi-Cuadrado determina si las diferencias entre la realidad y el modelo son estadísticamente significativas.
# 1. Definición de parámetros básicos
k_op <- length(tabla_modelo_op$ni)
n_total_op <- sum(tabla_modelo_op$ni)
# 2. Grados de libertad (k - 1 - número de parámetros estimados)
grados_lib_op <- k_op - 2
# 3. Nivel de significancia
nivel_sign_op <- 0.00001
# 4. Preparación de Frecuencias (Fo y Fe)
Fo_op_porc <- tabla_modelo_op$hi
Fe_op_porc <- tabla_modelo_op$hi_modelo
# 5. Cálculo del estadístico Chi-Cuadrado (x2)
x2_op <- sum((Fe_op_porc - Fo_op_porc)^2 / Fe_op_porc)
# 6. Determinación del Umbral (Valor Crítico)
umbral_op <- qchisq(1 - nivel_sign_op, grados_lib_op)
# 7. Resultado del Test
modelo_aceptado_op <- x2_op < umbral_op
# --- Visualización de Resultados ---
cat("Estadístico Chi-Cuadrado calculado:", round(x2_op, 4), "\n")## Estadístico Chi-Cuadrado calculado: 12.7946
## Umbral de Aceptación (Valor Crítico): 25.9017
## ¿El modelo es aceptado bajo este umbral?: TRUE
Para demostrar la utilidad práctica del análisis realizado sobre la infraestructura energética, se plantean y resuelven dos interrogantes clave basadas en el comportamiento de los proyectos:
Pregunta A: ¿Cuál es la probabilidad teórica de que una nueva planta registrada en la base de datos se encuentre en estado OPERATIVA?
# La probabilidad teórica del primer estado (ID 1) es p
prob_teorica_op <- p_estimado_op
cat("Respuesta: La probabilidad teórica es del", round(prob_teorica_op * 100, 2), "%")## Respuesta: La probabilidad teórica es del 77.16 %
Pregunta B: Si se proyecta la construcción de 500 nuevas plantas solares y se mantiene la distribución observada, ¿cuántas de ellas se espera que estén actualmente en fase de EN CONSTRUCCIÓN?
# Obtenemos la frecuencia relativa real (hi) para el ID 2 (En Construcción)
hi_construccion <- tabla_modelo_op$hi[tabla_modelo_op$ID == 2]
# Cálculo de la cantidad esperada para una muestra de N = 500
n_proyeccion_op <- 500
cantidad_esperada_op <- (hi_construccion / 100) * n_proyeccion_op
cat("Respuesta: Se esperarían aproximadamente", round(cantidad_esperada_op, 0), "proyectos en fase de construcción.")## Respuesta: Se esperarían aproximadamente 70 proyectos en fase de construcción.
La variable Estado Operacional presenta un comportamiento que se ajusta a una distribución geométrica decreciente. Mediante un parámetro estimado(posibilidad de exito). Esta estructura permite predecir; por ejemplo, ¿Cuál es la probabilidad teórica de que una nueva planta registrada en la base de datos se encuentre en estado OPERATIVA? .
La probabilidad sería de 77.16 %