Producción mensual de energía en Colombia.

El conjunto de datos proporciona estadísticas mensuales de electricidad de la Agencia Internacional de Energía (AIE) para múltiples países y territorios en todo el mundo. Incluye información sobre la generación de electricidad mensual desde 2010 hasta 2022. La producción de energía se mide en gigavatios-hora (GWh) y abarca una variedad de productos energéticos, incluyendo hidroeléctrica, eólica, solar, geotérmica, nuclear, combustibles fósiles y otros. Estos datos pueden ser útiles para analizar las tendencias de consumo y producción de electricidad a nivel mundial y regional, así como para evaluar el impacto ambiental de la industria eléctrica.

Se procede a cargar la base de datos

library(readxl)
library(readr)
library(readr)
df<- read_csv("dataset_energy.csv") 
## Rows: 47159 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): COUNTRY, CODE_TIME, TIME, MONTH_NAME, PRODUCT
## dbl (7): YEAR, MONTH, VALUE, DISPLAY_ORDER, yearToDate, previousYearToDate, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Se visualiza la base de datos

str(df)
## spc_tbl_ [47,159 × 12] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ COUNTRY           : chr [1:47159] "Argentina" "Argentina" "Argentina" "Argentina" ...
##  $ CODE_TIME         : chr [1:47159] "JAN2020" "JAN2020" "JAN2020" "JAN2020" ...
##  $ TIME              : chr [1:47159] "January 2020" "January 2020" "January 2020" "January 2020" ...
##  $ YEAR              : num [1:47159] 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
##  $ MONTH             : num [1:47159] 1 1 1 1 1 1 1 1 1 1 ...
##  $ MONTH_NAME        : chr [1:47159] "January" "January" "January" "January" ...
##  $ PRODUCT           : chr [1:47159] "Hydro" "Wind" "Solar" "Geothermal" ...
##  $ VALUE             : num [1:47159] 2393 677 106 0 0 ...
##  $ DISPLAY_ORDER     : num [1:47159] 1 2 3 4 5 6 7 8 9 10 ...
##  $ yearToDate        : num [1:47159] 23614 9318 1331 0 0 ...
##  $ previousYearToDate: num [1:47159] 2694.1 285.6 40.1 0 0 ...
##  $ share             : num [1:47159] 0.192 0.0543 0.0085 0 0 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   COUNTRY = col_character(),
##   ..   CODE_TIME = col_character(),
##   ..   TIME = col_character(),
##   ..   YEAR = col_double(),
##   ..   MONTH = col_double(),
##   ..   MONTH_NAME = col_character(),
##   ..   PRODUCT = col_character(),
##   ..   VALUE = col_double(),
##   ..   DISPLAY_ORDER = col_double(),
##   ..   yearToDate = col_double(),
##   ..   previousYearToDate = col_double(),
##   ..   share = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
unique(df$COUNTRY)
##  [1] "Argentina"           "Australia"           "Austria"            
##  [4] "Belgium"             "Brazil"              "Bulgaria"           
##  [7] "Canada"              "Chile"               "Colombia"           
## [10] "Croatia"             "Cyprus"              "Czech Republic"     
## [13] "Denmark"             "Estonia"             "Finland"            
## [16] "France"              "Germany"             "Greece"             
## [19] "Hungary"             "IEA Total"           "Iceland"            
## [22] "India"               "Ireland"             "Italy"              
## [25] "Japan"               "Korea"               "Latvia"             
## [28] "Lithuania"           "Luxembourg"          "Malta"              
## [31] "Mexico"              "Netherlands"         "New Zealand"        
## [34] "North Macedonia"     "Norway"              "OECD Americas"      
## [37] "OECD Asia Oceania"   "OECD Europe"         "OECD Total"         
## [40] "Poland"              "Portugal"            "Republic of Turkiye"
## [43] "Romania"             "Serbia"              "Slovak Republic"    
## [46] "Slovenia"            "Spain"               "Sweden"             
## [49] "Switzerland"         "United Kingdom"      "United States"      
## [52] "Costa Rica"

