library(readr)
<- read_csv("C:/Users/RYZEN/Desktop/global_power_plant_database.csv") dataGPP
Descriptive_Analysis
Esta base de datos incluye información de alrededor de 35,000 plantas de energía en 167 países, incluyendo plantas térmicas y renovables. Cada planta está geolocalizada e incluye datos sobre capacidad, generación, propiedad y tipo de combustible. Es una herramienta de código abierto y actualizable, diseñada para facilitar el análisis y comparación de plantas energéticas a nivel global, con el respaldo del World Resources Institute. Su última actualización fue en junio 2 de 2021.
Original Data Source: https://datasets.wri.org/dataset/globalpowerplantdatabase
Con fines ilustrativos, se hace una vista preliminar de los primeros 10 registros de este dataset:
library(knitr)
print(kable(head(dataGPP, 10)))
|country |country_long |name |gppd_idnr | capacity_mw| latitude| longitude|primary_fuel |other_fuel1 |other_fuel2 |other_fuel3 | commissioning_year|owner |source |url |geolocation_source |wepp_id | year_of_capacity_data| generation_gwh_2013| generation_gwh_2014| generation_gwh_2015| generation_gwh_2016| generation_gwh_2017| generation_gwh_2018| generation_gwh_2019|generation_data_source | estimated_generation_gwh_2013| estimated_generation_gwh_2014| estimated_generation_gwh_2015| estimated_generation_gwh_2016| estimated_generation_gwh_2017|estimated_generation_note_2013 |estimated_generation_note_2014 |estimated_generation_note_2015 |estimated_generation_note_2016 |estimated_generation_note_2017 |
|:-------|:------------|:---------------------------------------------------------|:------------|-----------:|--------:|---------:|:------------|:-----------|:-----------|:-----------|------------------:|:-----|:--------------------------|:-------------------------------------------------------------------------------------|:------------------|:-------|---------------------:|-------------------:|-------------------:|-------------------:|-------------------:|-------------------:|-------------------:|-------------------:|:----------------------|-----------------------------:|-----------------------------:|-----------------------------:|-----------------------------:|-----------------------------:|:------------------------------|:------------------------------|:------------------------------|:------------------------------|:------------------------------|
|AFG |Afghanistan |Kajaki Hydroelectric Power Plant Afghanistan |GEODB0040538 | 33.00| 32.3220| 65.1190|Hydro |NA |NA |NA | NA|NA |GEODB |http://globalenergyobservatory.org |GEODB |1009793 | 2017| NA| NA| NA| NA| NA| NA| NA|NA | 123.77| 162.90| 97.39| 137.76| 119.50|HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |
|AFG |Afghanistan |Kandahar DOG |WKS0070144 | 10.00| 31.6700| 65.7950|Solar |NA |NA |NA | NA|NA |Wiki-Solar |https://www.wiki-solar.org |Wiki-Solar |NA | NA| NA| NA| NA| NA| NA| NA| NA|NA | 18.43| 17.48| 18.25| 17.70| 18.29|SOLAR-V1-NO-AGE |SOLAR-V1-NO-AGE |SOLAR-V1-NO-AGE |SOLAR-V1-NO-AGE |SOLAR-V1-NO-AGE |
|AFG |Afghanistan |Kandahar JOL |WKS0071196 | 10.00| 31.6230| 65.7920|Solar |NA |NA |NA | NA|NA |Wiki-Solar |https://www.wiki-solar.org |Wiki-Solar |NA | NA| NA| NA| NA| NA| NA| NA| NA|NA | 18.64| 17.58| 19.10| 17.62| 18.72|SOLAR-V1-NO-AGE |SOLAR-V1-NO-AGE |SOLAR-V1-NO-AGE |SOLAR-V1-NO-AGE |SOLAR-V1-NO-AGE |
|AFG |Afghanistan |Mahipar Hydroelectric Power Plant Afghanistan |GEODB0040541 | 66.00| 34.5560| 69.4787|Hydro |NA |NA |NA | NA|NA |GEODB |http://globalenergyobservatory.org |GEODB |1009795 | 2017| NA| NA| NA| NA| NA| NA| NA|NA | 225.06| 203.55| 146.90| 230.18| 174.91|HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |
|AFG |Afghanistan |Naghlu Dam Hydroelectric Power Plant Afghanistan |GEODB0040534 | 100.00| 34.6410| 69.7170|Hydro |NA |NA |NA | NA|NA |GEODB |http://globalenergyobservatory.org |GEODB |1009797 | 2017| NA| NA| NA| NA| NA| NA| NA|NA | 406.16| 357.22| 270.99| 395.38| 350.80|HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |
|AFG |Afghanistan |Nangarhar (Darunta) Hydroelectric Power Plant Afghanistan |GEODB0040536 | 11.55| 34.4847| 70.3633|Hydro |NA |NA |NA | NA|NA |GEODB |http://globalenergyobservatory.org |GEODB |1009787 | 2017| NA| NA| NA| NA| NA| NA| NA|NA | 58.77| 54.42| 42.71| 59.72| 46.12|HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |
|AFG |Afghanistan |Northwest Kabul Power Plant Afghanistan |GEODB0040540 | 42.00| 34.5638| 69.1134|Gas |NA |NA |NA | NA|NA |GEODB |http://globalenergyobservatory.org |GEODB |NA | 2017| NA| NA| NA| NA| NA| NA| NA|NA | NA| NA| NA| NA| NA|NO-ESTIMATION |NO-ESTIMATION |NO-ESTIMATION |NO-ESTIMATION |NO-ESTIMATION |
|AFG |Afghanistan |Pul-e-Khumri Hydroelectric Power Plant Afghanistan |GEODB0040537 | 6.00| 35.9416| 68.7100|Hydro |NA |NA |NA | NA|NA |GEODB |http://globalenergyobservatory.org |GEODB |NA | 2017| NA| NA| NA| NA| NA| NA| NA|NA | 21.99| 21.19| 18.40| 25.34| 19.74|HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |
|AFG |Afghanistan |Sarobi Dam Hydroelectric Power Plant Afghanistan |GEODB0040535 | 22.00| 34.5865| 69.7757|Hydro |NA |NA |NA | NA|NA |GEODB |http://globalenergyobservatory.org |GEODB |1009799 | 2017| NA| NA| NA| NA| NA| NA| NA|NA | 123.23| 82.87| 69.15| 93.83| 80.00|HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |
|ALB |Albania |Bistrica 1 |WRI1002169 | 27.00| 39.9116| 20.1047|Hydro |NA |NA |NA | 1965|NA |Energy Charter Secretariat |http://www.energycharter.org/fileadmin/DocumentsMedia/IDEER/IDEER-Albania_2013_en.pdf |GEODB |1021225 | NA| NA| NA| NA| NA| NA| NA| NA|NA | 105.17| 75.26| 79.50| 105.45| 88.45|HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |HYDRO-V1 |
Además, se presenta un gráfico de barras apiladas que muestra la distribución proporcional de los diferentes tipos de plantas energéticas en los 10 países con mayor cantidad de plantas.
#Cargar las librerías necesarias
library(ggplot2)
library(dplyr)
#Identificar los 10 países con más plantas energéticas
<- dataGPP %>%
top_10_paises count(country, sort = TRUE) %>%
top_n(10, wt = n) %>%
pull(country)
#Aplicar un filtro para conservar solo las plantas en los 10 países seleccionados
<- dataGPP %>%
data_top10 filter(country %in% top_10_paises)
# Crear un gráfico de barras apiladas que muestra la distribución de los tipos de plantas energéticas (primary_fuel) por país
ggplot(data_top10, aes(x = country, fill = primary_fuel)) +
geom_bar(position = "stack") +
labs(
title = "Distribución de Tipos de Plantas Energéticas por País",
x = "País",
y = "Número de Plantas",
fill = "Tipo de Combustible Primario"
+
) theme_minimal()
El dataset está compuesto por un total de 34936 filas y 36 columnas:
dim(dataGPP)
[1] 34936 36
Esta base de datos, contiene 36 variables diferentes, que se definen y clasifican según sus tipos en la siguiente tabla:
#Cargar las librerías necesarias
library(knitr)
library(kableExtra)
#Crear un dataframe con las variables, sus definiciones y el tipo de variable
<- data.frame(
variables Variable = c("country", "country_long", "name", "gppd_idnr", "capacity_mw",
"latitude", "longitude", "primary_fuel", "other_fuel1",
"other_fuel2", "other_fuel3", "commissioning_year", "owner",
"source", "url", "geolocation_source", "wepp_id",
"year_of_capacity_data", "generation_gwh_2013",
"generation_gwh_2014", "generation_gwh_2015",
"generation_gwh_2016", "generation_gwh_2017",
"generation_gwh_2018", "generation_gwh_2019",
"generation_data_source", "estimated_generation_gwh_2013",
"estimated_generation_gwh_2014", "estimated_generation_gwh_2015",
"estimated_generation_gwh_2016", "estimated_generation_gwh_2017",
"estimated_generation_note_2013", "estimated_generation_note_2014",
"estimated_generation_note_2015", "estimated_generation_note_2016",
"estimated_generation_note_2017"),
= c("País en el que se encuentra la planta.",
Definición "Nombre completo del país.",
"Nombre de la planta de energía.",
"Identificador único de la planta de energía en la base de datos GPPD.",
"Capacidad de la planta de energía en megavatios (MW).",
"Coordenada de latitud de la planta de energía.",
"Coordenada de longitud de la planta de energía.",
"Combustible principal utilizado por la planta de energía.",
"Tipo de combustible secundario.",
"Tipo de combustible terciario.",
"Tipo de combustible cuaternario.",
"Año en que se puso en servicio la planta de energía.",
"Propietario de la planta de energía.",
"Fuente de los datos.",
"Enlace URL a la fuente de los datos.",
"Fuente de los datos de geolocalización.",
"ID de World Electric Power Plants (WEPP).",
"Año de los datos de capacidad proporcionados.",
"Generación de electricidad en GWh para el año 2013.",
"Generación de electricidad en GWh para el año 2014.",
"Generación de electricidad en GWh para el año 2015.",
"Generación de electricidad en GWh para el año 2016.",
"Generación de electricidad en GWh para el año 2017.",
"Generación de electricidad en GWh para el año 2018.",
"Generación de electricidad en GWh para el año 2019.",
"Fuente de los datos de generación.",
"Generación estimada de electricidad en GWh para el año 2013.",
"Generación estimada de electricidad en GWh para el año 2014.",
"Generación estimada de electricidad en GWh para el año 2015.",
"Generación estimada de electricidad en GWh para el año 2016.",
"Generación estimada de electricidad en GWh para el año 2017.",
"Notas sobre la generación estimada para 2013.",
"Notas sobre la generación estimada para 2014.",
"Notas sobre la generación estimada para 2015.",
"Notas sobre la generación estimada para 2016.",
"Notas sobre la generación estimada para 2017."),
Tipo = c("Cualitativa, nominal", "Cualitativa, nominal", "Cualitativa, nominal", "Cualitativa, nominal", "Cuantitativa, continua",
"Cuantitativa, continua", "Cuantitativa, continua", "Cualitativa, nominal", "Cualitativa, nominal",
"Cualitativa, nominal", "Cualitativa, nominal", "Cuantitativa, discreta", "Cualitativa, nominal",
"Cualitativa, nominal", "Cualitativa, nominal", "Cualitativa, nominal", "Cualitativa, nominal", "Cuantitativa, discreta",
"Cuantitativa, continua", "Cuantitativa, continua", "Cuantitativa, continua", "Cuantitativa, continua",
"Cuantitativa, continua", "Cuantitativa, continua", "Cuantitativa, continua", "Cualitativa, nominal",
"Cuantitativa, continua", "Cuantitativa, continua", "Cuantitativa, continua", "Cuantitativa, continua",
"Cuantitativa, continua", "Cualitativa, nominal", "Cualitativa, nominal", "Cualitativa, nominal",
"Cualitativa, nominal", "Cualitativa, nominal")
)#Crear una tabla a partir del dataframe
kable(variables, format = "html", escape = FALSE, col.names = c("Variable", "Definición", "Tipo")) %>%
kable_styling(full_width = F, position = "left") %>%
add_header_above(c("Variables used" = 3))
Variable | Definición | Tipo |
---|---|---|
country | País en el que se encuentra la planta. | Cualitativa, nominal |
country_long | Nombre completo del país. | Cualitativa, nominal |
name | Nombre de la planta de energía. | Cualitativa, nominal |
gppd_idnr | Identificador único de la planta de energía en la base de datos GPPD. | Cualitativa, nominal |
capacity_mw | Capacidad de la planta de energía en megavatios (MW). | Cuantitativa, continua |
latitude | Coordenada de latitud de la planta de energía. | Cuantitativa, continua |
longitude | Coordenada de longitud de la planta de energía. | Cuantitativa, continua |
primary_fuel | Combustible principal utilizado por la planta de energía. | Cualitativa, nominal |
other_fuel1 | Tipo de combustible secundario. | Cualitativa, nominal |
other_fuel2 | Tipo de combustible terciario. | Cualitativa, nominal |
other_fuel3 | Tipo de combustible cuaternario. | Cualitativa, nominal |
commissioning_year | Año en que se puso en servicio la planta de energía. | Cuantitativa, discreta |
owner | Propietario de la planta de energía. | Cualitativa, nominal |
source | Fuente de los datos. | Cualitativa, nominal |
url | Enlace URL a la fuente de los datos. | Cualitativa, nominal |
geolocation_source | Fuente de los datos de geolocalización. | Cualitativa, nominal |
wepp_id | ID de World Electric Power Plants (WEPP). | Cualitativa, nominal |
year_of_capacity_data | Año de los datos de capacidad proporcionados. | Cuantitativa, discreta |
generation_gwh_2013 | Generación de electricidad en GWh para el año 2013. | Cuantitativa, continua |
generation_gwh_2014 | Generación de electricidad en GWh para el año 2014. | Cuantitativa, continua |
generation_gwh_2015 | Generación de electricidad en GWh para el año 2015. | Cuantitativa, continua |
generation_gwh_2016 | Generación de electricidad en GWh para el año 2016. | Cuantitativa, continua |
generation_gwh_2017 | Generación de electricidad en GWh para el año 2017. | Cuantitativa, continua |
generation_gwh_2018 | Generación de electricidad en GWh para el año 2018. | Cuantitativa, continua |
generation_gwh_2019 | Generación de electricidad en GWh para el año 2019. | Cuantitativa, continua |
generation_data_source | Fuente de los datos de generación. | Cualitativa, nominal |
estimated_generation_gwh_2013 | Generación estimada de electricidad en GWh para el año 2013. | Cuantitativa, continua |
estimated_generation_gwh_2014 | Generación estimada de electricidad en GWh para el año 2014. | Cuantitativa, continua |
estimated_generation_gwh_2015 | Generación estimada de electricidad en GWh para el año 2015. | Cuantitativa, continua |
estimated_generation_gwh_2016 | Generación estimada de electricidad en GWh para el año 2016. | Cuantitativa, continua |
estimated_generation_gwh_2017 | Generación estimada de electricidad en GWh para el año 2017. | Cuantitativa, continua |
estimated_generation_note_2013 | Notas sobre la generación estimada para 2013. | Cualitativa, nominal |
estimated_generation_note_2014 | Notas sobre la generación estimada para 2014. | Cualitativa, nominal |
estimated_generation_note_2015 | Notas sobre la generación estimada para 2015. | Cualitativa, nominal |
estimated_generation_note_2016 | Notas sobre la generación estimada para 2016. | Cualitativa, nominal |
estimated_generation_note_2017 | Notas sobre la generación estimada para 2017. | Cualitativa, nominal |
Luego, analizaremos los datos faltantes, a través de tablas y gráficos.
En primer lugar, generamos una tabla que muestra el número de datos faltantes para cada variable, junto con el porcentaje que estos representan en relación con el total de observaciones de cada una de ellas.
#Importar las librerías necesarias
library(dplyr)
library(tidyr)
library(knitr)
#Crear un resumen de valores faltantes por variable
<- dataGPP %>%
resumen summarise_all(~sum(is.na(.))) %>%
pivot_longer(cols = everything(), names_to = "Variable", values_to = "Valores_Faltantes") %>%
mutate(Porcentaje = round((Valores_Faltantes / nrow(dataGPP)) * 100, 2))
#Genarar y mostrar la tabla
print(kable(resumen, caption = "Resumen de Valores Faltantes ('NA') por Variable", align = "c"))
Table: Resumen de Valores Faltantes ('NA') por Variable
| Variable | Valores_Faltantes | Porcentaje |
|:------------------------------:|:-----------------:|:----------:|
| country | 0 | 0.00 |
| country_long | 0 | 0.00 |
| name | 0 | 0.00 |
| gppd_idnr | 0 | 0.00 |
| capacity_mw | 0 | 0.00 |
| latitude | 0 | 0.00 |
| longitude | 0 | 0.00 |
| primary_fuel | 0 | 0.00 |
| other_fuel1 | 32992 | 94.44 |
| other_fuel2 | 34660 | 99.21 |
| other_fuel3 | 34936 | 100.00 |
| commissioning_year | 17489 | 50.06 |
| owner | 14068 | 40.27 |
| source | 15 | 0.04 |
| url | 18 | 0.05 |
| geolocation_source | 419 | 1.20 |
| wepp_id | 18702 | 53.53 |
| year_of_capacity_data | 20049 | 57.39 |
| generation_gwh_2013 | 28519 | 81.63 |
| generation_gwh_2014 | 27710 | 79.32 |
| generation_gwh_2015 | 26733 | 76.52 |
| generation_gwh_2016 | 25792 | 73.83 |
| generation_gwh_2017 | 25436 | 72.81 |
| generation_gwh_2018 | 25299 | 72.42 |
| generation_gwh_2019 | 25277 | 72.35 |
| generation_data_source | 23536 | 67.37 |
| estimated_generation_gwh_2013 | 18816 | 53.86 |
| estimated_generation_gwh_2014 | 18433 | 52.76 |
| estimated_generation_gwh_2015 | 17886 | 51.20 |
| estimated_generation_gwh_2016 | 17366 | 49.71 |
| estimated_generation_gwh_2017 | 1798 | 5.15 |
| estimated_generation_note_2013 | 0 | 0.00 |
| estimated_generation_note_2014 | 0 | 0.00 |
| estimated_generation_note_2015 | 0 | 0.00 |
| estimated_generation_note_2016 | 0 | 0.00 |
| estimated_generation_note_2017 | 0 | 0.00 |
En segundo lugar, con el fin realizar una representación visual de la tercera columna de la tabla, generamos un gráfico de barras con el porcentaje de datos faltantes.
#Importar la librería utilizada
library(ggplot2)
#Crear un dataframe con el porcentaje de datos faltantes por variable
<- data.frame(
faltantes Variable = colnames(dataGPP),
porcentajef = sapply(dataGPP, function(x) mean(is.na(x)) * 100)
)#Crear el gráfico de barras
ggplot(faltantes, aes(x = reorder(Variable, -porcentajef), y = porcentajef)) +
geom_bar(stat = "identity", fill = "skyblue") +
coord_flip() + #Girar el gráfico para que las variables se muestren en el eje y
labs(title = "Porcentaje de datos faltantes por variable", x = "Variable", y = "Porcentaje") +
theme_minimal()
En tercer lugar. generamos un gráfico de torta, para mostrar la proporción de datos faltantes en toda la base de datos.
#Importar la librería necesaria
library(ggplot2)
#Calcular el número de celdas
<- prod(dim(dataGPP))
celdas #Calcular el número de celdas con datos faltantes
<- sum(is.na(dataGPP))
faltanteac <- celdas - faltanteac
completoac #Crear un dataframe con datos faltantes y datos completos
<- data.frame(
tortagf Category = c("Datos faltantes", "Datos completos"),
Count = c(faltanteac, completoac)
)#Crear el gráfico de torta
ggplot(tortagf, aes(x = "", y = Count, fill = Category)) +
geom_bar(width = 1, stat = "identity") + #Crear las barras del gráfico
coord_polar("y", start = 0) + #Transformar las barras en un gráfico de torta
labs(title = "Proporción de datos faltantes en el dataset") +
theme_void() +
scale_fill_manual(values = c("red", "green"))
Ahora, para encontrar los datos atípicos en las variables numéricas, separamos las variables en categorías basadas en su tipo y naturaleza. Generamos tablas y gráficos de caja y bigote para mayor comprensión.
Esta tabla contiene el número total de valores atípicos de cada variable numérica, así como su porcentaje con respecto al total de datos que almacena cada una de ellas.
#Importar las librerías necesarias
library(ggplot2)
library(dplyr)
library(kableExtra)
#Seleccionar las variables cuantitativas continuas
<- dataGPP %>%
continuas select(capacity_mw, latitude, longitude, generation_gwh_2013:generation_gwh_2019, estimated_generation_gwh_2013:estimated_generation_gwh_2017)
#Seleccionar las variabels cuantitativas discretas
<- dataGPP %>%
discretas select(commissioning_year, year_of_capacity_data)
#Combinar ambos tipos de variable en una lista
<- c(continuas, discretas)
variables #Inicializar un dataframe vacío para almacenar variables
<- data.frame(
resumenatp Variable = character(),
= integer(),
Número Porcentaje = numeric()
)#Calcular datos atípicos por variable
for (variable in names(variables)) {
<- variables[[variable]]
values #Calcular Q1, Q2, Q3 y IQR
<- quantile(values, 0.25, na.rm = TRUE)
Q1 <- quantile(values, 0.75, na.rm = TRUE)
Q3 <- Q3 - Q1
IQR #Definir los límites para identificar los datos atípicos
<- Q1 - 1.5 * IQR
lower_bound <- Q3 + 1.5 * IQR
upper_bound #Calcular el número y porcentaje de datos atípicos
<- sum(values < lower_bound | values > upper_bound, na.rm = TRUE)
atípicos <- sum(!is.na(values))
total_values <- (atípicos / total_values) * 100
percentage
<- rbind(resumenatp, data.frame(
resumenatp Variable = variable,
= atípicos,
Número Porcentaje = round(percentage, 2)
))
}#Crear la tabla
%>%
resumenatp kable("html", caption = "Datos atípicos por Variable") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Variable | Número | Porcentaje |
---|---|---|
capacity_mw | 5622 | 16.09 |
latitude | 4159 | 11.90 |
longitude | 0 | 0.00 |
generation_gwh_2013 | 946 | 14.74 |
generation_gwh_2014 | 1090 | 15.08 |
generation_gwh_2015 | 1260 | 15.36 |
generation_gwh_2016 | 1412 | 15.44 |
generation_gwh_2017 | 1514 | 15.94 |
generation_gwh_2018 | 1551 | 16.09 |
generation_gwh_2019 | 1582 | 16.38 |
estimated_generation_gwh_2013 | 2448 | 15.19 |
estimated_generation_gwh_2014 | 2472 | 14.98 |
estimated_generation_gwh_2015 | 2517 | 14.76 |
estimated_generation_gwh_2016 | 2569 | 14.62 |
estimated_generation_gwh_2017 | 5648 | 17.04 |
commissioning_year | 878 | 5.03 |
year_of_capacity_data | 80 | 0.54 |
Variables Cuantitativas Continuas: Aquí se incluyen las variables relacionadas con capacidad y generación de electricidad (capacity_mw, latitude, longitude, generation_gwh de 2013 a 2019 y estimated_generation_gwh de 2013 a 2017).
#Importar las librerías utilizadas
library(ggplot2)
library(dplyr)
#Seleccionar varaibles cuantitativas continuas
<- dataGPP %>%
continuas select(capacity_mw, latitude, longitude, generation_gwh_2013:generation_gwh_2019, estimated_generation_gwh_2013:estimated_generation_gwh_2017)
#Generar diagramas de caja y bigote
for (variable in names(continuas)) {
boxplot(continuas[[variable]],
main = paste("Boxplot de", variable),
ylab = variable,
horizontal = TRUE,
col = 'steelblue')
}
Variables Cuantitativas Discretas: Aquí se incluyen las variables relacionadas con los años (commissioning_year, year_of_capacity_data).
<- dataGPP %>%
discretas select(commissioning_year, year_of_capacity_data)
#Generar diagramas de caja y bigote
for (variable in names(discretas)) {
boxplot(discretas[[variable]],
main = paste("Boxplot de", variable),
ylab = variable,
horizontal = TRUE,
col = 'steelblue')
}
Con el fin de verificar si los datos siguen una distribución normal, usamos un algoritmo que aplique el test de Anderson - Darling.
#Importar la librería necesaria
library(nortest)
#Crear vector con las variables numpéricas
<- c("capacity_mw", "latitude", "longitude",
numeric_vars "generation_gwh_2013", "generation_gwh_2014",
"generation_gwh_2015", "generation_gwh_2016",
"generation_gwh_2017", "generation_gwh_2018",
"generation_gwh_2019", "estimated_generation_gwh_2013",
"estimated_generation_gwh_2014", "estimated_generation_gwh_2015",
"estimated_generation_gwh_2016", "estimated_generation_gwh_2017")
#Función para realizar el test de Anderson-Darling
<- function(data, var) {
check_normality_ad cat("\nVariable:", var)
#Cuenta el número de datos no nulos
<- sum(!is.na(data[[var]]))
n
if (n > 0) {
<- ad.test(data[[var]])
test_result print(test_result)
else {
} cat("No hay suficientes datos para realizar la prueba.\n")
}
}#Aplica la función a cada variable numérica
for (var in numeric_vars) {
check_normality_ad(dataGPP, var)
}
Variable: capacity_mw
Anderson-Darling normality test
data: data[[var]]
A = 7770.5, p-value < 2.2e-16
Variable: latitude
Anderson-Darling normality test
data: data[[var]]
A = 2425.9, p-value < 2.2e-16
Variable: longitude
Anderson-Darling normality test
data: data[[var]]
A = 704.15, p-value < 2.2e-16
Variable: generation_gwh_2013
Anderson-Darling normality test
data: data[[var]]
A = 1675.2, p-value < 2.2e-16
Variable: generation_gwh_2014
Anderson-Darling normality test
data: data[[var]]
A = 1820.7, p-value < 2.2e-16
Variable: generation_gwh_2015
Anderson-Darling normality test
data: data[[var]]
A = 1995.4, p-value < 2.2e-16
Variable: generation_gwh_2016
Anderson-Darling normality test
data: data[[var]]
A = 2287.4, p-value < 2.2e-16
Variable: generation_gwh_2017
Anderson-Darling normality test
data: data[[var]]
A = 2417.1, p-value < 2.2e-16
Variable: generation_gwh_2018
Anderson-Darling normality test
data: data[[var]]
A = 2563.4, p-value < 2.2e-16
Variable: generation_gwh_2019
Anderson-Darling normality test
data: data[[var]]
A = 2623.6, p-value < 2.2e-16
Variable: estimated_generation_gwh_2013
Anderson-Darling normality test
data: data[[var]]
A = 4377.6, p-value < 2.2e-16
Variable: estimated_generation_gwh_2014
Anderson-Darling normality test
data: data[[var]]
A = 4566, p-value < 2.2e-16
Variable: estimated_generation_gwh_2015
Anderson-Darling normality test
data: data[[var]]
A = 4765, p-value < 2.2e-16
Variable: estimated_generation_gwh_2016
Anderson-Darling normality test
data: data[[var]]
A = 4876.1, p-value < 2.2e-16
Variable: estimated_generation_gwh_2017
Anderson-Darling normality test
data: data[[var]]
A = 8069.7, p-value < 2.2e-16
Los resultados de la prueba arrojan que los datos no siguen una distrubución normal. Por lo que es necesario recurrir a otras pruebas no paramétricas:
- Mann-Whitney U Test (Wilcoxon Rank-Sum Test): Esta prueba, es ideal para comparar dos grupos independientes, en el caso de esta base de datos. Podría usarse para comparar la capacidad de generación de plantas con diferentes fuentes de energía.
- Kruskal-Wallis Test: Esta prueba, es considerada una extensión del Mann-Whitney U Test para más de dos grupos independientes. Un posible uso, sería comparar la capacidad de generación de varias plantas de energía con diferentes tipos de combustible.
- Spearman’s Rank Correlation: Esta prueba, es útil para medir la relación entre dos variables numéricas, como la capacidad de generación y el año de puesta en servicio.
- Wilcoxon Signed-Rank Test: Esta prueba, se usa para comparar dos muestras relacionadas, como la generación de energía en diferentes años para la misma planta.
Haremos la prueba con el Wilcoxon Signed-Rank Test.
#Crear vector de variables numéricas a analizar
<- c("capacity_mw", "latitude", "longitude",
variables_numericas "generation_gwh_2013", "generation_gwh_2014",
"generation_gwh_2015", "generation_gwh_2016",
"generation_gwh_2017", "generation_gwh_2018",
"generation_gwh_2019", "estimated_generation_gwh_2013",
"estimated_generation_gwh_2014", "estimated_generation_gwh_2015",
"estimated_generation_gwh_2016", "estimated_generation_gwh_2017")
#Función para ralizar el test de Wilcoxon Signed-Rank Test
<- function(dataGPP, variable) {
realizar_prueba_wilcoxon cat("\nResultado de la prueba de Wilcoxon para", variable, ":\n")
#Verifica si hay suficientes datos no nulos para la prueba
if (sum(!is.na(dataGPP[[variable]])) > 0) {
#Aplica la prueba
<- wilcox.test(dataGPP[[variable]], alternative = "two.sided", conf.int = TRUE, correct = TRUE)
resultado_wilcoxon print(resultado_wilcoxon)
else {
} cat("No hay suficientes datos para realizar la prueba.\n")
}
}#Aplica la función a cada variable numérica
for (variable in variables_numericas) {
realizar_prueba_wilcoxon(dataGPP, variable)
}
Resultado de la prueba de Wilcoxon para capacity_mw :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 610279516, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
32.30004 34.40001
sample estimates:
(pseudo)median
33.25002
Resultado de la prueba de Wilcoxon para latitude :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 587617427, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
37.73129 38.06760
sample estimates:
(pseudo)median
37.90094
Resultado de la prueba de Wilcoxon para longitude :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 282659960, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
-5.236768 -3.396286
sample estimates:
(pseudo)median
-4.264401
Resultado de la prueba de Wilcoxon para generation_gwh_2013 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 16977889, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
89.43066 105.95092
sample estimates:
(pseudo)median
97.44445
Resultado de la prueba de Wilcoxon para generation_gwh_2014 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 21624032, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
100.5760 118.7616
sample estimates:
(pseudo)median
109.5111
Resultado de la prueba de Wilcoxon para generation_gwh_2015 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 28081787, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
126.9628 147.0715
sample estimates:
(pseudo)median
137.0625
Resultado de la prueba de Wilcoxon para generation_gwh_2016 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 34430524, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
110.9135 129.5322
sample estimates:
(pseudo)median
119.9186
Resultado de la prueba de Wilcoxon para generation_gwh_2017 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 37405041, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
93.83747 110.26801
sample estimates:
(pseudo)median
102.1526
Resultado de la prueba de Wilcoxon para generation_gwh_2018 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 38373761, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
66.38127 77.38352
sample estimates:
(pseudo)median
71.9946
Resultado de la prueba de Wilcoxon para generation_gwh_2019 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 43309602, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
43.37646 52.05796
sample estimates:
(pseudo)median
47.72207
Resultado de la prueba de Wilcoxon para estimated_generation_gwh_2013 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 129935260, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
48.95497 52.62504
sample estimates:
(pseudo)median
50.74501
Resultado de la prueba de Wilcoxon para estimated_generation_gwh_2014 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 136182756, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
49.67001 53.37502
sample estimates:
(pseudo)median
51.48504
Resultado de la prueba de Wilcoxon para estimated_generation_gwh_2015 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 145359775, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
47.99506 51.28000
sample estimates:
(pseudo)median
49.60497
Resultado de la prueba de Wilcoxon para estimated_generation_gwh_2016 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 154361235, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
49.60501 53.00503
sample estimates:
(pseudo)median
51.24498
Resultado de la prueba de Wilcoxon para estimated_generation_gwh_2017 :
Wilcoxon signed rank test with continuity correction
data: dataGPP[[variable]]
V = 5.46e+08, p-value < 2.2e-16
alternative hypothesis: true location is not equal to 0
95 percent confidence interval:
86.52996 92.72998
sample estimates:
(pseudo)median
89.55006
Tras analizar la “Global Power Plant Database”, podemos obtener las siguiente conclusiones:
La base de datos utilizada, contiene 34936 registros y 36 variables relacianadas con alrededor de 35,000 plantas de energía en 167 países.
Una vez clasificadas las variables según su tipo, estas se dividen en:
Cualitativas Nominales: country, conutry_long, name, gppd_idnr, primary__fuel, other_fuel1, other_fuel2, other_fuel3, owner, source, url, geolocation_source, wepp_id, generation_data_source, estimated_generation_note2013, estimated_generation_note2014, estimated_generation_note2015, estimated_generation_note2016, estimated_generation_note2017.
Cuantitativas Continuas: capacity_mw, latitude, longitude, generation_gwh_2013, generation_gwh_2014, generation_gwh_2015, generation_gwh_2016, generation_gwh_2017, generation_gwh_2018, generation_gwh_2019, , estimated_generation_gwh_2013, estimated_generation_gwh_2014, estimated_generation_gwh_2015, estimated_generation_gwh_2016, estimated_generation_gwh_2017.
Cuantitativas Discretas: commissioning_year, year_of_capacity_data.
Aunque la base de datos es robusta, hay una proporción significativa de datos faltantes ‘NA’.
La mayoría de las variables no siguen una distribución normal (verificado con el el Test Anderson - Darling) , lo que sugiere que los análisis deben basarse en métodos no paramétricos para obtener reultados más precisos.