library(readxl)
library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
library(car)
## Loading required package: carData
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:car':
## 
##     recode
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

Introducción:

desempleo.40 <- read_excel("~/Downloads/desempleo.40.xlsx")
# Crear la gráfica
ggplot(data = desempleo.40, aes(x = FECHA, y = TASA)) +
  geom_line(color = "cadetblue", size= 1.5) +       # Línea azul para la tasa de desempleo
  geom_point(color = "lightcyan3", size= 2) +       # Puntos rojos en los datos
  labs(title = "Tasa de Desempleo en México (Últimos 40 Años)",
       x = "Año",
       y = "Tasa de Desempleo (%)") +
  theme_minimal(base_size = 15) +          # Tamaño de fuente mayor
  theme(plot.title = element_text(hjust = 0.5),   # Centrar el título
        plot.subtitle = element_text(hjust = 0.5))  # Centrar el subtítulo
## 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.

SERIES DE TIEMPO

Leemos la base de datos:

datos_mex <- read_excel("~/Downloads/Datos_MÉXICO_EvidenciaECO.xlsx")

Modelo General

Convertir a Serie de Tiempo:

datos.ts <- ts(datos_mex,start=1992,frequency=1) 


AñO.ts=ts(datos.ts[,1],start=1992, frequency=1)
crec_pib.ts=ts(datos.ts[,2],start=1992, frequency=1)
ied.ts=ts(datos.ts[,3],start=1992, frequency=1)
inpc.ts=ts(datos.ts[,4],start=1992, frequency=1)
id_indus.ts=ts(datos.ts[,5],start=1992, frequency=1)
esc_terniv.ts=ts(datos.ts[,6],start=1992, frequency=1)
esc_secniv.ts=ts(datos.ts[,7],start=1992, frequency=1)
desem_muje.ts=ts(datos.ts[,8],start=1992, frequency=1)
hombres.ts=ts(datos.ts[,9],start=1992, frequency=1)
mujeres.ts=ts(datos.ts[,10],start=1992, frequency=1)
desem_varo.ts=ts(datos.ts[,11],start=1992, frequency=1)
desem_total.ts=ts(datos.ts[,12],start=1992, frequency=1)

Regresión Lineal General

model1 <- lm(desem_total.ts ~ crec_pib.ts + ied.ts + id_indus.ts + inpc.ts + esc_terniv.ts + esc_secniv.ts + desem_muje.ts + desem_varo.ts + hombres.ts + mujeres.ts, data = datos.ts)

summary(model1)
## 
## Call:
## lm(formula = desem_total.ts ~ crec_pib.ts + ied.ts + id_indus.ts + 
##     inpc.ts + esc_terniv.ts + esc_secniv.ts + desem_muje.ts + 
##     desem_varo.ts + hombres.ts + mujeres.ts, data = datos.ts)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.41557 -0.06994  0.01056  0.07983  0.46331 
## 
## Coefficients: (1 not defined because of singularities)
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -1.243e+02  8.422e+01  -1.476 0.154796    
## crec_pib.ts   -1.317e-02  1.193e-02  -1.104 0.282074    
## ied.ts         6.186e-02  7.448e-02   0.831 0.415542    
## id_indus.ts    5.207e-03  1.224e-02   0.425 0.675005    
## inpc.ts        3.137e-04  5.876e-04   0.534 0.599019    
## esc_terniv.ts  2.848e-02  2.907e-02   0.980 0.338399    
## esc_secniv.ts -5.173e-02  1.932e-02  -2.677 0.014104 *  
## desem_muje.ts  2.121e-01  4.435e-02   4.781 0.000101 ***
## desem_varo.ts  3.641e-01  8.686e-02   4.192 0.000410 ***
## hombres.ts     2.508e+00  1.639e+00   1.531 0.140790    
## mujeres.ts            NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1941 on 21 degrees of freedom
## Multiple R-squared:  0.9734, Adjusted R-squared:  0.962 
## F-statistic: 85.38 on 9 and 21 DF,  p-value: 1.672e-14

Modelo 2 (sin NA)

Quitamos el NA del modelo 1, es decir: Mujeres