Favor seguir continuar con los codigos de Kaggle

Actividad

Tomar la base de datos y aplicar las distribuciones de la media de la variable Value en cualquier pais de tu interes.

Modelo de ejemplo.

Planteamiento del problema: Tomando como pais de referencia se toman los datos correspondientes a Colombia en la base de datos. El objetivo es entender la variabilidad de las muestras tomadas de la variable VALUE relacionada con los valores de producción/consumo de energía para Colombia.

Pregunta del problema: ¿Cuál es la media esperada de la variable VALUE para Colombia, y cuál es la distribución muestral de la media si tomamos muestras de tamaño 𝑛=40?

Este análisis permitirá estimar con mayor precisión el valor promedio de energía en Colombia y analizar la variabilidad de las medias obtenidas a partir de diferentes muestras.

Pasos a seguir:

  • Filtrar los datos para Colombia.

  • Calcular la media y desviación estándar de la variable VALUE para Colombia.

  • Simular la distribución muestral de la media con un tamaño de muestra de n=40.

  • Calcular la media y error estándar de la distribución muestral.

  • Graficar la distribución muestral de la media.

# Paso 1: Cargar los datos y filtrar por Colombia
colombia_data <- subset(df, COUNTRY == "Colombia")

# Paso 2: Calcular la media y desviación estándar poblacional
population_mean_col <- mean(colombia_data$VALUE, na.rm = TRUE)
population_std_col <- sd(colombia_data$VALUE, na.rm = TRUE)

# Paso 3: Configurar el tamaño de muestra y número de simulaciones
sample_size <- 40
num_samples <- 1000
set.seed(123)  # Para reproducibilidad

# Simular la distribución muestral de la media
sample_means_col <- replicate(num_samples, {
  sample_data <- sample(colombia_data$VALUE, sample_size, replace = TRUE)
  mean(sample_data)
})

# Paso 4: Calcular la media muestral y el error estándar
sampling_mean_col <- mean(sample_means_col)
sampling_std_error_col <- sd(sample_means_col)

# Paso 5: Graficar la distribución muestral de la media
hist(sample_means_col, breaks = 30, main = "Distribución Muestral de la Media (Colombia)", 
     xlab = "Media Muestral", col = "lightgreen", border = "black")
abline(v = sampling_mean_col, col = "red", lwd = 2, lty = 2)

Favor replicar con otro pais.

# Cargar las librerías necesarias
library(readr)

# Cargar los datos
df <- read_csv("dataset_energy.csv")
## Rows: 47159 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): COUNTRY, CODE_TIME, TIME, MONTH_NAME, PRODUCT
## dbl (7): YEAR, MONTH, VALUE, DISPLAY_ORDER, yearToDate, previousYearToDate, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Ver los países únicos en la columna COUNTRY
unique_countries <- unique(df$COUNTRY)

# Mostrar la lista de países
print(unique_countries)
##  [1] "Argentina"           "Australia"           "Austria"            
##  [4] "Belgium"             "Brazil"              "Bulgaria"           
##  [7] "Canada"              "Chile"               "Colombia"           
## [10] "Croatia"             "Cyprus"              "Czech Republic"     
## [13] "Denmark"             "Estonia"             "Finland"            
## [16] "France"              "Germany"             "Greece"             
## [19] "Hungary"             "IEA Total"           "Iceland"            
## [22] "India"               "Ireland"             "Italy"              
## [25] "Japan"               "Korea"               "Latvia"             
## [28] "Lithuania"           "Luxembourg"          "Malta"              
## [31] "Mexico"              "Netherlands"         "New Zealand"        
## [34] "North Macedonia"     "Norway"              "OECD Americas"      
## [37] "OECD Asia Oceania"   "OECD Europe"         "OECD Total"         
## [40] "Poland"              "Portugal"            "Republic of Turkiye"
## [43] "Romania"             "Serbia"              "Slovak Republic"    
## [46] "Slovenia"            "Spain"               "Sweden"             
## [49] "Switzerland"         "United Kingdom"      "United States"      
## [52] "Costa Rica"
# Paso 1: Cargar las librerías necesarias
library(readr)

