Práctico 05. Estimación de valores predichos

Métodos estadísticos para Ciencias Sociales III

Fecha de publicación

22 de septiembre de 2025

Presentación

La siguiente práctica tiene el objetivo de repasar en la interpretación de coeficientes de correlación y la construcción de escalas, así como también en la interpretación de coeficientes de regresión lineal. Para ello, utilizaremos la base de datos de la tercera ola del Estudio Longitudinal Social del Chile 2018 con el objetivo de analizar los determinantes de la Participación Ciudadana.

La versión original de este ejercicio proviene del curso de Estadística multivariada versión 2022.

Librerías

pacman::p_load(dplyr, 
               car, 
               summarytools, 
               sjPlot, 
               texreg, 
               corrplot, 
               ggplot2, 
               sjlabelled, 
               ggeffects)

Datos

El Estudio Longitudinal Social del Chile ELSOC, único en Chile y América Latina, consiste en encuestar a casi 3.000 chilenos, anualmente, a lo largo de una década. ELSOC ha sido diseñado para evaluar la manera cómo piensan, sienten y se comportan los chilenos en torno a un conjunto de temas referidos al conflicto y la cohesión social en Chile. La población objetivo son hombres y mujeres entre 15 y 75 años de edad con un alcance nacional, donde se obtuvo una muestra final de 3748 casos en el año 2018.

#Cargamos la base de datos desde internet
load(url("https://github.com/Kevin-carrasco/metod1-MCS/raw/main/files/data/elsoc2.RData"))

O descargamos de acá y cargamos de manera local.

Explorar datos

A partir de la siguiente tabla se obtienen estadísticos descriptivos que luego serán relevantes para realizar las transformaciones y análisis posteriores.

view_df(elsoc,max.len = 50)
Data frame: elsoc
ID Name Label Values Value Labels
1 sexo Sexo entrevistado 0
1
Hombre
Mujer
2 edad Edad entrevistado range: 18-90
3 educ Nivel educacional 1
2
3
4
5
Primaria incompleta menos
Primaria y secundaria baja
Secundaria alta
Terciaria ciclo corto
Terciaria y Postgrado
4 pospol Autoubicacion escala izquierda-derecha 1
2
3
4
Derecha
Centro
Izquierda
Indep./Ninguno
5 part01 Frecuencia: Firma carta o peticion apoyando causa 1
2
3
4
5
Nunca
Casi nunca
A veces
Frecuentemente
Muy frecuentemente
6 part02 Frecuencia: Asiste a mbackground-color:#eeeeeeha o manifestacion
pacifica
1
2
3
4
5
Nunca
Casi nunca
A veces
Frecuentemente
Muy frecuentemente
7 part03 Frecuencia: Participa en huelga 1
2
3
4
5
Nunca
Casi nunca
A veces
Frecuentemente
Muy frecuentemente
8 part04 Frecuencia: Usa redes sociales para opinar en
temas publicos
1
2
3
4
5
Nunca
Casi nunca
A veces
Frecuentemente
Muy frecuentemente
9 inghogar Ingreso total del hogar range: 30000-17000000
10 inghogar_t Ingreso total del hogar (en tramos) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Menos de $220.000 mensuales liquidos
De $220.001 a $280.000 mensuales liquidos
De $280.001 a $330.000 mensuales liquidos
De $330.001 a $380.000 mensuales liquidos
De $380.001 a $420.000 mensuales liquidos
De $420.001 a $470.000 mensuales liquidos
De $470.001 a $510.000 mensuales liquidos
De $510.001 a $560.000 mensuales liquidos
De $560.001 a $610.000 mensuales liquidos
De $610.001 a $670.000 mensuales liquidos
De $670.001 a $730.000 mensuales liquidos
De $730.001 a $800.000 mensuales liquidos
De $800.001 a $890.000 mensuales liquidos
De $890.001 a $980.000 mensuales liquidos
De $980.001 a $1.100.000 mensuales liquidos
De $1.100.001 a $1.260.000 mensuales liquidos
De $1.260.001 a $1.490.000 mensuales liquidos
De $1.490.001 a $1.850.000 mensuales liquidos
De $1.850.001 a $2.700.000 mensuales liquidos
Mas de $2.700.000 a mensuales liquidos
11 tamhogar Habitantes del hogar range: 1-14

Variable dependiente: participación política

plot_stackfrq(elsoc[,c("part01","part02","part03","part04")]) + theme(legend.position="bottom")

corrplot.mixed(cor(select(elsoc,part01,part02,part03,part04),
                   use = "complete.obs"))

