Instalar paquetes y llamar librerías

# install.packages("WDI")
library(WDI)
# install.packages("plm")
library(plm)
# install.packages("dplyr")
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:plm':
## 
##     between, lag, lead
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Paso 1. Definir países

paises <- c("CHL", "PER", "COL", "MEX", "USA")

Paso 2. Definir indicadores del banco mundial

https://data.worldbank.org/indicator?tab=all

indicadores <- c(
  gdp_pc   = "NY.GDP.PCAP.KD",      # GDP per capita 
  inv      = "NE.GDI.TOTL.KD",      # Gross capital formation 
  labor    = "SL.TLF.TOTL.IN",      # Labor force, total
  energia  = "EG.USE.PCAP.KG.OE"    # Energy use per capita
)

Paso 3. Definir inicio y final para obtener datos

datos <- WDI(country = paises,
             indicator = indicadores,
             start = 2014,
             end = 2023)

Paso 4. Limpiar datos

datos <- datos %>%
  select(iso2c, country, year, gdp_pc, inv, labor, energia) %>%
  na.omit()

Paso 5. Transformar a logaritmos

Este paso se hace cuando las variables son muy grandes y cuando la relación es proporcional.

NO USAR cuando hay valores negativos o ceros, cuando los datos son porcentajes o

cuando la relación es lineal.

datos <- datos %>%
  mutate(
    lgdp_pc = log(gdp_pc),
    linv    = log(inv),
    llabor  = log(labor),
    lenergia = log(energia)
  )

Paso 6. Convertir a panel

panel_data <- pdata.frame(datos, index = c("iso2c", "year"))

Paso 7. Modelo de Mínimos Cuadrados Ordinarios Agrupados /

Pooled Ordinary Least Squares Model (Pooled OLS)

modelo_pool <- plm(lgdp_pc ~ linv + llabor + lenergia,
                   data = panel_data,
                   model = "pooling")

summary(modelo_pool)
## Pooling Model
## 
## Call:
## plm(formula = lgdp_pc ~ linv + llabor + lenergia, data = panel_data, 
##     model = "pooling")
## 
## Unbalanced Panel: n = 5, T = 9-10, N = 49
## 
## Residuals:
##       Min.    1st Qu.     Median    3rd Qu.       Max. 
## -0.2175589 -0.0628130  0.0094552  0.0760073  0.1966870 
## 
## Coefficients:
##             Estimate Std. Error t-value Pr(>|t|)   
## (Intercept)  0.65549    0.27148  2.4145 0.019885 * 
## linv         0.56230    0.17810  3.1572 0.002842 **
## llabor      -0.50633    0.18325 -2.7631 0.008265 **
## lenergia     0.39895    0.19238  2.0737 0.043859 * 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    33.71
## Residual Sum of Squares: 0.50699
## R-Squared:      0.98496
## Adj. R-Squared: 0.98396
## F-statistic: 982.349 on 3 and 45 DF, p-value: < 2.22e-16

Paso 8. Prueba Breusch–Pagan

Compara Pooled vs Aleatorios

Si p-value < 0.05, Pooled NO es adecuado, probar Aleatorios

Si p-value > 0.05, usar Pooled

plmtest(modelo_pool, type = "bp")
## 
##  Lagrange Multiplier Test - (Breusch-Pagan)
## 
## data:  lgdp_pc ~ linv + llabor + lenergia
## chisq = 122.59, df = 1, p-value < 2.2e-16
## alternative hypothesis: significant effects

Paso 9. Modelo de Efectos Fijos / Fixed Effects Model

model_fe <- plm(lgdp_pc ~ linv + llabor + lenergia,
                data = panel_data,
                model = "within")
summary(model_fe)
## Oneway (individual) effect Within Model
## 
## Call:
## plm(formula = lgdp_pc ~ linv + llabor + lenergia, data = panel_data, 
##     model = "within")
## 
## Unbalanced Panel: n = 5, T = 9-10, N = 49
## 
## Residuals:
##      Min.   1st Qu.    Median   3rd Qu.      Max. 
## -0.049430 -0.011209 -0.001441  0.013278  0.066167 
## 
## Coefficients:
##           Estimate Std. Error t-value  Pr(>|t|)    
## linv      0.311194   0.042565  7.3111 6.016e-09 ***
## llabor    0.479971   0.086631  5.5404 1.945e-06 ***
## lenergia -0.065499   0.087778 -0.7462    0.4598    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    0.081966
## Residual Sum of Squares: 0.020087
## R-Squared:      0.75494
## Adj. R-Squared: 0.7131
## F-statistic: 42.1013 on 3 and 41 DF, p-value: 1.3757e-12

Paso 10. Prueba F

Compara Fijos vs Pooled

Si p-value < 0.05, usar Efectos Fijos