model2 <- lm(desem_total.ts ~ crec_pib.ts + ied.ts + id_indus.ts+ inpc.ts + esc_terniv.ts + esc_secniv.ts + desem_muje.ts + desem_varo.ts + hombres.ts, data = datos.ts)

summary(model2)
## 
## Call:
## lm(formula = desem_total.ts ~ crec_pib.ts + ied.ts + id_indus.ts + 
##     inpc.ts + esc_terniv.ts + esc_secniv.ts + desem_muje.ts + 
##     desem_varo.ts + hombres.ts, data = datos.ts)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.41557 -0.06994  0.01056  0.07983  0.46331 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -1.243e+02  8.422e+01  -1.476 0.154796    
## crec_pib.ts   -1.317e-02  1.193e-02  -1.104 0.282074    
## ied.ts         6.186e-02  7.448e-02   0.831 0.415542    
## id_indus.ts    5.207e-03  1.224e-02   0.425 0.675005    
## inpc.ts        3.137e-04  5.876e-04   0.534 0.599019    
## esc_terniv.ts  2.848e-02  2.907e-02   0.980 0.338399    
## esc_secniv.ts -5.173e-02  1.932e-02  -2.677 0.014104 *  
## desem_muje.ts  2.121e-01  4.435e-02   4.781 0.000101 ***
## desem_varo.ts  3.641e-01  8.686e-02   4.192 0.000410 ***
## hombres.ts     2.508e+00  1.639e+00   1.531 0.140790    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1941 on 21 degrees of freedom
## Multiple R-squared:  0.9734, Adjusted R-squared:  0.962 
## F-statistic: 85.38 on 9 and 21 DF,  p-value: 1.672e-14

VIF del modelo General

# Calcular el VIF para el modelo
vif_values <- car::vif(model2)
print(vif_values)
##   crec_pib.ts        ied.ts   id_indus.ts       inpc.ts esc_terniv.ts 
##      1.464075      1.852022     14.883023    336.659042     66.912134 
## esc_secniv.ts desem_muje.ts desem_varo.ts    hombres.ts 
##     75.541332      6.621126     17.306514     11.003900

El modelo presenta problemas de multicolinealidad en INPC, crec_pib, esc_ternive, desem_varo pues son mayores a 10. Lo mejoraremos en el modelo individual:

BP TEST

library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bgtest(model2)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  model2
## LM test = 6.3049, df = 1, p-value = 0.01204
bptest(model2)
## 
##  studentized Breusch-Pagan test
## 
## data:  model2
## BP = 11.531, df = 9, p-value = 0.2411

Como el valor p es mayor a 0.05 no rechazamos la hipótesis nula, lo que indica que hay heterocedasticidad, además de problemas de autocorrelación. Se corregirán los errores estándar (que están mal cuando hay heterocedasticidad) utilizando la solución de White.

library(sandwich)
coeftest(model2,vcov=vcovHC(model2,"HC1"))
## 
## t test of coefficients:
## 
##                  Estimate  Std. Error t value  Pr(>|t|)    
## (Intercept)   -1.2431e+02  7.8284e+01 -1.5879 0.1272554    
## crec_pib.ts   -1.3169e-02  1.1892e-02 -1.1074 0.2806298    
## ied.ts         6.1861e-02  5.8488e-02  1.0577 0.3022173    
## id_indus.ts    5.2065e-03  7.1701e-03  0.7261 0.4757708    
## inpc.ts        3.1370e-04  4.8148e-04  0.6515 0.5217727    
## esc_terniv.ts  2.8479e-02  2.4320e-02  1.1710 0.2547094    
## esc_secniv.ts -5.1726e-02  1.6644e-02 -3.1078 0.0053265 ** 
## desem_muje.ts  2.1206e-01  5.2516e-02  4.0381 0.0005932 ***
## desem_varo.ts  3.6411e-01  1.0490e-01  3.4709 0.0022838 ** 
## hombres.ts     2.5083e+00  1.5284e+00  1.6411 0.1156713    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

DW del modelo general

library(lmtest)
dwtest(model2)
## 
##  Durbin-Watson test
## 
## data:  model2
## DW = 1.0477, p-value = 8.035e-05
## alternative hypothesis: true autocorrelation is greater than 0

Se observa autocorrelación. Se tratará de solucionar en el modelo individual, con Orcutt:

