Integrantes

● María José Marrou Rivera (20171088)

● Daniel Andre Silva Philipps (20207549)

● Edgar Luna Salazar (20197127)

● Jose Navarro Nateros (20202279)

Abrir base de datos

library(rio)
data <- import("Libro1 (1).xlsx")
str(data)
## 'data.frame':    238 obs. of  14 variables:
##  $ Paises  : chr  "Afghanistan" "Albania" "Algeria" "American Samoa" ...
##  $ Mort    : num  103.06 10.54 19.22 9.87 3.39 ...
##  $ GastEdu : num  2.9 3.1 7 NA 2.9 2.4 4 3.8 NA 5 ...
##  $ Car     : num  34903 3945 104 241 320 ...
##  $ Dsnt    : num  19.1 1.5 NA NA NA 19 NA NA 2.7 2 ...
##  $ Men5bp  : num  19.1 1.5 2.7 NA NA 19 NA NA NA 1.7 ...
##  $ Expvidnc: num  54 79.7 78.3 75.6 83.6 ...
##  $ Emco2   : num  7.89e+06 3.79e+06 1.52e+08 3.55e+05 NA ...
##  $ atenpre : num  65 88 95 NA NA 82 NA 100 NA 95 ...
##  $ sobrep  : num  4.1 16.4 12.8 NA NA 3.4 NA NA 12.8 12.4 ...
##  $ polineq : num  2.7 3.5 NA NA NA 2.7 NA NA NA NA ...
##  $ Ginico  : num  29.4 30.8 27.6 NA NA 51.3 NA NA NA 42.3 ...
##  $ tasdesm : num  13.3 11.8 12.7 29.8 3.7 ...
##  $ indsan  : num  50.5 99.3 86 NA 100 ...

Correlación

library(PerformanceAnalytics)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
chart.Correlation(as.matrix(data[,c(2:14)]),histogram = TRUE,pch=13,na.rm = TRUE)

names(data)
##  [1] "Paises"   "Mort"     "GastEdu"  "Car"      "Dsnt"     "Men5bp"  
##  [7] "Expvidnc" "Emco2"    "atenpre"  "sobrep"   "polineq"  "Ginico"  
## [13] "tasdesm"  "indsan"

Para la elaboración de los modelos de regresión, se consideran solamente las variables independientes que tengan una correlación superior a |0.50| con respecto a la variable dependiente “Mortalidad infantil” (Mort). En el primer modelo se utilizan dos variables independientes: “Índice de saneamiento” (indsan) y “Expectativa de vida al nacer” (Expvindc), ya que son las que tienen una mayor correlación con la mortalidad infantil (-0.91 y 0.81, respectivamente). En el segundo modelo, se agrega la variable “Desnutrición” (Dsnt), que es la tercera variable con mayor correlación con la variable dependiente (0.64). Se decide no utilizar la variable “Niños menores de 5 años con bajo peso” (men5bp) debido a su gran similitud con la variable “Desnutrición” (Dsnt), lo que podría generar problemas de multicolinealidad. En el tercer modelo, se agrega la variable “Atención prenatal” (atenpre), la cual tiene una correlación con la variable dependiente de -0.63. Finalmente, se considera “Políticas de inclusión y equidad social” (polineq) como posible variable explicativa en el cuarto modelo.

A. Regresión lineal o gaussiana

Modelo 1

data <- data[, c(1, 2, 5, 7, 9, 11, 14, ncol(data))]
data$indsan.1=NULL
data = na.omit(data)
modelo1 <- lm(Mort~indsan+ Expvidnc, data)
summary(modelo1)
## 
## Call:
## lm(formula = Mort ~ indsan + Expvidnc, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -23.1107  -3.0301  -0.2568   3.1118  24.4684 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 234.39478   11.96852   19.58   <2e-16 ***
## indsan       -0.01087    0.04180   -0.26    0.796    
## Expvidnc     -2.87242    0.19406  -14.80   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.494 on 71 degrees of freedom
## Multiple R-squared:  0.8543, Adjusted R-squared:  0.8502 
## F-statistic: 208.1 on 2 and 71 DF,  p-value: < 2.2e-16

Modelo 2