Si p-value > 0.05, usar Pooled

pFtest(model_fe, modelo_pool)
## 
##  F test for individual effects
## 
## data:  lgdp_pc ~ linv + llabor + lenergia
## F = 248.46, df1 = 4, df2 = 41, p-value < 2.2e-16
## alternative hypothesis: significant effects

Paso 11. Modelo de Efectos Aleatorios / Random Effects Model

model_re <- plm(lgdp_pc ~ linv + llabor + lenergia,
                data = panel_data,
                model = "random")

summary(model_re)
## Oneway (individual) effect Random Effect Model 
##    (Swamy-Arora's transformation)
## 
## Call:
## plm(formula = lgdp_pc ~ linv + llabor + lenergia, data = panel_data, 
##     model = "random")
## 
## Unbalanced Panel: n = 5, T = 9-10, N = 49
## 
## Effects:
##                     var   std.dev share
## idiosyncratic 0.0004899 0.0221342 0.021
## individual    0.0228420 0.1511355 0.979
## theta:
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.9512  0.9537  0.9537  0.9533  0.9537  0.9537 
## 
## Residuals:
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -5.91e-02 -2.02e-02 -2.41e-03  1.42e-05  2.09e-02  7.00e-02 
## 
## Coefficients:
##              Estimate Std. Error z-value  Pr(>|z|)    
## (Intercept) -2.759644   1.263081 -2.1849   0.02890 *  
## linv         0.283528   0.055538  5.1051 3.306e-07 ***
## llabor       0.214201   0.091470  2.3418   0.01919 *  
## lenergia     0.154288   0.104458  1.4770   0.13966    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    0.14465
## Residual Sum of Squares: 0.040624
## R-Squared:      0.71916
## Adj. R-Squared: 0.70044
## Chisq: 126.667 on 3 DF, p-value: < 2.22e-16

Paso 12. Prueba de Hausman

Compara Fijos vs Aleatorios

Si p-value < 0.05, usar Efectos Fijos

Si p-value > 0.05, usar Efectos Aleatorios

phtest(model_fe, model_re)
## 
##  Hausman Test
## 
## data:  lgdp_pc ~ linv + llabor + lenergia
## chisq = 22.99, df = 3, p-value = 4.058e-05
## alternative hypothesis: one model is inconsistent

Paso 13. Conclusiones

De acuerdo al Modelo de Efectos Fijos, aumentar 1% la inversión, aumentará 0.31% el PIB.

Aumentar 1% la fuera laboral, aumentará 0.47% el PIB, ceteris paribus (todo lo demás constante).

Paso 14. Prueba de Heterocedasticidad

Evalúa si la varianza de los errores es constante.

install.packages(“lmtest”)

library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(model_fe)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_fe
## BP = 11.585, df = 3, p-value = 0.00895

Prueba de Wooldridge (más apropiada para Efectos Fijos)

pwartest(model_fe)
## 
##  Wooldridge's test for serial correlation in FE panels
## 
## data:  model_fe
## F = 31.404, df1 = 1, df2 = 42, p-value = 1.472e-06
## alternative hypothesis: serial correlation

Prueba Breusch-Godfrey para panel (más apropiada para Efectos Aleatorios)

pbgtest(model_re)

Interpretación:

Si p-value < 0.05 → Existe autocorrelación serial (problema detectado)

Si p-value > 0.05 → No hay evidencia de autocorrelación

Paso 16. Corrección con Errores Estándar Robustos Clusterizados

Corrige heterocedasticidad y autocorrelación dentro de cada país

install.packages(“sandwich”)

library(sandwich)
modelo_robusto <- coeftest(model_fe,
                           vcov = vcovHC(model_fe,
                                         method = "arellano",
                                         type = "HC1",
                                         cluster = "group"))

modelo_robusto
## 
## t test of coefficients:
## 
##           Estimate Std. Error t value  Pr(>|t|)    
## linv      0.311194   0.058393  5.3293 3.867e-06 ***
## llabor    0.479971   0.188309  2.5489   0.01465 *  
## lenergia -0.065499   0.089521 -0.7317   0.46854    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretación:

Los coeficientes NO cambian.

Cambian los errores estándar, estadísticos t y p-values.

Si una variable sigue siendo significativa después de la corrección,

el resultado es estadísticamente más confiable.

Paso 17. Conclusiones Finales

De acuerdo al Modelo de Efectos Fijos, aumentar 1% la inversión aumentará 0.31% el PIB, y aumentar 1% la fuerza laboral aumentará 0.47% el PIB

(con un nivel de significancia del 5%), ceteris pluribus

La inversión tiene un efecto positivo y robusto sobre el PIB per cápita.

La fuerza laboral también tiene un efecto positivo, aunque más sensible a correcciones.

El consumo de energía no muestra evidencia estadística de impacto.