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)
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.
Leemos la base de datos:
datos_mex <- read_excel("~/Downloads/Datos_MÉXICO_EvidenciaECO.xlsx")
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)
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
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
# 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:
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
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:
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.
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:
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
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.
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.
#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
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
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.
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.
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
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.
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 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.
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:
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(mejor.modelo3)
## electricidad estadoderecho inflacion poblacionurb densidadpob
## 1.496296 2.059830 1.455499 1.229840 1.161995
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
dwtest(mejor.modelo3)
##
## Durbin-Watson test
##
## data: mejor.modelo3
## DW = 2.0653, p-value = 0.5391
## alternative hypothesis: true autocorrelation is greater than 0