elsoc$part01 <- car::recode(elsoc$part01, "1=0; 2=1; 3=2; 4=3; 5=4")
elsoc$part02 <- car::recode(elsoc$part02, "1=0; 2=1; 3=2; 4=3; 5=4")
elsoc$part03 <- car::recode(elsoc$part03, "1=0; 2=1; 3=2; 4=3; 5=4")
elsoc$part04 <- car::recode(elsoc$part04, "1=0; 2=1; 3=2; 4=3; 5=4")

elsoc <- elsoc %>% mutate(partpol=rowSums(select(., part01,part02,part03,part04)))
summary(elsoc$partpol)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  0.000   0.000   0.000   1.473   2.000  16.000       8 

Regresión lineal

veamos primero las diferencias de usar cada tipo de variable de ingreso

fit01<- lm(partpol~sexo,data=elsoc)
fit02<- lm(partpol~sexo+edad,data=elsoc)
fit03<- lm(partpol~sexo+edad+pospol,data=elsoc)

labs02 <- c("Intercepto","Sexo (mujer=1)","Edad",
            "Centro (ref. derecha)","Izquierda","Idep./Ninguno")
screenreg(list(fit01,fit02,fit03),custom.coef.names = labs02)
knitreg(list(fit01,fit02,fit03),
        custom.model.names = c("Modelo 1","Modelo 2","Modelo 3"),
        custom.coef.names = c("Intercepto",
                              "Sexo (mujer=1)",
                              "Edad",
                              "Centro (ref. derecha)",
                              "Izquierda",
                              "Indep./Ninguno"))
Statistical models
  Modelo 1 Modelo 2 Modelo 3
Intercepto 1.56*** 3.62*** 4.53***
  (0.06) (0.12) (0.13)
Sexo (mujer=1) -0.13 -0.08 -0.00
  (0.08) (0.07) (0.07)
Edad   -0.04*** -0.04***
    (0.00) (0.00)
Centro (ref. derecha)     -1.06***
      (0.10)
Izquierda     -1.11***
      (0.11)
Indep./Ninguno     -1.67***
      (0.10)
R2 0.00 0.09 0.16
Adj. R2 0.00 0.09 0.16
Num. obs. 3740 3740 3656
***p < 0.001; **p < 0.01; *p < 0.05

El Modelo 1 indica que las mujeres participan 0.13 unidades menos en comparación con los hombres, sin embargo, esta relación no es estadísticamente significativa (p>0.05).

El Modelo 2 indica que por cada unidad que aumenta la edad, la participación política disminuye en promedio 0.04 unidades, con un 99.9% de significación estadístico y manteniendo el sexo constante. Esta relación es consistente en los otros dos modelos.

En el Modelo 3 que incluye la posición política de los/as encuestados, la participación política de las personas de izquierda, centro o independiente/ninguno es menor en comparación con las personas de derecha, con una significación estadística del 99.9%, manteniendo el resto de las variables constantes.

Cálculo de valores predichos

  • Paquete ggeffects de R: últil para estimar Valores predichos a partir de modelos de regresión

  • Combinado con ggplot2, se pueden generar gráficos que muestran de modo más intuitivo la relación entre variables

ggeffects::ggpredict(fit03, terms = c("sexo")) %>%
  ggplot(aes(x=x, y=predicted)) +
  geom_bar(stat="identity", color="grey", fill="grey")+
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high), width=.1) +
  labs(title="Sexo", x = "", y = "") +
  theme_bw() +
  scale_x_continuous(name = "",
                     breaks = c(0,1),
                     labels = c("Hombre", "Mujer"))+
  scale_y_continuous(limits = c(0,16), 
                     breaks = seq(0,16, by = 1))

ggeffects::ggpredict(fit03, terms = c("pospol")) %>%
  ggplot(aes(x=x, y=predicted)) +
  geom_bar(stat="identity", color="grey", fill="grey")+
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high), width=.1) +
  labs(title="Posición política", x = "", y = "") +
  theme_bw() +
  scale_x_discrete(name = "",
                   labels = c("Derecha", "Centro", "Izquierda", "Independiente/ninguno")) +
  scale_y_continuous(limits = c(0,16), 
                     breaks = seq(0,16, by = 1))

ggeffects::ggpredict(fit03, terms="edad") %>%
  ggplot(mapping=aes(x = x, y=predicted)) +
  labs(title="Edad", x = "", y = "")+
  theme_bw() +
  geom_smooth()+
  geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = .2, fill = "black") +
  scale_x_continuous(breaks = seq(0,100, by = 10))+
  scale_y_continuous(limits = c(0,16), 
                     breaks = seq(0,16, by = 1))
`geom_smooth()` using method = 'loess' and formula = 'y ~ x'

Interacciones

fit04<- lm(partpol~sexo+edad+pospol*edad,data=elsoc)
sjPlot::tab_model(fit03,fit04, show.ci = FALSE, pred.labels=c("Intercepto",
                              "Sexo (mujer=1)",
                              "Edad",
                              "Centro (ref. derecha)",
                              "Izquierda",
                              "Indep./Ninguno",
                              "Centro * Edad",
                              "Izquierda * Edad",
                              "Indep./Ninguno * Edad"))
  partpol partpol