modelo2<-lm(Mort~indsan+ Expvidnc+ Dsnt, data)
summary(modelo2)
## 
## Call:
## lm(formula = Mort ~ indsan + Expvidnc + Dsnt, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -20.9224  -3.6890  -0.7893   2.7730  24.7044 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 222.90231   12.41078  17.960   <2e-16 ***
## indsan        0.01157    0.04128   0.280   0.7801    
## Expvidnc     -2.77959    0.19073 -14.573   <2e-16 ***
## Dsnt          0.26733    0.10612   2.519   0.0141 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.227 on 70 degrees of freedom
## Multiple R-squared:  0.8664, Adjusted R-squared:  0.8607 
## F-statistic: 151.3 on 3 and 70 DF,  p-value: < 2.2e-16

Modelo 3

modelo3<-lm(Mort~indsan+ Expvidnc+ Dsnt+ atenpre, data)
summary(modelo3)
## 
## Call:
## lm(formula = Mort ~ indsan + Expvidnc + Dsnt + atenpre, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -19.4830  -3.3833  -0.5971   3.3112  22.8955 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 231.976385  12.136180  19.114  < 2e-16 ***
## indsan        0.004731   0.039164   0.121  0.90420    
## Expvidnc     -2.573088   0.193273 -13.313  < 2e-16 ***
## Dsnt          0.129784   0.110440   1.175  0.24397    
## atenpre      -0.237758   0.079108  -3.005  0.00369 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.845 on 69 degrees of freedom
## Multiple R-squared:  0.8819, Adjusted R-squared:  0.875 
## F-statistic: 128.8 on 4 and 69 DF,  p-value: < 2.2e-16

Modelo 4

modelo4<-lm(Mort~indsan+ Expvidnc+ Dsnt+ atenpre+ polineq, data)
summary(modelo4)
## 
## Call:
## lm(formula = Mort ~ indsan + Expvidnc + Dsnt + atenpre + polineq, 
##     data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -19.312  -3.361  -0.596   3.258  22.830 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 232.729337  12.543854  18.553   <2e-16 ***
## indsan        0.006181   0.039807   0.155   0.8771    
## Expvidnc     -2.569226   0.195131 -13.167   <2e-16 ***
## Dsnt          0.125476   0.112370   1.117   0.2681    
## atenpre      -0.228634   0.086751  -2.636   0.0104 *  
## polineq      -0.548173   2.065617  -0.265   0.7915    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.892 on 68 degrees of freedom
## Multiple R-squared:  0.882,  Adjusted R-squared:  0.8733 
## F-statistic: 101.6 on 5 and 68 DF,  p-value: < 2.2e-16

Comparamos modelos

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
stargazer(modelo1,modelo2,modelo3,modelo4, type ="text")
## 
## ===================================================================================================================
##                                                           Dependent variable:                                      
##                     -----------------------------------------------------------------------------------------------
##                                                                  Mort                                              
##                               (1)                     (2)                     (3)                     (4)          
## -------------------------------------------------------------------------------------------------------------------
## indsan                      -0.011                   0.012                   0.005                   0.006         
##                             (0.042)                 (0.041)                 (0.039)                 (0.040)        
##                                                                                                                    
## Expvidnc                   -2.872***               -2.780***               -2.573***               -2.569***       
##                             (0.194)                 (0.191)                 (0.193)                 (0.195)        
##                                                                                                                    
## Dsnt                                                0.267**                  0.130                   0.125         
##                                                     (0.106)                 (0.110)                 (0.112)        
##                                                                                                                    
## atenpre                                                                    -0.238***               -0.229**        
##                                                                             (0.079)                 (0.087)        
##                                                                                                                    
## polineq                                                                                             -0.548         
##                                                                                                     (2.066)        
##                                                                                                                    
## Constant                  234.395***              222.902***              231.976***              232.729***       
##                            (11.969)                (12.411)                (12.136)                (12.544)        
##                                                                                                                    
## -------------------------------------------------------------------------------------------------------------------
## Observations                  74                      74                      74                      74           
## R2                           0.854                   0.866                   0.882                   0.882         
## Adjusted R2                  0.850                   0.861                   0.875                   0.873         
## Residual Std. Error     7.494 (df = 71)         7.227 (df = 70)         6.845 (df = 69)         6.892 (df = 68)    
## F Statistic         208.141*** (df = 2; 71) 151.324*** (df = 3; 70) 128.776*** (df = 4; 69) 101.647*** (df = 5; 68)
## ===================================================================================================================
## Note:                                                                                   *p<0.1; **p<0.05; ***p<0.01
library(modelsummary)
models = list(modelo1,modelo2,modelo3,modelo4)
modelsummary(models, output = "kableExtra")
 (1)   (2)   (3)   (4)