Modelo individual - Series de tiempo

model3 <- lm(desem_total.ts ~ crec_pib.ts + ied.ts + id_indus.ts+ inpc.ts + esc_secniv.ts + hombres.ts, data = datos.ts)

summary(model3)
## 
## Call:
## lm(formula = desem_total.ts ~ crec_pib.ts + ied.ts + id_indus.ts + 
##     inpc.ts + esc_secniv.ts + hombres.ts, data = datos.ts)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.72647 -0.47747  0.04747  0.47314  1.79332 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)   
## (Intercept)   -7.503e+02  2.591e+02  -2.895  0.00795 **
## crec_pib.ts   -9.053e-02  5.248e-02  -1.725  0.09734 . 
## ied.ts         3.011e-01  3.335e-01   0.903  0.37563   
## id_indus.ts    5.488e-02  4.747e-02   1.156  0.25902   
## inpc.ts        2.499e-03  9.680e-04   2.582  0.01636 * 
## esc_secniv.ts -1.678e-01  6.889e-02  -2.435  0.02268 * 
## hombres.ts     1.492e+01  5.152e+00   2.895  0.00795 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9029 on 24 degrees of freedom
## Multiple R-squared:  0.3424, Adjusted R-squared:  0.178 
## F-statistic: 2.083 on 6 and 24 DF,  p-value: 0.09319

Vemos que salieron significativas todas las variables usadas. Se eliminaron ambos de desempleo pues son redundantes si queremos explicar el desempleo por la tasa de desempleo de hombres y de mujeres. Quitando estas, las demás salieron significativas. Y en general, me da una R-Cuadrada de 0.44. Es un muy buen indicador.

DW del modelo individual

dwtest(model3)
## 
##  Durbin-Watson test
## 
## data:  model3
## DW = 0.83614, p-value = 6.947e-06
## alternative hypothesis: true autocorrelation is greater than 0

Vemos que el valor p es < 0.05, por lo que, nuestro modelo presenta autocorrelación. Procederemos a corregirlo:

BP y BG del modelo individual

bptest(model3)
## 
##  studentized Breusch-Pagan test
## 
## data:  model3
## BP = 17.183, df = 6, p-value = 0.008633
bgtest(model3)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  model3
## LM test = 10.327, df = 1, p-value = 0.001311

Sigue habiendo problemas en el modelo, ya que los valores p son < 0.05, se procederá a la prueba Orcutt para corregirlos. ## Corrección del modelo individual

Corregí el modelo con Orcutt:

library(orcutt)


model4= cochrane.orcutt(model3)
summary(model4)
## Call:
## lm(formula = desem_total.ts ~ crec_pib.ts + ied.ts + id_indus.ts + 
##     inpc.ts + esc_secniv.ts + hombres.ts, data = datos.ts)
## 
##                  Estimate  Std. Error t value Pr(>|t|)   
## (Intercept)   -1.1882e+03  3.9068e+02  -3.041 0.005797 **
## crec_pib.ts   -6.9819e-02  2.6505e-02  -2.634 0.014827 * 
## ied.ts         6.8938e-02  1.6977e-01   0.406 0.688446   
## id_indus.ts   -3.6429e-04  3.3641e-02  -0.011 0.991454   
## inpc.ts        3.8364e-03  1.2969e-03   2.958 0.007048 **
## esc_secniv.ts -2.2706e-01  7.7820e-02  -2.918 0.007745 **
## hombres.ts     2.3721e+01  7.7902e+00   3.045 0.005749 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6088 on 23 degrees of freedom
## Multiple R-squared:  0.4756 ,  Adjusted R-squared:  0.3388
## F-statistic: 3.5 on 6 and 23 DF,  p-value: < 1.358e-02
## 
## Durbin-Watson statistic 
## (original):    0.83614 , p-value: 6.947e-06
## (transformed): 1.84840 , p-value: 2.057e-01

Después de corregirlo, volví a aplicar el DW test

dwtest(model4)
## 
##  Durbin-Watson test
## 
## data:  model4
## DW = 1.8484, p-value = 0.2057
## alternative hypothesis: true autocorrelation is greater than 0