# Paso 2: Cargar los datos
df <- read_csv("dataset_energy.csv")
## Rows: 47159 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): COUNTRY, CODE_TIME, TIME, MONTH_NAME, PRODUCT
## dbl (7): YEAR, MONTH, VALUE, DISPLAY_ORDER, yearToDate, previousYearToDate, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Paso 3: Filtrar los datos para Brasil
brazil_data <- subset(df, COUNTRY == "Brazil")

# Paso 4: Visualizar los datos
str(brazil_data)
## tibble [864 × 12] (S3: tbl_df/tbl/data.frame)
##  $ COUNTRY           : chr [1:864] "Brazil" "Brazil" "Brazil" "Brazil" ...
##  $ CODE_TIME         : chr [1:864] "JAN2020" "JAN2020" "JAN2020" "JAN2020" ...
##  $ TIME              : chr [1:864] "January 2020" "January 2020" "January 2020" "January 2020" ...
##  $ YEAR              : num [1:864] 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
##  $ MONTH             : num [1:864] 1 1 1 1 1 1 1 1 1 1 ...
##  $ MONTH_NAME        : chr [1:864] "January" "January" "January" "January" ...
##  $ PRODUCT           : chr [1:864] "Hydro" "Wind" "Solar" "Geothermal" ...
##  $ VALUE             : num [1:864] 36956 2797 789 0 0 ...
##  $ DISPLAY_ORDER     : num [1:864] 1 2 3 4 5 6 7 8 9 10 ...
##  $ yearToDate        : num [1:864] 392364 56480 10642 0 0 ...
##  $ previousYearToDate: num [1:864] 41203 4234 452 0 0 ...
##  $ share             : num [1:864] 0.6905 0.0523 0.0147 0 0 ...
# Paso 5: Definir el umbral (ejemplo: producción de energía superior a 1000 GWh)
umbral <- 1000

# Paso 6: Calcular la probabilidad de éxito
n <- nrow(brazil_data) # Tamaño de la muestra
p <- mean(brazil_data$VALUE > umbral, na.rm = TRUE) # Probabilidad de éxito

# Paso 7: Definir el rango de éxitos posibles (0 a n)
k <- 0:n 

# Paso 8: Calcular la distribución binomial
binomial_distribution <- dbinom(k, size = n, prob = p)

# Paso 9: Graficar la distribución binomial
barplot(binomial_distribution, names.arg = k,
        main = "Distribución Binomial de la Producción de Energía en Brasil",
        xlab = "Número de Meses con Producción > 1000 GWh", 
        ylab = "Probabilidad",
        col = "lightblue")

# Paso 1: Cargar las librerías necesarias
library(readr)

# Paso 2: Cargar los datos
df <- read_csv("dataset_energy.csv")
## Rows: 47159 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): COUNTRY, CODE_TIME, TIME, MONTH_NAME, PRODUCT
## dbl (7): YEAR, MONTH, VALUE, DISPLAY_ORDER, yearToDate, previousYearToDate, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Paso 3: Filtrar los datos para Brasil
brazil_data <- subset(df, COUNTRY == "Brazil")

# Paso 4: Visualizar los datos
str(brazil_data)
## tibble [864 × 12] (S3: tbl_df/tbl/data.frame)
##  $ COUNTRY           : chr [1:864] "Brazil" "Brazil" "Brazil" "Brazil" ...
##  $ CODE_TIME         : chr [1:864] "JAN2020" "JAN2020" "JAN2020" "JAN2020" ...
##  $ TIME              : chr [1:864] "January 2020" "January 2020" "January 2020" "January 2020" ...
##  $ YEAR              : num [1:864] 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
##  $ MONTH             : num [1:864] 1 1 1 1 1 1 1 1 1 1 ...
##  $ MONTH_NAME        : chr [1:864] "January" "January" "January" "January" ...
##  $ PRODUCT           : chr [1:864] "Hydro" "Wind" "Solar" "Geothermal" ...
##  $ VALUE             : num [1:864] 36956 2797 789 0 0 ...
##  $ DISPLAY_ORDER     : num [1:864] 1 2 3 4 5 6 7 8 9 10 ...
##  $ yearToDate        : num [1:864] 392364 56480 10642 0 0 ...
##  $ previousYearToDate: num [1:864] 41203 4234 452 0 0 ...
##  $ share             : num [1:864] 0.6905 0.0523 0.0147 0 0 ...
# Paso 5: Definir el umbral (ejemplo: producción de energía superior a 1000 GWh)
umbral <- 1000