(Intercept) 234.395 222.902 231.976 232.729
(11.969) (12.411) (12.136) (12.544)
indsan −0.011 0.012 0.005 0.006
(0.042) (0.041) (0.039) (0.040)
Expvidnc −2.872 −2.780 −2.573 −2.569
(0.194) (0.191) (0.193) (0.195)
Dsnt 0.267 0.130 0.125
(0.106) (0.110) (0.112)
atenpre −0.238 −0.229
(0.079) (0.087)
polineq −0.548
(2.066)
Num.Obs. 74 74 74 74
R2 0.854 0.866 0.882 0.882
R2 Adj. 0.850 0.861 0.875 0.873
AIC 513.0 508.6 501.5 503.4
BIC 522.3 520.1 515.3 519.6
Log.Lik. −252.517 −249.306 −244.754 −244.716
F 208.141 151.324 128.776 101.647
RMSE 7.34 7.03 6.61 6.61
library(dplyr)
## 
## ######################### Warning from 'xts' package ##########################
## #                                                                             #
## # The dplyr lag() function breaks how base R's lag() function is supposed to  #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or       #
## # source() into this session won't work correctly.                            #
## #                                                                             #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop           #
## # dplyr from breaking base R's lag() function.                                #
## #                                                                             #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning.  #
## #                                                                             #
## ###############################################################################
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:xts':
## 
##     first, last
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(magrittr)
library(knitr)
tanova=anova(modelo1,modelo2,modelo3,modelo4)
tanova
## Analysis of Variance Table
## 
## Model 1: Mort ~ indsan + Expvidnc
## Model 2: Mort ~ indsan + Expvidnc + Dsnt
## Model 3: Mort ~ indsan + Expvidnc + Dsnt + atenpre
## Model 4: Mort ~ indsan + Expvidnc + Dsnt + atenpre + polineq
##   Res.Df    RSS Df Sum of Sq      F   Pr(>F)   
## 1     71 3987.7                                
## 2     70 3656.3  1    331.47 6.9790 0.010225 * 
## 3     69 3233.0  1    423.24 8.9112 0.003936 **
## 4     68 3229.7  1      3.34 0.0704 0.791520   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
kable(tanova,
      caption = "Tabla ANOVA para comparar modelos")%>%kableExtra::kable_styling(full_width = FALSE)
Tabla ANOVA para comparar modelos
Res.Df RSS Df Sum of Sq F Pr(>F)
71 3987.736 NA NA NA NA
70 3656.267 1 331.469263 6.9789885 0.0102246
69 3233.026 1 423.240459 8.9112042 0.0039361
68 3229.681 1 3.344924 0.0704264 0.7915198

La comparación de modelos usando la tabla de análisis de varianza (anova) propone como hipótesis nula que los modelos no difieren, es decir, que no se ha reducido el error al pasar de un modelo a otro. Como la comparación es significativa para los modelos 2 y 3 (sus Pr(>F) son de 0.0102246 y 0.0039361, respectivamente), se rechaza la igualdad de modelos. Sin embargo, se debe utilizar el modelo 3, que contiene las variables “Índice de Saneamiento” (indsan), “Expectativa de Vida al Nacer” (Expvidnc), “Desnutrición” (Dsnt) y “Atención temprana” (atenpre), debido a que es la regresión lineal multivariada que evidencia una mayor significancia en la mortalidad infantil (su R2 ajustado es de 0.875), en contraste con el modelo 2, cuyo R2 ajustado es de 0.861. Es imperativo mencionar que tras el ingreso de “Atención temprana”, la variable “Expectativa de Vida al Nacer” mantuvo su significancia en 0.001; sin embargo, “Desnutrición” dejó de ser significativa. De esta forma, 2 de las 4 variables independientes no tienen un impacto significativo en la variable dependiente, ya que cuentan con un p-valor mayor a 0.05.

Coeficientes estandarizados:

modelo3b=formula(scale(Mort)~scale(indsan)+scale(Expvidnc)+scale(Dsnt)+scale(atenpre))
reg3b=lm(modelo3b,data)
model3b=list(reg3b)
modelsummary(model3b, title = "Regresion: modelo con \ncoeficientes estandarizados",
             stars = TRUE,
             output = "kableExtra")
Regresion: modelo con coeficientes estandarizados
 (1)
(Intercept) 0.000
(0.041)
scale(indsan) 0.007
(0.058)
scale(Expvidnc) −0.818***
(0.061)
scale(Dsnt) 0.060
(0.051)
scale(atenpre) −0.161**
(0.054)
Num.Obs. 74
R2 0.882
R2 Adj. 0.875
AIC 62.9
BIC 76.8
Log.Lik. −25.467
F 128.776
RMSE 0.34
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001

