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
Tomar la base de datos y aplicar las distribuciones de la media de la
variable Value en cualquier pais de tu interes.
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()