Se aprecia que ahora p > 0.05, por lo que, ya no tenemos problemas de autocorrelación.

vif(model3)
##   crec_pib.ts        ied.ts   id_indus.ts       inpc.ts esc_secniv.ts 
##      1.309962      1.716975     10.342455     42.243763     44.396153 
##    hombres.ts 
##      5.028869

Explicación de Resultados

Coeficientes

Podemos ver mediante nuestra regresión lineal, que la variable independiente es desem_total (Desempleo Total Nacional) mientras que nuestras variables independientes son; crec_pib (Crecimiento PIB Anual), ied (Indice Industrial), inpc (Índice Nacional de Precios al Consumidor) esc_terniv (Inscripción Escolar, Tercer Nivel), esc_secniv (Inscripción Escolar, Segundo Nivel), desem_muje (Desempleo, Mujeres Jovenes), desem_varo (Desempleo, Varones Jovenes), hombres (Población Hombres), mujeres (Población Mujeres).

En la sección de coeficientes de nuestro modelo de regresión lineal, observamos los estimadores asociados a cada variable independiente. Estos coeficientes nos permiten entender cómo cada variable influye en la variable dependiente, en este caso, la tasa de desempleo.

El coeficiente del crecimiento del PIB anual (-0.01144) muestra un impacto negativo en la tasa de desempleo, lo que es consistente con la teoría económica: a medida que la economía crece, la demanda de empleo aumenta y, por ende, el desempleo disminuye. Este coeficiente es crucial, ya que sugiere la importancia del crecimiento económico para mejorar la situación del empleo.

El intercepto (-.01186) destaca la importancia de las variables incluidas en el modelo. Aunque su valor no tiene una interpretación directa en términos de desempleo, señala que la falta de crecimiento económico, educación y otras variables relevantes tendría un impacto considerablemente negativo en el empleo en México.

Este análisis resalta la importancia de fomentar el crecimiento económico y mejorar los niveles educativos y otras variables económicas clave para reducir el desempleo en México. Los coeficientes del modelo proporcionan información valiosa sobre cómo diferentes factores afectan el desempleo y subrayan la necesidad de políticas públicas que impulsen estas áreas para mejorar la situación laboral en el país.

El siguente paso, fue quitar la variable que cuenta con NA para ver el VIF (Factor de Inflación de Varianza) para detectar cuales variables tienen multicolinealidad. En este caso, quitamos la variable de mujeres y nos da nuestras factores de inflación, donde podemos ver que el Índice Nacional de Precios al Consumidor, Inscripción Escolar Segundo Nivel y Tercer Nivel, Desempleo Varones y Hombres tienen multicolinealidad.

R-Cuadrada y Prueba de F

Podemos ver que tenemos una r-cuadrada muy alta de un .9634, lo que significa que tenemos un modelo que se podria decir que es optimo. Sin embargo, tenemos que tener la habilidad de leer lo que esta pasando en nuestra regresión, lo que podemos entender es que se tiene una autocorrelación entre nuestras variables. Podría tener un sobreajuste, ya que nuestro modelo es demasiado complejo y ajusta no solo los datos verdaderos, sino también el ruido presente en el conjunto de datos. Multicolinealidad se produce cuando dos o más variables independientes en el modelo están altamente correlacionadas entre sí. Por ultimo, nuestros valores atípicos pueden influir fuertemente en el modelo y llevar a un R-cuadrado muy alto, aunque no refleje adecuadamente la relación subyacente entre las variables.

La prueba de F, prueba de F examina si existe al menos una relación lineal entre la variable dependiente y las variables independientes del modelo. En el modelo se tiene un prueb de F de 99.75 lo que implica que el modelo en su conjunto es altamente significativo, sin embargo, una F tan alto generalmente indica una alta probabilidad de que al menos una de las variables independientes tiene un efecto significativo sobre la variable dependiente.

CORTE TRANSVERSAL

#renombrar variables para que sean más facil de tratar
df <- read_xlsx("econometria.paises.finalbase.xlsx")
names.base = c("paises", "abrev", "desempleo", "electricidad", "migracion", "estadoderecho",  "deuda",  "exportaciones", "gini", "patentes", "pobmuj", "insegcomida", "stocks", "gastosalud", "ingresosnac", "desercion", "inflacion", "gastoeduc", "poblacionurb", "densidadpob" )
base.paises <-  df
names(base.paises) <-  names.base