Abordando la interpretación del modelo 3 partimos de que este al tener un R ajustado muy cercano al uno y ser preciso para explicar la relación entre la variable dependiente y las variables independientes nos permite formular la siguiente hipótesis: “La mortalidad infantil es afectada por el índice de saneamiento, la expectativa de vida, la desnutrición infantil y la atención prenatal dentro de un país”.

Al comprobar esta hipótesis obtenemos que (1) índice de saneamiento (indsan) y desnutrición infantil (Dsnt) tienen un efecto no significativo, (2) tanto expectativa de vida al nacer (Expvidnc) como atención médica prenatal (atenpre) tienen un efecto significativo al 0.001 y al 0.01, (3) los coeficientes calculados de estas variables tendrán un efecto inverso al ser negativos (presentan una magnitud del efecto de -2.573 y -0.237 respectivamente), hecho que ayuda a comprender en cuánto varía Mort cuando ambas variables aumentan en una unidad. (4) Expectativa de vida al nacer (Expvidnc) es la que tiene más efecto en el modelo.

Finalmente, luego de analizar estos datos podemos proponer la siguiente ecuación:

Mort = 231.976385 + 0.004731 . indsan + -2.573088 . Expvidnc + 0.129784 . Dsnt + -0.237758 . atenpre + ϵ

Explicación politológica:

La expectativa de vida al nacer tiene un claro impacto en la mortalidad infantil según estudios que corroboran la existencia de una relación inversa, donde una reducción de la mortalidad infantil en un país conlleva un aumento en la expectativa de vida del mismo (Wang et al, 2014). Esto entendido según que las muertes de niños con pocos años de vida tienen un impacto severo en el promedio de la expectativa de vida de la población, siendo considerados casos extremos. Entonces, son necesarias políticas públicas que aseguren el correcto desarrollo y crecimiento de los niños en sus primeros años de edad.

Similar sucede con la atención prenatal, ya que un correcto seguimiento y asesoramiento de las madres en proceso de gestación implica, naturalmente, el correcto parto de un bebé sano y un peso adecuado; y la falta del mismo implicaría lo contrario, una mayor incidencia de nacimientos de bebés no sanos y con peso por debajo de la media, derivando posteriormente en desnutrición. En ese sentido, las políticas que buscan mejorar la atención prenatal deben centrarse en garantizar el acceso a la atención médica de calidad, la educación sobre la salud y la nutrición, el monitoreo regular de la salud de la madre y el feto y el fortalecimiento de la atención postnatal. La implementación de estas políticas puede ayudar a reducir la mortalidad infantil y mejorar la salud de las madres y los recién nacidos.

De forma adicional, y a modo de comprender mejor la naturaleza de nuestro modelo, hemos encontrado 2 curiosidades en las variables que no aparecen como relevantes. Así, de buenas a primeras, podemos notar que el Índice de Saneamiento nos da un valor positivo, lo cual expresa una relación proporcional con respecto a nuestra dependiente, la mortalidad infantil. En otras palabras, por cada punto que aumente la mortalidad infantil, el índice de saneamiento hace lo propio en 0.008. Esto resulta contradictorio con nuestra teoría inicial con respecto a esta variable, puesto que un aumento en los servicios básicos de sanidad debería de disminuir la mortalidad infantil, no aumentarla.

La explicación que encontramos a este fenómeno recae en que los países restantes tras extraer los valores perdidos son unos que cuentan con un índice de saneamiento particularmente bajo, con una media de 52 (cuando originalmente era de 76). Sumado a ello, tenemos el hecho de que un aumento en el índice de saneamiento no significa per se que sean de calidad, lo que puede terminar generando un aumento en la mortalidad infantil. Ejemplo de esto lo tenemos en nuestro propio país, donde el actual brote de dengue en diversas regiones se explica, entre otras razones, según los pobres sistemas de agua y desagüe con el que se cuentan.

En cuanto a la desnutrición, su poca relevancia en el modelo se explica porque la expectativa de vida y la atención prenatal terminan englobando a esta variable. Esto debido a que un aumento en la expectativa de vida implica, a su vez, una disminución en la desnutrición infantil, ya que esta tiene una relación directa con la mortalidad infantil, teniendo así la misma relación con la expectativa de vida.

Diagnósticos de la regresión

1. Linealidad

plot(modelo3,1) #Se espera que la línea roja tienda a la horizontal

O también:

