En la resolución de este ejercicio debe plantearse un modelo del tipo:
\[GDPcon_{i,t} = \alpha_i + \beta_1 RENcon_{i,t} + \beta_2 ENEcP_{i,t} + \beta_3 CARB_{i,t} + \beta_4 ENEcon_{i,t} + \sigma_1 RD_{i,t} + \sigma_2 DEBgob_{i,t} + \sigma_3 PMmn_{i,t} + \sigma_4 Wealth_{i,t} + \epsilon_{i,t}\]
Ejercicio 1.
Cargamos las variables necesarias de la base de datos
if (!require("readxl")) install.packages("readxl", dependencies = TRUE)
## Loading required package: readxl
library(readxl)
if (!require("dplyr")) install.packages("dplyr", dependencies = TRUE)
## Loading required package: dplyr
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(dplyr)
df <- read_excel("df.xlsx")
df <- df %>%
filter(Year >= 1990 & Year <= 2021)
Ejercicio 2
# Calcular estadísticos descriptivos
stats <- df %>%
summarise(
Min_GDPcur = min(GDPPcur, na.rm = TRUE),
Max_GDPcur = max(GDPPcur, na.rm = TRUE),
Mean_GDPcur = mean(GDPPcur, na.rm = TRUE),
SD_GDPcur = sd(GDPPcur, na.rm = TRUE),
Min_GDPcon = min(GDPPcon, na.rm = TRUE),
Max_GDPcon = max(GDPPcon, na.rm = TRUE),
Mean_GDPcon = mean(GDPPcon, na.rm = TRUE),
SD_GDPcon = sd(GDPPcon, na.rm = TRUE),
Min_RENcon = min(RENcon, na.rm = TRUE),
Max_RENcon = max(RENcon, na.rm = TRUE),
Mean_RENcon = mean(RENcon, na.rm = TRUE),
SD_RENcon = sd(RENcon, na.rm = TRUE),
Min_ENEcP = min(ENEcP, na.rm = TRUE),
Max_ENEcP = max(ENEcP, na.rm = TRUE),
Mean_ENEcP = mean(ENEcP, na.rm = TRUE),
SD_ENEcP = sd(ENEcP, na.rm = TRUE),
Min_CARB = min(CARB, na.rm = TRUE),
Max_CARB = max(CARB, na.rm = TRUE),
Mean_CARB = mean(CARB, na.rm = TRUE),
SD_CARB = sd(CARB, na.rm = TRUE),
Min_ENEcon = min(ENEcon, na.rm = TRUE),
Max_ENEcon = max(ENEcon, na.rm = TRUE),
Mean_ENEcon = mean(ENEcon, na.rm = TRUE),
SD_ENEcon = sd(ENEcon, na.rm = TRUE),
Min_ID = min(ID, na.rm = TRUE),
Max_ID = max(ID, na.rm = TRUE),
Mean_ID = mean(ID, na.rm = TRUE),
SD_ID = sd(ID, na.rm = TRUE),
Min_DEBgob = min(DEBgob, na.rm = TRUE),
Max_DEBgob = max(DEBgob, na.rm = TRUE),
Mean_DEBgob = mean(DEBgob, na.rm = TRUE),
SD_DEBgob = sd(DEBgob, na.rm = TRUE),
Min_PMmn = min(PMmean, na.rm = TRUE),
Max_PMmn = max(PMmean, na.rm = TRUE),
Mean_PMmn = mean(PMmean, na.rm = TRUE),
SD_PMmn = sd(PMmean, na.rm = TRUE),
Min_Wealth = min(Wealth, na.rm = TRUE),
Max_Wealth = max(Wealth, na.rm = TRUE),
Mean_Wealth = mean(Wealth, na.rm = TRUE),
SD_Wealth = sd(Wealth, na.rm = TRUE)
)
# Imprimir resultados
print(stats)
## # A tibble: 1 × 40
## Min_GDPcur Max_GDPcur Mean_GDPcur SD_GDPcur Min_GDPcon Max_GDPcon Mean_GDPcon
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4512. 135379. 28670. 18082. 10246. 137821. 41282.
## # ℹ 33 more variables: SD_GDPcon <dbl>, Min_RENcon <dbl>, Max_RENcon <dbl>,
## # Mean_RENcon <dbl>, SD_RENcon <dbl>, Min_ENEcP <dbl>, Max_ENEcP <dbl>,
## # Mean_ENEcP <dbl>, SD_ENEcP <dbl>, Min_CARB <dbl>, Max_CARB <dbl>,
## # Mean_CARB <dbl>, SD_CARB <dbl>, Min_ENEcon <dbl>, Max_ENEcon <dbl>,
## # Mean_ENEcon <dbl>, SD_ENEcon <dbl>, Min_ID <dbl>, Max_ID <dbl>,
## # Mean_ID <dbl>, SD_ID <dbl>, Min_DEBgob <dbl>, Max_DEBgob <dbl>,
## # Mean_DEBgob <dbl>, SD_DEBgob <dbl>, Min_PMmn <dbl>, Max_PMmn <dbl>, …
#Solución dada por chatGPT
if (!require("dplyr")) install.packages("dplyr", dependencies = TRUE)
library(dplyr)
stats <- df %>%
summarise(across(
c(GDPPcur, GDPPcon, RENcon, ENEcP, CARB, ENEcon, ID, DEBgob, PMmean, Wealth),
list(
Min = \(x) min(x, na.rm = TRUE),
Max = \(x) max(x, na.rm = TRUE),
Mean = \(x) mean(x, na.rm = TRUE),
SD = \(x) sd(x, na.rm = TRUE)
)
))
stats
## # A tibble: 1 × 40
## GDPPcur_Min GDPPcur_Max GDPPcur_Mean GDPPcur_SD GDPPcon_Min GDPPcon_Max
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4512. 135379. 28670. 18082. 10246. 137821.
## # ℹ 34 more variables: GDPPcon_Mean <dbl>, GDPPcon_SD <dbl>, RENcon_Min <dbl>,
## # RENcon_Max <dbl>, RENcon_Mean <dbl>, RENcon_SD <dbl>, ENEcP_Min <dbl>,
## # ENEcP_Max <dbl>, ENEcP_Mean <dbl>, ENEcP_SD <dbl>, CARB_Min <dbl>,
## # CARB_Max <dbl>, CARB_Mean <dbl>, CARB_SD <dbl>, ENEcon_Min <dbl>,
## # ENEcon_Max <dbl>, ENEcon_Mean <dbl>, ENEcon_SD <dbl>, ID_Min <dbl>,
## # ID_Max <dbl>, ID_Mean <dbl>, ID_SD <dbl>, DEBgob_Min <dbl>,
## # DEBgob_Max <dbl>, DEBgob_Mean <dbl>, DEBgob_SD <dbl>, PMmean_Min <dbl>, …
Ejercicio 3.
Gráfico 1
if (!require("ggplot2")) install.packages("ggplot2", dependencies = TRUE)
## Loading required package: ggplot2
library(ggplot2)
# Crear el gráfico de dispersión
ggplot(df, aes(x = GDPPcon, y = ENEppp, color = Country)) +
geom_point(alpha = 0.7) + # Puntos semi-transparentes
geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed") + # Línea de tendencia
scale_x_log10(labels = scales::label_number()) + # Transformación logarítmica en el eje X para mejor visualización
labs(title = "",
x = "GDPpc PPA",
y = "Use of energy",
color = "Country") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 169 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 169 rows containing missing values (`geom_point()`).
Cálculo de las correlaciones de la figura 1
# Calcular la correlación por país
corrF1 <- df %>%
group_by(Country) %>%
summarise(correlation = cor(GDPPcon, ENEppp, method = "pearson", use = "complete.obs"))
# Ver las correlaciones por país
print(corrF1)
## # A tibble: 27 × 2
## Country correlation
## <chr> <dbl>
## 1 AUT -0.849
## 2 BEL -0.906
## 3 BGR -0.945
## 4 CYP -0.728
## 5 CZE -0.955
## 6 DEU -0.983
## 7 DNK -0.900
## 8 ESP -0.438
## 9 EST -0.850
## 10 FIN -0.927
## # ℹ 17 more rows
Figura 2
# Crear el gráfico de dispersión
ggplot(df, aes(x = GDPPcon, y = ENEcP, color = Country)) +
geom_point(alpha = 0.7) + # Puntos semi-transparentes
geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed") + # Línea de tendencia
scale_x_log10(labels = scales::label_number()) + # Transformación logarítmica en el eje X para mejor visualización
labs(title = "",
x = "GDPpc PPA",
y = "Energy intensity / GDP per capita",
color = "Country") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Cálculo de las correlaciones de la figura 2
# Calcular la correlación por país
corrF1 <- df %>%
group_by(Country) %>%
summarise(correlation = cor(GDPPcon, ENEppp, method = "pearson", use = "complete.obs"))
# Ver las correlaciones por país
print(corrF1)
## # A tibble: 27 × 2
## Country correlation
## <chr> <dbl>
## 1 AUT -0.849
## 2 BEL -0.906
## 3 BGR -0.945
## 4 CYP -0.728
## 5 CZE -0.955
## 6 DEU -0.983
## 7 DNK -0.900
## 8 ESP -0.438
## 9 EST -0.850
## 10 FIN -0.927
## # ℹ 17 more rows
Ejercicio 4.
if (!require("plm")) install.packages("plm", dependencies = TRUE)
## Loading required package: plm
##
## Attaching package: 'plm'
## The following objects are masked from 'package:dplyr':
##
## between, lag, lead
library(plm)
dfp <- pdata.frame(df, index = c("Country", "Year"))
modo <- plm(log(GDPPcon) ~ log(RENcon) + log(ENEcP) + log(CARB) + log(ENEcon) + log(ID) + log(DEBgob) +
log(PMmean) + log(Wealth),
data = dfp,
model = "pooling")
# Resumen del modelo
summary(modo)
## Pooling Model
##
## Call:
## plm(formula = log(GDPPcon) ~ log(RENcon) + log(ENEcP) + log(CARB) +
## log(ENEcon) + log(ID) + log(DEBgob) + log(PMmean) + log(Wealth),
## data = dfp, model = "pooling")
##
## Unbalanced Panel: n = 27, T = 9-21, N = 531
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -0.310470 -0.061960 -0.010138 0.047616 0.350726
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) -3.05554584 0.42298033 -7.2238 1.801e-12 ***
## log(RENcon) 0.02637690 0.00791877 3.3309 0.0009268 ***
## log(ENEcP) -1.02588843 0.02132472 -48.1079 < 2.2e-16 ***
## log(CARB) 0.00741805 0.00787182 0.9424 0.3464471
## log(ENEcon) 1.23996755 0.02621826 47.2940 < 2.2e-16 ***
## log(ID) -0.13879165 0.01361262 -10.1958 < 2.2e-16 ***
## log(DEBgob) 0.00011054 0.00745128 0.0148 0.9881691
## log(PMmean) 0.04600466 0.01827898 2.5168 0.0121410 *
## log(Wealth) 0.17640532 0.05583778 3.1592 0.0016734 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 93.575
## Residual Sum of Squares: 5.7581
## R-Squared: 0.93847
## Adj. R-Squared: 0.93752
## F-statistic: 995.137 on 8 and 522 DF, p-value: < 2.22e-16
modw <- plm(log(GDPPcon) ~ log(RENcon) + log(ENEcP) + log(CARB) + log(ENEcon) + log(ID) + log(DEBgob) + log(PMmean) + log(Wealth),
data = dfp,
model = "within")
summary(modw)
## Oneway (individual) effect Within Model
##
## Call:
## plm(formula = log(GDPPcon) ~ log(RENcon) + log(ENEcP) + log(CARB) +
## log(ENEcon) + log(ID) + log(DEBgob) + log(PMmean) + log(Wealth),
## data = dfp, model = "within")
##
## Unbalanced Panel: n = 27, T = 9-21, N = 531
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -0.1123210 -0.0193024 -0.0002327 0.0150835 0.3355033
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## log(RENcon) 0.01700706 0.00450656 3.7738 0.0001802 ***
## log(ENEcP) -0.80263819 0.01449994 -55.3546 < 2.2e-16 ***
## log(CARB) 0.06423612 0.00976299 6.5796 1.201e-10 ***
## log(ENEcon) 1.03418090 0.02186577 47.2968 < 2.2e-16 ***
## log(ID) -0.02395088 0.01062565 -2.2541 0.0246279 *
## log(DEBgob) -0.00066482 0.00578529 -0.1149 0.9085592
## log(PMmean) -0.16206316 0.02034588 -7.9654 1.136e-14 ***
## log(Wealth) -0.12779831 0.04470793 -2.8585 0.0044354 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 11.313
## Residual Sum of Squares: 0.68894
## R-Squared: 0.9391
## Adj. R-Squared: 0.93493
## F-statistic: 956.128 on 8 and 496 DF, p-value: < 2.22e-16
modr <- plm(log(GDPPcon) ~ log(RENcon) + log(ENEcP) + log(CARB) + log(ENEcon) + log(ID) + log(DEBgob) + log(PMmean) + log(Wealth),
data = dfp,
model = "random")
summary(modr)
## Oneway (individual) effect Random Effect Model
## (Swamy-Arora's transformation)
##
## Call:
## plm(formula = log(GDPPcon) ~ log(RENcon) + log(ENEcP) + log(CARB) +
## log(ENEcon) + log(ID) + log(DEBgob) + log(PMmean) + log(Wealth),
## data = dfp, model = "random")
##
## Unbalanced Panel: n = 27, T = 9-21, N = 531
##
## Effects:
## var std.dev share
## idiosyncratic 0.001389 0.037269 0.107
## individual 0.011550 0.107471 0.893
## theta:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.8852 0.9245 0.9245 0.9223 0.9245 0.9245
##
## Residuals:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.13666 -0.02056 -0.00103 0.00001 0.01569 0.33262
##
## Coefficients:
## Estimate Std. Error z-value Pr(>|z|)
## (Intercept) 0.47713225 0.30236209 1.5780 0.114562
## log(RENcon) 0.01715898 0.00447988 3.8302 0.000128 ***
## log(ENEcP) -0.81097502 0.01440215 -56.3093 < 2.2e-16 ***
## log(CARB) 0.06131966 0.00947189 6.4739 9.553e-11 ***
## log(ENEcon) 1.03077055 0.02084275 49.4546 < 2.2e-16 ***
## log(ID) -0.02691476 0.01046485 -2.5719 0.010114 *
## log(DEBgob) 0.00076927 0.00570188 0.1349 0.892679
## log(PMmean) -0.14880606 0.01945932 -7.6470 2.057e-14 ***
## log(Wealth) -0.11577995 0.04419593 -2.6197 0.008801 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 14.944
## Residual Sum of Squares: 0.7388
## R-Squared: 0.95056
## Adj. R-Squared: 0.94981
## Chisq: 7824.06 on 8 DF, p-value: < 2.22e-16
# Realizar el test de Hausman para mod2
ht <- phtest(modw, modr)
print(ht)
##
## Hausman Test
##
## data: log(GDPPcon) ~ log(RENcon) + log(ENEcP) + log(CARB) + log(ENEcon) + ...
## chisq = 16.813, df = 8, p-value = 0.03211
## alternative hypothesis: one model is inconsistent
plmtest(modo, type = "bp")
##
## Lagrange Multiplier Test - (Breusch-Pagan)
##
## data: log(GDPPcon) ~ log(RENcon) + log(ENEcP) + log(CARB) + log(ENEcon) + ...
## chisq = 2777.9, df = 1, p-value < 2.2e-16
## alternative hypothesis: significant effects
#Si p < 0.05 → Los efectos individuales son significativos → Efectos aleatorios (RE) es mejor que OLS.
#Si p > 0.05 → No hay evidencia suficiente para rechazar OLS.
pFtest(modw, modo)
##
## F test for individual effects
##
## data: log(GDPPcon) ~ log(RENcon) + log(ENEcP) + log(CARB) + log(ENEcon) + ...
## F = 140.36, df1 = 26, df2 = 496, p-value < 2.2e-16
## alternative hypothesis: significant effects
#Si p < 0.05 → Los efectos individuales son significativos → Efectos fijos es mejor que OLS.
#Si p > 0.05 → No hay evidencia suficiente para rechazar OLS.