#diccionario de variables
diccionario <- data.frame(original = names(df), renombrada = names.base)
print(diccionario)
##                                                                  original
## 1                                                            Country Name
## 2                                                            Country Code
## 3        Unemployment, total (% of total labor force) (national estimate)
## 4                    Access to electricity, urban (% of urban population)
## 5                                                           Net migration
## 6    Rule of Law: Percentile Rank, Upper Bound of 90% Confidence Interval
## 7                               Central government debt, total (% of GDP)
## 8                                    Export unit value index (2015 = 100)
## 9                                                              Gini index
## 10                                         Patent applications, residents
## 11                             Population, female (% of total population)
## 12 Prevalence of moderate or severe food insecurity in the population (%)
## 13                                  Stocks traded, total value (% of GDP)
## 14                                  Current health expenditure (% of GDP)
## 15                         Adjusted net national income (annual % growth)
## 16            Adolescents out of school (% of lower secondary school age)
## 17                                  Inflation, consumer prices (annual %)
## 18                  Government expenditure on education, total (% of GDP)
## 19                               Urban population (% of total population)
## 20                    Population density (people per sq. km of land area)
##       renombrada
## 1         paises
## 2          abrev
## 3      desempleo
## 4   electricidad
## 5      migracion
## 6  estadoderecho
## 7          deuda
## 8  exportaciones
## 9           gini
## 10      patentes
## 11        pobmuj
## 12   insegcomida
## 13        stocks
## 14    gastosalud
## 15   ingresosnac
## 16     desercion
## 17     inflacion
## 18     gastoeduc
## 19  poblacionurb
## 20   densidadpob
#quitar las celdas vacias
base.paises <- base.paises %>% mutate(across(everything(), ~ ifelse(. == "..", NA, .)))
base.paises<- base.paises %>%
  filter(rowSums(is.na(.)) != ncol(base.paises))
base.paises[, 3:20] <- sapply(base.paises[, 3:20], as.numeric)
#quitar columnas con NAs
base.paises <- base.paises[, colSums(is.na(base.paises)) == 0]

print(base.paises)
## # A tibble: 34 × 13
##    paises   abrev desempleo electricidad migracion estadoderecho patentes pobmuj
##    <chr>    <chr>     <dbl>        <dbl>     <dbl>         <dbl>    <dbl>  <dbl>
##  1 Mexico   MEX        4.44         99.8     -9949          37.6     1132   51.1
##  2 Austral… AUS        6.46        100      117929          99.0     2368   50.4
##  3 Germany  DEU        3.86        100      334055          96.2    42260   50.7
##  4 Austria  AUT        5.20        100       20314          99.5     2124   50.8
##  5 Belgium  BEL        5.56        100       53428          91.4      862   50.6
##  6 Canada   CAN        9.66        100      195181          99.0     4452   50.3
##  7 Chile    CHL       10.9         100       98439          85.7      372   50.4
##  8 Colombia COL       16.0         100      229437          44.8      369   50.6
##  9 Costa R… CRI       16.4          99.9      2084          75.2       12   49.9
## 10 Denmark  DNK        5.64        100       23076         100       1261   50.3
## # ℹ 24 more rows
## # ℹ 5 more variables: gastosalud <dbl>, inflacion <dbl>, gastoeduc <dbl>,
## #   poblacionurb <dbl>, densidadpob <dbl>
print(colnames(base.paises))
##  [1] "paises"        "abrev"         "desempleo"     "electricidad" 
##  [5] "migracion"     "estadoderecho" "patentes"      "pobmuj"       
##  [9] "gastosalud"    "inflacion"     "gastoeduc"     "poblacionurb" 
## [13] "densidadpob"
#sacar columnas que si importan

Modelo General

tasa.desempleo <- lm(desempleo ~ electricidad + migracion + estadoderecho + patentes + pobmuj + gastosalud + inflacion + gastoeduc + poblacionurb + densidadpob, data = base.paises)