mean(modelo3$residuals) # Se espera que el promedio de los residuos sea cercano a 0
## [1] -1.110223e-16

La anterior función se utiliza para calcular el promedio de los residuos del modelo de regresión.Un valor de -1.437242e-16 significa que el promedio de los residuos es prácticamente cero, lo que sugiere que el modelo ajusta bien los datos.

2. Homocedasticidad

plot(modelo3,3) # Se espera que la línea roja debe tender a horizontal.

library(lmtest)
bptest(modelo3) #H0 = Modelo homocedástico, ojo aquí buscamos que sea mayor a 0.05 para cumplir con el requisito
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo3
## BP = 7.8965, df = 4, p-value = 0.09545

La prueba de Breusch-Pagan se utiliza para evaluar la presencia de heterocedasticidad en un modelo de regresión. En este caso, un valor p de 0.09545 sugiere que no hay suficiente evidencia para rechazar la hipótesis nula de ausencia de heterocedasticidad en el modelo al nivel de significancia del 5%. Este resultado, junto con la evaluación visual de los residuos, sugiere que es probable que el modelo tenga homocedasticidad. La homocedasticidad es positiva porque los coeficientes de regresión estimados son confiables y precisos, y las inferencias estadísticas son válidas.

3. Normalidad de residuos

plot(modelo3,2) # En este caso la expectativa es que los puntos se acerquen lo más posible a la línea oblicua del gráfico que representa una distribución normal

shapiro.test(modelo3$residuals) #H0= Hay normalidad
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo3$residuals
## W = 0.95007, p-value = 0.005419

La prueba de Shapiro-Wilk se utiliza para evaluar la normalidad de los datos en una muestra. El valor p de 0.005419 obtenido en la prueba de Shapiro-Wilk sugiere que hay suficiente evidencia para rechazar la hipótesis nula de normalidad en los datos al nivel de significancia del 5%. En otras palabras, los datos no se ajustan a una distribución normal. Esto puede tener implicaciones en la validez de las inferencias estadísticas y en la elección de los métodos de análisis.

4. No multicolinealidad

library(DescTools)
## 
## Attaching package: 'DescTools'
## The following objects are masked from 'package:modelsummary':
## 
##     Format, Mean, Median, N, SD, Var
VIF(modelo3) #>5 es problemático
##   indsan Expvidnc     Dsnt  atenpre 
## 1.952283 2.205835 1.535847 1.682442

VIF (Variance Inflation Factor) es una medida utilizada para evaluar la presencia de multicolinealidad en un modelo de regresión. Como en este caso, los valores del VIF son menores a 5 pero mayores que 1, hay cierto grado de multicolinealidad entre las variables predictoras, aunque no es preocupante. Es decir, la influencia de la multicolinealidad en los coeficientes de regresión es moderada, pero no lo suficiente como para afectar significativamente la precisión de las estimaciones.

5. Valores influyentes

plot(modelo2,5) #miramos valores fuera de las lineas punteadas

checModelo3=as.data.frame(influence.measures(modelo3)$is.inf)
checModelo3[checModelo3$cook.d & checModelo3$hat,] #visualizamos valores 
## [1] dfb.1_   dfb.inds dfb.Expv dfb.Dsnt dfb.atnp dffit    cov.r    cook.d  
## [9] hat     
## <0 rows> (or 0-length row.names)

El código anterior sirve para revisar si hay observaciones atípicas en el modelo de regresión, además de buscar las observaciones que pueden tener una influencia significativa en los resultados del modelo. Como el resultado es “0 rows”, significa que no hay observaciones atípicas que puedan afectar mucho los resultados del modelo. Esto es bueno porque indica que el modelo es robusto y las conclusiones obtenidas son más confiables.

Conclusiones

Se concluye así que el modelo escogido presenta robustez, puesto que explica con mayor precisión la Mortalidad Infantil en el mundo a diferencia de los otros modelos, con un R ajustado de 0.87; además, confirma parcialmente la hipótesis planteada: denota que la variable dependiente se ve afectada por la Expectativa de Vida y la Atención Prenatal, siendo la primera la de mayor impacto.

En cuanto al diagnóstico de la regresión, los supuestos de linealidad, homocedasticidad y no multicolinealidad son fundamentales en el modelo de regresión lineal, ya que garantizan que los resultados sean confiables y precisos. Dado que se cumplieron estos supuestos, además de confirmar la inexistencia de valores influyentes, se puede confiar en que el modelo es adecuado para explicar la relación entre las variables predictoras y la variable de respuesta.