Predictors Estimates p Estimates p
Intercepto 4.53 <0.001 6.05 <0.001
Sexo (mujer=1) -0.00 0.949 -0.01 0.846
Edad -0.04 <0.001 -0.08 <0.001
Centro (ref. derecha) -1.06 <0.001 -2.93 <0.001
Izquierda -1.11 <0.001 -2.72 <0.001
Indep./Ninguno -1.67 <0.001 -3.95 <0.001
Centro * Edad 0.04 <0.001
Izquierda * Edad 0.04 <0.001
Indep./Ninguno * Edad 0.05 <0.001
Observations 3656 3656
R2 / R2 adjusted 0.159 / 0.158 0.175 / 0.174

En comparación con las personas de Derecha, el efecto negativo de la edad no es tan pronunciado en personas de Centro, Izquierda o independientes.

sjPlot::plot_model(fit04, type = "int") +
  theme_bw() +
  theme(legend.position = "bottom")

En el fondo lo que muestra el gráfico es que el efecto negativo de la edad es mucho mayor en personas de derecha. O el efecto negativo de la edad es más tenue en personas de centro, izquierda o independientes. U otra opción aún: los jóvenes de derecha son los que más participan.

Ejercicios

1- Estima un nuevo modelo de regresión lineal múltiple que incluya como predictores: sexo, edad, posición política y nivel educacional.

fit05<- lm(partpol~sexo+edad+pospol+educ,data=elsoc)
sjPlot::tab_model(fit05,
                  show.ci=FALSE)
  partpol
Predictors Estimates p
(Intercept) 3.09 <0.001
Sexo entrevistado 0.04 0.572
Edad entrevistado -0.03 <0.001
Autoubicacion escala
izquierda-derecha: Centro
-0.96 <0.001
Autoubicacion escala
izquierda-derecha:
Izquierda
-1.09 <0.001
Autoubicacion escala
izquierda-derecha:
Indep/Ninguno
-1.39 <0.001
Nivel educacional:
Primaria y secundaria
baja
0.02 0.867
Nivel educacional:
Secundaria alta
0.45 <0.001
Nivel educacional:
Terciaria ciclo corto
1.01 <0.001
Nivel educacional:
Terciaria y Postgrado
1.67 <0.001
Observations 3651
R2 / R2 adjusted 0.209 / 0.207

Con base en este modelo crea un gráfico de valores predichos para la variable de nivel educacional.

ggeffects::ggpredict(fit05, terms = c("educ")) %>%
  ggplot(aes(x=x, y=predicted)) +
  geom_bar(stat="identity", color="grey", fill="grey")+
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high), width=.1) +
  labs(title="Posición política", x = "", y = "") +
  theme_bw() +
  scale_x_discrete(name = "",
                   labels = c("Básica incompleta", "Básica completa", "Educación media", "Técnico profesional", "Universitaria")) +
  scale_y_continuous(limits = c(0,16), 
                     breaks = seq(0,16, by = 1))

2- Estima un nuevo modelo de regresión que incluya un término de interacción entre edad y nivel educacional

fit06<- lm(partpol~sexo+edad+pospol+educ*edad,data=elsoc)
sjPlot::tab_model(fit06,
                  show.ci=FALSE)
  partpol
Predictors Estimates p
(Intercept) 1.98 <0.001
Sexo entrevistado 0.04 0.536
Edad entrevistado -0.01 0.163
Autoubicacion escala
izquierda-derecha: Centro
-0.95 <0.001
Autoubicacion escala
izquierda-derecha:
Izquierda
-1.09 <0.001
Autoubicacion escala
izquierda-derecha:
Indep/Ninguno
-1.39 <0.001
Nivel educacional:
Primaria y secundaria
baja
0.64 0.340
Nivel educacional:
Secundaria alta
1.54 0.003
Nivel educacional:
Terciaria ciclo corto
2.08 <0.001
Nivel educacional:
Terciaria y Postgrado
3.24 <0.001
edad:educ2 -0.01 0.391
edad:educ3 -0.02 0.034
edad:educ4 -0.02 0.076
edad:educ5 -0.03 0.001
Observations 3651
R2 / R2 adjusted 0.212 / 0.209

Grafica la interacción estimada en este modelo

sjPlot::plot_model(fit06, type = "int") +
  theme_bw() +
  theme(legend.position = "bottom")

3- Interpreta los gráficos elaborados.

  • Gráfico 1: a mayor educación, más participación política

  • Gráfico 2: el efecto de la edad se mantiene negativo para todos los grupos educacionales. Los jóvenes con educación universitaria son quienes más participan.