summary(tasa.desempleo)
## 
## Call:
## lm(formula = desempleo ~ electricidad + migracion + estadoderecho + 
##     patentes + pobmuj + gastosalud + inflacion + gastoeduc + 
##     poblacionurb + densidadpob, data = base.paises)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.0455 -1.7550  0.0400  0.8226  9.1307 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -5.218e+03  1.798e+03  -2.903 0.008019 ** 
## electricidad   5.262e+01  1.802e+01   2.920 0.007699 ** 
## migracion      8.714e-07  7.362e-06   0.118 0.906803    
## estadoderecho -2.100e-01  4.957e-02  -4.236 0.000313 ***
## patentes      -1.668e-05  1.333e-05  -1.252 0.223196    
## pobmuj        -4.948e-01  6.065e-01  -0.816 0.423005    
## gastosalud     2.672e-01  4.142e-01   0.645 0.525144    
## inflacion     -5.132e-01  2.957e-01  -1.736 0.095965 .  
## gastoeduc     -6.337e-01  5.915e-01  -1.071 0.295184    
## poblacionurb   1.361e-01  6.255e-02   2.177 0.040031 *  
## densidadpob   -1.395e-02  4.697e-03  -2.970 0.006863 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.937 on 23 degrees of freedom
## Multiple R-squared:  0.5978, Adjusted R-squared:  0.4229 
## F-statistic: 3.418 on 10 and 23 DF,  p-value: 0.007136

VIF modelo general

vifvalues.mundo <- car::vif(tasa.desempleo)
print(vifvalues.mundo)
##  electricidad     migracion estadoderecho      patentes        pobmuj 
##      1.566423      3.794804      2.659154      2.387117      1.651250 
##    gastosalud     inflacion     gastoeduc  poblacionurb   densidadpob 
##      4.590353      1.795675      2.239843      1.781732      1.406160

Ninguno presenta VIF.

BG/BP TEST

library(lmtest)
bgtest(tasa.desempleo)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  tasa.desempleo
## LM test = 0.058208, df = 1, p-value = 0.8094
bptest(tasa.desempleo)
## 
##  studentized Breusch-Pagan test
## 
## data:  tasa.desempleo
## BP = 5.7377, df = 10, p-value = 0.8368

Dado que son valores p> 0.05 se puede decir que no tenemos problemas de autocorrelación ni heterocedasticidad. Por ende, no se debe hacer un test de White para corregirlo. No obstante, se hará así mismo la prueba de Durbin Watson para descartar cualquier problema.

DW del modelo general

library(lmtest)
dwtest(tasa.desempleo)
## 
##  Durbin-Watson test
## 
## data:  tasa.desempleo
## DW = 1.9966, p-value = 0.4126
## alternative hypothesis: true autocorrelation is greater than 0

Explicación de Resultados

Predictores

Los predictores que salieron significativos fueron el intercepto, electricidad, estado de derecho, inflación (a un 90% de confianza), población urbana y densidad poblacional.

Coeficientes

De entre los predictores significativos, podemos ver que, el coeficiente para la variable electricidad es 52.62. Esto sugiere que, manteniendo todas las demás variables constantes, un aumento de una unidad en la electricidad se asocia con un aumento de aproximadamente 52.62 en la tasa de desempleo.

Estado de derecho, densidad poblacional e inflación tienen una relación negativa. Lo cual hace sentido, a mayor estado de derecho, menor la tasa de desempleo. Con los otros dos, hay que tener mayor cautela al hacer interpretaciones, debemos ver qué otros factores demograficos y económicos pueden explicar esa relación inversa.

R^2 y ajustada

R^2 indica cuánta varianza en la variable dependiente es explicada por el modelo. En este caso, es 0.5978, lo que significa que aproximadamente el 59.78% de la variabilidad en la tasa de desempleo es explicada por las variables independientes en el modelo.

El R^2 ajustado tiene en cuenta el número de predictores en el modelo, ajustándose por el número de términos en el modelo. En este caso, es 0.4229, lo que indica cuánta varianza es explicada ajustando por el número de predictores.

Prueba F

En este caso, el valor F es 3.418, y el p-valor asociado es 0.0071, lo que sugiere que al menos una de las variables independientes en el modelo es significativa. Nuestro modelo es válido, no obstante lo trataremos de mejorar:

Modelo Individual

Construcción del modelo

