Configuración y Carga
de Datos
##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: MARTIN SARMIENTO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####
#### VARIABLE ESTADO OPERATIVO ####
## DATASET ##
setwd("~/R INFERENCIAL/OPERATIONAL_STATUS")
# Cargar dataset
Datos <- read.csv("DataSet_prov.csv", sep = ";", fileEncoding = "latin1")
## Estructura de los datos
str(Datos)
## 'data.frame': 5075 obs. of 30 variables:
## $ FID_ : int 0 2 3 4 5 6 10 11 12 13 ...
## $ OBJECTID : int 127 129 130 131 132 133 137 138 139 140 ...
## $ code : chr "00127-ARG-P" "00129-ARG-G" "00130-ARG-P" "00131-ARG-P" ...
## $ plant_name : chr "Aconcagua solar farm" "Altiplano 200 Solar Power Plant" "Altiplano 200 Solar Power Plant" "Anchoris solar farm" ...
## $ country : chr "Argentina" "Argentina" "Argentina" "Argentina" ...
## $ operational_status : chr "announced" "operating" "operating" "construction" ...
## $ longitude : chr "-68,8713" "-66,895798" "-66,926102" "-68,915001" ...
## $ latitude : chr "-32,998501" "-24,1392" "-24,073999" "-33,330101" ...
## $ elevation : int 929 4000 4000 937 865 858 570 1612 665 3989 ...
## $ area : chr "250,337006" "4397290" "5774,399902" "645,163025" ...
## $ size : chr "Small" "Big" "Small" "Small" ...
## $ slope : chr "0,574179" "1,60257" "6,24265" "0,902748" ...
## $ slope_type : chr "Plano o casi plano" "Plano o casi plano" "Moderado" "Plano o casi plano" ...
## $ curvature : chr "0,000795" "-0,002781" "-0,043699" "0,002781" ...
## $ curvature_type : chr "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies cóncavas / Valles" "Superficies planas o intermedias" ...
## $ aspect : chr "55,124672" "188,707367" "270,913513" "108,434952" ...
## $ aspect_type : chr "Northeast" "South" "West" "East" ...
## $ dist_to_road : chr "127,2827045" "56014,95403" "52696,78572" "335,9280031" ...
## $ ambient_temperature : chr "12,6" "6,8" "6,8" "13,1" ...
## $ ghi : chr "6,11" "8,012" "7,878" "6,119" ...
## $ humidity : chr "53,74" "53,74" "53,74" "53,74" ...
## $ wind_speed : chr "3,7789" "7,02062" "8,32836" "3,87037" ...
## $ wind_direction : chr "55,099998" "55,099998" "55,099998" "55,099998" ...
## $ dt_wind : chr "Northeast" "Northeast" "Northeast" "Northeast" ...
## $ solar_aptitude : chr "0,746197" "0,8" "0,726996" "0,595309" ...
## $ solar_aptitude_rounded: int 7 8 7 6 7 7 7 8 7 8 ...
## $ solar_aptittude_class : chr "Alta" "Alta" "Alta" "Media" ...
## $ capacity : chr "25" "101" "107" "180" ...
## $ optimal_tilt : int 31 26 26 31 33 30 31 29 31 27 ...
## $ pv_potential : chr "4,983" "6,389" "6,392" "4,969" ...
# 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)
Agrupación 1 (Fase
Activa) - Opcion A BINOMIAL
# Definimos niveles
niveles_Bin <- c("Pre-Construcción", "Anunciado", "Construcción", "Operativo")
# Extracción
Datos_G1_Bin <- subset(Datos, operational_status %in% niveles_Bin)
Datos_G1_Bin$operational_status <- factor(Datos_G1_Bin$operational_status,
levels = niveles_Bin, ordered = TRUE)
# Crear Tabla de Frecuencias y Mapeo
TDF_G1_Bin <- as.data.frame(table(Datos_G1_Bin$operational_status))
colnames(TDF_G1_Bin) <- c("Status", "ni")
# Mapeo
TDF_G1_Bin$X <- 0:(nrow(TDF_G1_Bin) - 1)
TDF_G1_Bin$hi <- TDF_G1_Bin$ni / sum(TDF_G1_Bin$ni)
# Visualización del Mapeo
TDF_G1_Bin %>%
select(Status, X, ni, hi) %>%
gt() %>%
tab_header(
title = md("**Tabla N°2 de Distribución de Frecuencias del Estado Operativo de las Plantas Solares - Mapeado**")) %>%
tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
cols_label(
Status = "Estado Operativo",
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°2 de Distribución de Frecuencias del Estado Operativo de las Plantas Solares - Mapeado |
| Estado Operativo |
Valor Asignado |
Frecuencia (ni) |
Porcentaje (hi%) |
| Pre-Construcción |
0 |
2795 |
0.5904 |
| Anunciado |
1 |
76 |
0.0161 |
| Construcción |
2 |
111 |
0.0234 |
| Operativo |
3 |
1752 |
0.3701 |
| Autor: Martin Sarmiento |
Conjetura del
Modelo
# Usamos la columna X que acabamos de mapear
n_total_Bin <- sum(TDF_G1_Bin$ni)
# Parámetros Binomiales
size_binom_A <- nrow(TDF_G1_Bin) - 1
media_obs_A <- sum(TDF_G1_Bin$X * TDF_G1_Bin$ni) / n_total_Bin # Suma de X * ni
prob_p_A <- media_obs_A / size_binom_A
# Probabilidades Teóricas
P_Binomial_A <- dbinom(TDF_G1_Bin$X, size = size_binom_A, prob = prob_p_A)
# Gráfico
par(mar = c(8, 4, 4, 2))
barplot(rbind(TDF_G1_Bin$hi, P_Binomial_A),
beside = TRUE,
main = "Gráfica N°2: Comparado de lo Observado frente a lo Esperado del Estado Operativo de las Plantas Solares",
ylab = "Porcentaje (%)",
names.arg = TDF_G1_Bin$Status,
col = c("#D8BFD8", "purple"),
legend.text = c("Observado", "Esperado"),
args.legend = list(x = "topright"),
las = 2,
cex.names = 0.8,
cex.main = 0.7)
mtext("Estado Operativo", side = 1, line = 6)

Test de Pearson
# Definir Frecuencia Observada y Esperada
Fo_A <- TDF_G1_Bin$hi
Fe_A <- P_Binomial_A
# Gráfico de Correlación
plot(Fo_A, Fe_A,
main = "Gráfica N°3: Correlación del Modelo Observado y Esperado del Estado Operativo de las Plantas Solares",
cex.main = 0.7,
xlab = "Frecuencia Observada",
ylab = "Frecuencia Esperada",
pch = 19, col = "#68228B")
abline(lm(Fe_A ~ Fo_A), col = "red", lwd = 2)

# Cálculo del coeficiente
Correlacion_A <- cor(Fo_A, Fe_A) * 100
Correlacion_A
## [1] -62.17285
Test de
Chi-cuadrado
# Cálculo de Chi-cuadrado
x2_A <- sum(((Fo_A - Fe_A)^2) / Fe_A)
# Grados de libertad (k - 1)
gl_A <- length(Fo_A) - 1
# Valor crítico
vc_A <- qchisq(0.95, gl_A)
# Mostrar resultados
x2_A
## [1] 2.83646
## [1] 7.814728
# Validación lógica
x2_A < vc_A
## [1] TRUE
Tabla Resumen del
Test
# Crear data frame resumen
tabla_resumen_A <- data.frame(
Variable = "Estado Operativo",
Pearson = round(Correlacion_A, 2),
Chi2 = round(x2_A, 4),
Umbral = round(vc_A, 2)
)
# Visualizar con GT
tabla_resumen_A %>%
gt() %>%
cols_label(
Variable = ("Variable"),
Pearson = "Test Pearson (%)",
Chi2 = ("Chi Cuadrado"),
Umbral = "Umbral de Aceptación"
) %>%
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 |
| Estado Operativo |
-62.17 |
2.8365 |
7.81 |
| Autor: Martin Sarmiento |
Cálculo de
Probabilidades
¿Cuál es la probabilidad de encontrar una planta solar que ya esté
totalmente Operativa?
prob_op <- dbinom(3, size = size_binom_A, prob = prob_p_A)
paste0(round(prob_op * 100, 2), "%")
## [1] "5.98%"
Agrupación 2 (Fase
Inactiva)
# Definimos niveles
niveles_G2 <- c("Inactivo (Mothballed)", "Archivado (Shelved)", "Archivado (Inferred 2y)", "Cancelado", "Cancelado (Inferred 4y)")
# Extracción
Datos_G2 <- subset(Datos, operational_status %in% niveles_G2)
Datos_G2$operational_status <- factor(Datos_G2$operational_status, levels = niveles_G2)
# Crear Tabla de Frecuencias y Mapeo
TDF_G2 <- as.data.frame(table(Datos_G2$operational_status))
colnames(TDF_G2) <- c("Status", "ni")
# Mapeo
TDF_G2$X <- 0:(nrow(TDF_G2) - 1)
TDF_G2$hi <- TDF_G2$ni / sum(TDF_G2$ni)
# Visualización del Mapeo
TDF_G2 %>%
select(Status, X, ni, hi) %>%
gt() %>%
tab_header(
title = md("**Tabla N°4 de Distribución de Frecuencias del Estado Operativo de las Plantas Solares - Mapeado**")) %>%
tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
cols_label(
Status = "Estado Operativo",
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 Estado Operativo de las Plantas Solares - Mapeado |
| Estado Operativo |
Valor Asignado |
Frecuencia (ni) |
Porcentaje (hi%) |
| Inactivo (Mothballed) |
0 |
2 |
0.0059 |
| Archivado (Shelved) |
1 |
30 |
0.0880 |
| Archivado (Inferred 2y) |
2 |
76 |
0.2229 |
| Cancelado |
3 |
209 |
0.6129 |
| Cancelado (Inferred 4y) |
4 |
24 |
0.0704 |
| Autor: Martin Sarmiento |
Conjentura del
Modelo
# Usamos la columna X que acabamos de mapear
n_total_G2 <- sum(TDF_G2$ni)
# Parámetros Binomiales
size_binom2 <- nrow(TDF_G2) - 1
media_G2 <- sum(TDF_G2$X * TDF_G2$ni) / n_total_G2
prob_p2 <- media_G2 / size_binom2
# Probabilidades Teóricas
P_Binom_G2 <- dbinom(TDF_G2$X, size = size_binom2, prob = prob_p2)
# Gráfico
par(mar = c(10, 4, 4, 2))
barplot(rbind(TDF_G2$hi, P_Binom_G2),
beside = TRUE,
main = "Gráfica N°4: Comparado de lo Observado frente a lo Esperado del Estado Operativo de las Plantas Solares",
ylab = "Porcentaje (%)",
names.arg = TDF_G2$Status,
col = c("#D8BFD8", "purple"),
legend.text = c("Observado", "Esperado"),
args.legend = list(x = "topright"),
las = 2,
cex.names = 0.8,
cex.main = 0.7)
mtext("Estado Operativo", side = 1, line = 8)

Test de Pearson
# Definir Frecuencia Observada y Esperada
Fo_G2 <- TDF_G2$hi
Fe_G2 <- P_Binom_G2
# Gráfico de Correlación
plot(Fo_G2, Fe_G2,
main = "Gráfica N°5: Correlación del Modelo Observado y Esperado del Estado Operativo de las Plantas Solares",
cex.main = 0.7,
xlab = "Frecuencia Observada",
ylab = "Frecuencia Esperada",
pch = 19, col = "#68228B")
abline(lm(Fe_G2 ~ Fo_G2), col = "red", lwd = 2)

# Cálculo del coeficiente
Correlacion_G2 <- cor(Fo_G2, Fe_G2) * 100
Correlacion_G2
## [1] 88.01604
Test de
Chi-cuadrado
# Cálculo de Chi-cuadrado
x2_G2 <- sum(((Fo_G2 - Fe_G2)^2) / Fe_G2)
# Grados de libertad (k - 1)
gl_G2 <- length(Fo_G2) - 1
# Valor crítico
vc_G2 <- qchisq(0.95, gl_G2)
# Mostrar resultados
x2_G2
## [1] 0.2263328
## [1] 9.487729
# Validación lógica
x2_G2 < vc_G2
## [1] TRUE
Tabla Resumen del
Test
# Crear data frame resumen
tabla_resumen_G2 <- data.frame(
Variable = "Fases Inactivas",
Pearson = round(Correlacion_G2, 2),
Chi2 = round(x2_G2, 4),
Umbral = round(vc_G2, 2)
)
# Visualizar con GT
tabla_resumen_G2 %>%
gt() %>%
cols_label(
Variable = ("Variable"),
Pearson = "Test Pearson (%)",
Chi2 = ("Chi Cuadrado"),
Umbral = "Umbral de Aceptación"
) %>%
tab_header(
title = md("**Tabla N°5 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°5 Resumen del Test de Bondad al Modelo de Probabilidad |
| Variable |
Test Pearson (%) |
Chi Cuadrado |
Umbral de Aceptación |
| Fases Inactivas |
88.02 |
0.2263 |
9.49 |
| Autor: Martin Sarmiento |
Cálculo de
Probabilidades
¿Cuál es la probabilidad estimada de que un proyecto se encuentre
catalogado específicamente como Archivado (Shelved)?
prob_canc <- dbinom(1, size = size_binom2, prob = prob_p2)
paste0(round(prob_canc * 100, 2), "%")
## [1] "10.11%"