# Paso 6: Contar los meses donde la producción supera el umbral
meses_exitosos <- sum(brazil_data$VALUE > umbral, na.rm = TRUE)

# Paso 7: Calcular la tasa de eventos (lambda)
lambda <- mean(brazil_data$VALUE > umbral, na.rm = TRUE) * nrow(brazil_data) # Total de eventos en el periodo

# Paso 8: Definir el rango de eventos posibles (0 a un número razonable)
k <- 0:max(meses_exitosos, 10) # Aquí, 10 es un límite superior que puedes ajustar

# Paso 9: Calcular la distribución de Poisson
poisson_distribution <- dpois(k, lambda)

# Paso 10: Graficar la distribución de Poisson
barplot(poisson_distribution, names.arg = k,
        main = "Distribución de Poisson de la Producción de Energía en Brasil",
        xlab = "Número de Meses con Producción > 1000 GWh", 
        ylab = "Probabilidad",
        col = "lightgreen")

# Paso 1: Cargar las librerías necesarias
library(readr)
library(ggplot2)

# Paso 2: Cargar los datos
df <- read_csv("dataset_energy.csv")
## Rows: 47159 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): COUNTRY, CODE_TIME, TIME, MONTH_NAME, PRODUCT
## dbl (7): YEAR, MONTH, VALUE, DISPLAY_ORDER, yearToDate, previousYearToDate, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Paso 3: Filtrar los datos para Brasil
brazil_data <- subset(df, COUNTRY == "Brazil")

# Paso 4: Calcular la media y desviación estándar de la variable VALUE
mean_brazil <- mean(brazil_data$VALUE, na.rm = TRUE)
sd_brazil <- sd(brazil_data$VALUE, na.rm = TRUE)

# Paso 5: Crear una secuencia de valores para la curva normal
x_values <- seq(mean_brazil - 4*sd_brazil, mean_brazil + 4*sd_brazil, length.out = 100)
y_values <- dnorm(x_values, mean = mean_brazil, sd = sd_brazil)

# Paso 6: Crear un dataframe para ggplot
normal_df <- data.frame(x_values, y_values)

# Paso 7: Graficar la distribución normal
p <- ggplot(normal_df, aes(x = x_values, y = y_values)) +
  geom_line(color = "blue") +
  labs(title = "Distribución Normal para Brasil",
       x = "Valores de Producción de Energía (GWh)",
       y = "Densidad") +
  theme_minimal()

# Paso 8: Añadir la media y la desviación estándar en la gráfica
p <- p + 
  geom_vline(xintercept = mean_brazil, color = "red", linetype = "dashed", size = 1) +
  geom_vline(xintercept = mean_brazil + sd_brazil, color = "green", linetype = "dashed", size = 1) +
  geom_vline(xintercept = mean_brazil - sd_brazil, color = "green", linetype = "dashed", size = 1)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Mostrar el gráfico
print(p)

# Cargar librerías necesarias
library(readr)
library(ggplot2)
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
# Paso 1: Cargar los datos
df <- read_csv("dataset_energy.csv")
## Rows: 47159 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): COUNTRY, CODE_TIME, TIME, MONTH_NAME, PRODUCT
## dbl (7): YEAR, MONTH, VALUE, DISPLAY_ORDER, yearToDate, previousYearToDate, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Paso 2: Filtrar los datos para Brasil
brazil_data <- subset(df, COUNTRY == "Brazil")