library(leaps)
subsets <- regsubsets(desempleo ~ electricidad + migracion + estadoderecho +  patentes + pobmuj + gastosalud  + inflacion + gastoeduc + poblacionurb + densidadpob, data = base.paises)
summary(subsets)
## Subset selection object
## Call: regsubsets.formula(desempleo ~ electricidad + migracion + estadoderecho + 
##     patentes + pobmuj + gastosalud + inflacion + gastoeduc + 
##     poblacionurb + densidadpob, data = base.paises)
## 10 Variables  (and intercept)
##               Forced in Forced out
## electricidad      FALSE      FALSE
## migracion         FALSE      FALSE
## estadoderecho     FALSE      FALSE
## patentes          FALSE      FALSE
## pobmuj            FALSE      FALSE
## gastosalud        FALSE      FALSE
## inflacion         FALSE      FALSE
## gastoeduc         FALSE      FALSE
## poblacionurb      FALSE      FALSE
## densidadpob       FALSE      FALSE
## 1 subsets of each size up to 8
## Selection Algorithm: exhaustive
##          electricidad migracion estadoderecho patentes pobmuj gastosalud
## 1  ( 1 ) " "          " "       "*"           " "      " "    " "       
## 2  ( 1 ) "*"          " "       "*"           " "      " "    " "       
## 3  ( 1 ) "*"          " "       "*"           " "      " "    " "       
## 4  ( 1 ) "*"          " "       "*"           " "      " "    " "       
## 5  ( 1 ) "*"          " "       "*"           " "      " "    " "       
## 6  ( 1 ) "*"          " "       "*"           " "      "*"    " "       
## 7  ( 1 ) "*"          "*"       "*"           "*"      " "    " "       
## 8  ( 1 ) "*"          " "       "*"           "*"      " "    "*"       
##          inflacion gastoeduc poblacionurb densidadpob
## 1  ( 1 ) " "       " "       " "          " "        
## 2  ( 1 ) " "       " "       " "          " "        
## 3  ( 1 ) " "       " "       " "          "*"        
## 4  ( 1 ) " "       " "       "*"          "*"        
## 5  ( 1 ) "*"       " "       "*"          "*"        
## 6  ( 1 ) "*"       " "       "*"          "*"        
## 7  ( 1 ) "*"       " "       "*"          "*"        
## 8  ( 1 ) "*"       "*"       "*"          "*"
mejor.modelo <- lm(desempleo ~ electricidad + estadoderecho  + patentes + pobmuj+ gastosalud+ inflacion + gastoeduc+ poblacionurb + densidadpob, data = base.paises)
summary(mejor.modelo)
## 
## Call:
## lm(formula = desempleo ~ electricidad + estadoderecho + patentes + 
##     pobmuj + gastosalud + inflacion + gastoeduc + poblacionurb + 
##     densidadpob, data = base.paises)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.0332 -1.7176 -0.0203  0.8507  9.1391 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -5.246e+03  1.746e+03  -3.005 0.006133 ** 
## electricidad   5.290e+01  1.749e+01   3.024 0.005863 ** 
## estadoderecho -2.119e-01  4.582e-02  -4.625 0.000108 ***
## patentes      -1.616e-05  1.231e-05  -1.313 0.201599    
## pobmuj        -5.047e-01  5.883e-01  -0.858 0.399421    
## gastosalud     2.993e-01  3.067e-01   0.976 0.338886    
## inflacion     -5.159e-01  2.887e-01  -1.787 0.086545 .  
## gastoeduc     -6.493e-01  5.646e-01  -1.150 0.261421    
## poblacionurb   1.371e-01  6.078e-02   2.255 0.033508 *  
## densidadpob   -1.409e-02  4.452e-03  -3.164 0.004188 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.876 on 24 degrees of freedom
## Multiple R-squared:  0.5975, Adjusted R-squared:  0.4466 
## F-statistic: 3.959 on 9 and 24 DF,  p-value: 0.003343
mejor.modelo1 <- lm(desempleo ~ electricidad + migracion+ estadoderecho  + patentes + inflacion + poblacionurb + densidadpob, data = base.paises)
summary(mejor.modelo1)
## 
## Call:
## lm(formula = desempleo ~ electricidad + migracion + estadoderecho + 
##     patentes + inflacion + poblacionurb + densidadpob, data = base.paises)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -4.275 -1.807  0.025  1.102  8.760 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -5.247e+03  1.734e+03  -3.025  0.00553 ** 
## electricidad   5.265e+01  1.736e+01   3.033  0.00543 ** 
## migracion      4.381e-06  5.278e-06   0.830  0.41411    
## estadoderecho -2.040e-01  4.274e-02  -4.774 6.11e-05 ***
## patentes      -1.298e-05  1.174e-05  -1.106  0.27865    
## inflacion     -4.774e-01  2.655e-01  -1.798  0.08372 .  
## poblacionurb   1.252e-01  5.178e-02   2.418  0.02290 *  
## densidadpob   -1.237e-02  4.340e-03  -2.851  0.00843 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.853 on 26 degrees of freedom
## Multiple R-squared:  0.5708, Adjusted R-squared:  0.4552 
## F-statistic: 4.939 on 7 and 26 DF,  p-value: 0.001186
mejor.modelo2 <- lm(desempleo ~ electricidad + estadoderecho  + pobmuj+ inflacion + poblacionurb + densidadpob, data = base.paises)
summary(mejor.modelo2)
## 
## Call:
## lm(formula = desempleo ~ electricidad + estadoderecho + pobmuj + 
##     inflacion + poblacionurb + densidadpob, data = base.paises)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.8125 -1.9743 -0.1958  1.4359  8.2546 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -5.537e+03  1.698e+03  -3.261  0.00300 ** 
## electricidad   5.581e+01  1.702e+01   3.280  0.00286 ** 
## estadoderecho -2.179e-01  4.320e-02  -5.044 2.71e-05 ***
## pobmuj        -4.592e-01  5.428e-01  -0.846  0.40501    
## inflacion     -5.900e-01  2.678e-01  -2.203  0.03633 *  
## poblacionurb   1.090e-01  5.506e-02   1.979  0.05807 .  
## densidadpob   -1.348e-02  4.116e-03  -3.274  0.00291 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.829 on 27 degrees of freedom
## Multiple R-squared:  0.562,  Adjusted R-squared:  0.4647 
## F-statistic: 5.774 on 6 and 27 DF,  p-value: 0.0005706
mejor.modelo3 <- lm(desempleo ~ electricidad + estadoderecho  +  inflacion + poblacionurb + densidadpob, data = base.paises)
summary(mejor.modelo3)
## 
## Call:
## lm(formula = desempleo ~ electricidad + estadoderecho + inflacion + 
##     poblacionurb + densidadpob, data = base.paises)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.2883 -1.8008 -0.4386  1.2558  8.6872 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -5.449e+03  1.686e+03  -3.231  0.00314 ** 
## electricidad   5.467e+01  1.688e+01   3.239  0.00308 ** 
## estadoderecho -2.094e-01  4.181e-02  -5.009  2.7e-05 ***
## inflacion     -5.244e-01  2.551e-01  -2.056  0.04923 *  
## poblacionurb   1.284e-01  4.980e-02   2.578  0.01549 *  
## densidadpob   -1.362e-02  4.092e-03  -3.328  0.00246 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.814 on 28 degrees of freedom
## Multiple R-squared:  0.5504, Adjusted R-squared:  0.4701 
## F-statistic: 6.856 on 5 and 28 DF,  p-value: 0.0002732

VIF modelo individual

vif(mejor.modelo3)
##  electricidad estadoderecho     inflacion  poblacionurb   densidadpob 
##      1.496296      2.059830      1.455499      1.229840      1.161995

BP/ BG Test

bptest(mejor.modelo3)
## 
##  studentized Breusch-Pagan test
## 
## data:  mejor.modelo3
## BP = 2.5933, df = 5, p-value = 0.7624
bgtest(mejor.modelo3)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  mejor.modelo3
## LM test = 0.17413, df = 1, p-value = 0.6765

bpDW modelo individual

dwtest(mejor.modelo3)
## 
##  Durbin-Watson test
## 
## data:  mejor.modelo3
## DW = 2.0653, p-value = 0.5391
## alternative hypothesis: true autocorrelation is greater than 0