# Paso 3: Calcular la media y desviación estándar
population_mean <- mean(brazil_data$VALUE, na.rm = TRUE)
population_sd <- sd(brazil_data$VALUE, na.rm = TRUE)

# Paso 4: Simular distribuciones muestrales
set.seed(123)  # Para reproducibilidad
sample_size <- 40
num_samples <- 1000

# Generar medias de las muestras
sample_means <- replicate(num_samples, {
  sample_data <- sample(brazil_data$VALUE, sample_size, replace = TRUE)
  mean(sample_data)
})

# Paso 5: Graficar la distribución muestral de la media
ggplot(data.frame(sample_means), aes(x = sample_means)) +
  geom_histogram(bins = 30, fill = "lightgreen", color = "black", alpha = 0.7) +
  geom_vline(aes(xintercept = mean(sample_means)), color = "red", linetype = "dashed", size = 1) +
  labs(title = "Distribución Muestral de la Media (Brasil)",
       x = "Media Muestral",
       y = "Frecuencia") +
  theme_minimal()

# Paso 6: Graficar la distribución normal
x_values <- seq(population_mean - 4 * population_sd, population_mean + 4 * population_sd, by = 0.1)
y_values <- dnorm(x_values, mean = population_mean, sd = population_sd)

normal_df <- data.frame(x_values, y_values)

ggplot(normal_df, aes(x = x_values, y = y_values)) +
  geom_line(color = "blue") +
  labs(title = "Distribución Normal (Brasil)",
       x = "Valores",
       y = "Densidad") +
  theme_minimal()

# Paso 7: Graficar la distribución chi-cuadrado
degrees_of_freedom <- sample_size - 1
chi_square_values <- seq(0, 60, by = 0.1)
chi_square_y_values <- dchisq(chi_square_values, df = degrees_of_freedom)

chi_square_df <- data.frame(chi_square_values, chi_square_y_values)

ggplot(chi_square_df, aes(x = chi_square_values, y = chi_square_y_values)) +
  geom_line(color = "orange") +
  labs(title = paste("Distribución Chi-Cuadrado (df =", degrees_of_freedom, ")"),
       x = "Valores",
       y = "Densidad") +
  theme_minimal()

# Paso 1: Calcular la tasa de ocurrencia (lambda) para la distribución exponencial
lambda <- 1 / mean(brazil_data$VALUE, na.rm = TRUE)

# Paso 2: Simular distribuciones muestrales exponenciales
sample_expo_means <- replicate(num_samples, {
  sample_data <- rexp(sample_size, rate = lambda)
  mean(sample_data)
})

# Paso 3: Graficar la distribución muestral de la media exponencial
ggplot(data.frame(sample_expo_means), aes(x = sample_expo_means)) +
  geom_histogram(bins = 30, fill = "lightblue", color = "black", alpha = 0.7) +
  geom_vline(aes(xintercept = mean(sample_expo_means)), color = "red", linetype = "dashed", size = 1) +
  labs(title = "Distribución Muestral de la Media Exponencial (Brasil)",
       x = "Media Muestral",
       y = "Frecuencia") +
  theme_minimal()

# Paso 1: Calcular la probabilidad de éxito (p) para la distribución geométrica
success_prob <- mean(brazil_data$VALUE, na.rm = TRUE) / max(brazil_data$VALUE, na.rm = TRUE)

# Paso 2: Simular distribuciones muestrales geométricas
sample_geom_means <- replicate(num_samples, {
  sample_data <- rgeom(sample_size, prob = success_prob)
  mean(sample_data)
})

# Paso 3: Graficar la distribución muestral de la media geométrica
ggplot(data.frame(sample_geom_means), aes(x = sample_geom_means)) +
  geom_histogram(bins = 30, fill = "lightcoral", color = "black", alpha = 0.7) +
  geom_vline(aes(xintercept = mean(sample_geom_means)), color = "red", linetype = "dashed", size = 1) +
  labs(title = "Distribución Muestral de la Media Geométrica (Brasil)",
       x = "Media Muestral",
       y = "Frecuencia") +
  theme_minimal()