Práctico 04. Índices y estandarización de coeficientes

Métodos estadísticos para Ciencias Sociales III

Fecha de publicación

8 de septiembre de 2025

pacman::p_load(tidyverse, #Conjunto de paquetes, sobre todo dplyr y ggplot2
               car, #Para recodificar
               haven,
               summarytools, #Para descriptivos
               sjmisc,
               kableExtra,
               psych     # para Alfa de Chronbach
               )

options(scipen = 999) # para desactivar notacion cientifica
rm(list = ls()) # para limpiar el entorno de trabajo

Presentación

Para el taller práctico de hoy utilizaremos la base de datos del Estudio Longitudinal Social de Chile, realizado por el Centro de estudios del conflicto y la cohesión social COES.

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, tiene una representación de la población nacional urbana, donde se obtuvo una muestra original de 2927 casos en el año 2016 y mantiene 1728 en 2022, además de una muestra de refresco en 2018.

Objetivo general

El objetivo de este ejercicio del práctico es revisar el proceso de construcción y validación de escalas en R.

Cargar base de datos

load(url("https://dataverse.harvard.edu/api/access/datafile/7245118")) #Cargar base de datos

Visualización de datos

dim(elsoc_long_2016_2022.2)
[1] 18035   750

Debido a la naturaleza longitudinal de ELSOC, la base de datos contiene 18035 casos (las mismas personas durante 6 años) y 750 variables (las mismas variables en 6 periodos distintos). Por lo tanto, para simplificar el proceso de análisis de este práctico trabajaremos solo con los casos y variables de quienes participaron en la primera ola (2016)

Datos y variables

Para el ejercicio de escalas, utilizaremos nuevamente la base de datos de ELSOC (que ya se enceuntra cargada), específicamente el módulo de Salud y Bienestar. De este módulo utilizaremos un concepto en particular llamado Estado de ánimo: sintomatología depresiva con los ítems:

  • Frecuencia: Poco interés o alegría
  • Frecuencia: Decaimiento, pesadez o desesperanza
  • Frecuencia: Dificultad para dormir o exceso de sueño
  • Frecuencia: Cansancio o sensación de falta de energía
  • Frecuencia: Apetito disminuido o aumentado
  • Frecuencia: Dificultad para concentrarse
  • Frecuencia: Mala opinión de sí mismo
  • Frecuencia: Enlentecimiento físico
  • Frecuencia: Pensamiento de muerte o dañarse

Esta escala tiene solamente una dimensión, por lo que no es necesario crear objetos que contengan a cada dimensión (como vimos la clase pasada).

Filtrar base de datos

Filtraremos la base de datos para quedarnos con las observaciones correspondientes solamente a la ola 1, y además seleccionaremos los ítems de interés.

data <- elsoc_long_2016_2022.2 %>% filter(ola==1) %>%  # seleccionamos solo los casos de la ola 1
  select(s11_01,s11_02,s11_03,s11_04,s11_05,s11_06,s11_07,s11_08,s11_09, # items sintomatologia depresiva
  edad=m0_edad, educacion=m01, sexo=m0_sexo) 

head(data)
  s11_01 s11_02 s11_03 s11_04 s11_05 s11_06 s11_07 s11_08 s11_09 edad educacion
1      5      3      3      5      4      3      3      3      1   64         2
2      2      2      3      2      3      4      3      4      2   60         4
3      2      2      3      3      4      5      4      1      2   26         4
4      1      3      3      1      1      2      3      5      1   51         8
5      1      1      1      2      1      3      1      2      1   69         5
6      1      1      1      1      1      1      1      1      1   62         4
  sexo
1    2
2    2
3    2
4    1
5    1
6    1
table(data$s11_01)

-999 -888    1    2    3    4    5 
   5    1 1279 1196  158  192   96 
table(data$s11_02)

-999 -888    1    2    3    4    5 
   5    1 1302 1316  135  120   48 
table(data$s11_03)

-999 -888    1    2    3    4    5 
   3    1 1336 1014  179  265  129 
table(data$s11_04)

-999 -888    1    2    3    4    5 
   1    1  887 1414  223  261  140 

Estos ítems cuentan con las mismas categorías de respuesta: (1) Nunca, (2) Algunos dias, (3) Mas de la mitad de los dias, (4) Casi todos los dias, y (5) Todos los dias. Además de los valores codificados como -888 y -999.

Recodificar

Recodificamos los valores -888 y -999 en NA y eliminamos los NAs.

data <- data %>% 
  set_na(., na = c(-888, -999)) %>% 
  na.omit()

Dejamos la categoría ‘nunca’ como 0

data$s11_01 <- car::recode(data$s11_01, "1=0; 2=1; 3=2; 4=3; 5=4")
data$s11_02 <- car::recode(data$s11_02, "1=0; 2=1; 3=2; 4=3; 5=4")
data$s11_03 <- car::recode(data$s11_03, "1=0; 2=1; 3=2; 4=3; 5=4")
data$s11_04 <- car::recode(data$s11_04, "1=0; 2=1; 3=2; 4=3; 5=4")
data$s11_05 <- car::recode(data$s11_05, "1=0; 2=1; 3=2; 4=3; 5=4")
data$s11_06 <- car::recode(data$s11_06, "1=0; 2=1; 3=2; 4=3; 5=4")
data$s11_07 <- car::recode(data$s11_07, "1=0; 2=1; 3=2; 4=3; 5=4")
data$s11_08 <- car::recode(data$s11_08, "1=0; 2=1; 3=2; 4=3; 5=4")
data$s11_09 <- car::recode(data$s11_09, "1=0; 2=1; 3=2; 4=3; 5=4")
table(data$s11_01)

   0    1    2    3    4 
1271 1181  156  186   92 
table(data$s11_02)

   0    1    2    3    4 
1294 1297  131  116   48 

Análisis

Estimar correlación

Dado que la escala tiene solamente una dimensión, estimaremos la correlación de toda la escala.

cor(data)
               s11_01      s11_02       s11_03      s11_04      s11_05
s11_01     1.00000000  0.48504817  0.373507612  0.37238515  0.35747220
s11_02     0.48504817  1.00000000  0.499207684  0.55516195  0.42270447
s11_03     0.37350761  0.49920768  1.000000000  0.55914972  0.48589865
s11_04     0.37238515  0.55516195  0.559149723  1.00000000  0.51695542
s11_05     0.35747220  0.42270447  0.485898653  0.51695542  1.00000000
s11_06     0.30479866  0.41382370  0.390184411  0.45852671  0.41189753
s11_07     0.30149647  0.42444887  0.368800199  0.40338354  0.36905674
s11_08     0.30064883  0.39355621  0.349148546  0.39395276  0.35729659
s11_09     0.23404645  0.38776342  0.302209221  0.33274694  0.30439518
edad      -0.03974520  0.07253636 -0.007570438  0.02045750 -0.05117849
educacion -0.05751038 -0.16265198 -0.066216488 -0.09496293 -0.05024246
sexo       0.10036699  0.15831204  0.145790309  0.17974363  0.13350208
               s11_06      s11_07      s11_08      s11_09         edad
s11_01     0.30479866  0.30149647  0.30064883  0.23404645 -0.039745201
s11_02     0.41382370  0.42444887  0.39355621  0.38776342  0.072536357
s11_03     0.39018441  0.36880020  0.34914855  0.30220922 -0.007570438
s11_04     0.45852671  0.40338354  0.39395276  0.33274694  0.020457502
s11_05     0.41189753  0.36905674  0.35729659  0.30439518 -0.051178495
s11_06     1.00000000  0.42906242  0.42286090  0.34470826  0.021310378
s11_07     0.42906242  1.00000000  0.50622725  0.50642014 -0.023775207
s11_08     0.42286090  0.50622725  1.00000000  0.45608105  0.103270629
s11_09     0.34470826  0.50642014  0.45608105  1.00000000  0.052067774
edad       0.02131038 -0.02377521  0.10327063  0.05206777  1.000000000
educacion -0.10259505 -0.12051828 -0.12873924 -0.12604407 -0.346956015
sexo       0.13918921  0.07148001  0.07286352  0.06858853  0.060628303
            educacion        sexo
s11_01    -0.05751038  0.10036699
s11_02    -0.16265198  0.15831204
s11_03    -0.06621649  0.14579031
s11_04    -0.09496293  0.17974363
s11_05    -0.05024246  0.13350208
s11_06    -0.10259505  0.13918921
s11_07    -0.12051828  0.07148001
s11_08    -0.12873924  0.07286352
s11_09    -0.12604407  0.06858853
edad      -0.34695602  0.06062830
educacion  1.00000000 -0.08940531
sexo      -0.08940531  1.00000000

Podemos observar que todas las correlaciones son positivas, por lo que no quedaron ítems invertidos.

Estimar consistencia interna

Alfa de Chronbach

Primero, estimaremos la consistencia interna de cada dimensión con un Alfa de Chronbach.

psych::alpha(data)
Some items ( educacion ) were negatively correlated with the first principal component and 
probably should be reversed.  
To do this, run the function again with the 'check.keys=TRUE' option

Reliability analysis   
Call: psych::alpha(x = data)

  raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
     0.013      0.77     0.8      0.22 3.4 0.015  4.9 1.3      0.3

    95% confidence boundaries 
         lower alpha upper
Feldt    -0.04  0.01  0.07
Duhachek -0.02  0.01  0.04

 Reliability if an item is dropped:
          raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
s11_01      -0.0029      0.75    0.78      0.21 3.0   0.0138 0.055  0.30
s11_02      -0.0188      0.73    0.76      0.20 2.7   0.0141 0.049  0.23
s11_03      -0.0154      0.73    0.77      0.20 2.8   0.0136 0.051  0.23
s11_04      -0.0204      0.73    0.76      0.20 2.7   0.0137 0.049  0.23
s11_05      -0.0070      0.74    0.77      0.20 2.8   0.0136 0.052  0.23
s11_06      -0.0131      0.74    0.77      0.20 2.8   0.0139 0.053  0.23
s11_07      -0.0038      0.74    0.77      0.20 2.8   0.0140 0.051  0.23
s11_08      -0.0187      0.74    0.77      0.20 2.8   0.0143 0.053  0.23
s11_09      -0.0039      0.75    0.78      0.21 2.9   0.0144 0.054  0.30
edad         0.6956      0.80    0.82      0.26 4.0   0.0088 0.045  0.35
educacion    0.1217      0.82    0.83      0.29 4.4   0.0126 0.031  0.35
sexo         0.0061      0.78    0.81      0.24 3.5   0.0147 0.056  0.35

 Item statistics 
             n raw.r  std.r   r.cor r.drop  mean    sd
s11_01    2886  0.18  0.584  0.5277   0.12  0.84  1.01
s11_02    2886  0.32  0.727  0.7210   0.27  0.73  0.85
s11_03    2886  0.25  0.688  0.6669   0.19  0.91  1.13
s11_04    2886  0.29  0.735  0.7314   0.23  1.09  1.07
s11_05    2886  0.20  0.666  0.6352   0.14  0.80  1.07
s11_06    2886  0.26  0.662  0.6252   0.20  0.59  0.96
s11_07    2886  0.21  0.663  0.6390   0.16  0.41  0.80
s11_08    2886  0.32  0.661  0.6307   0.27  0.42  0.85
s11_09    2886  0.24  0.604  0.5592   0.21  0.21  0.61
edad      2886  0.93  0.135  0.0019  -0.11 46.04 15.30
educacion 2886 -0.25 -0.054 -0.2092  -0.37  5.26  2.20
sexo      2886  0.14  0.319  0.1906   0.11  1.60  0.49
data2 <- dplyr::select(data, s11_01,s11_02,s11_03,s11_04,s11_05,s11_06,s11_07,s11_08,s11_09)
psych::alpha(data2)

Reliability analysis   
Call: psych::alpha(x = data2)

  raw_alpha std.alpha G6(smc) average_r S/N    ase mean   sd median_r
      0.85      0.86    0.85       0.4 6.1 0.0039 0.67 0.64     0.39

    95% confidence boundaries 
         lower alpha upper
Feldt     0.85  0.85  0.86
Duhachek  0.85  0.85  0.86

 Reliability if an item is dropped:
       raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
s11_01      0.85      0.85    0.85      0.42 5.8   0.0041 0.0050  0.41
s11_02      0.83      0.84    0.83      0.39 5.1   0.0046 0.0062  0.37
s11_03      0.84      0.84    0.83      0.40 5.3   0.0045 0.0058  0.40
s11_04      0.83      0.84    0.83      0.39 5.1   0.0047 0.0051  0.39
s11_05      0.84      0.84    0.84      0.40 5.4   0.0044 0.0065  0.39
s11_06      0.84      0.84    0.84      0.40 5.4   0.0044 0.0072  0.39
s11_07      0.84      0.84    0.83      0.40 5.3   0.0044 0.0065  0.39
s11_08      0.84      0.84    0.84      0.40 5.4   0.0043 0.0067  0.40
s11_09      0.85      0.85    0.84      0.42 5.7   0.0042 0.0051  0.41

 Item statistics 
          n raw.r std.r r.cor r.drop mean   sd
s11_01 2886  0.62  0.61  0.53   0.49 0.84 1.01
s11_02 2886  0.74  0.74  0.71   0.66 0.73 0.85
s11_03 2886  0.73  0.70  0.66   0.62 0.91 1.13
s11_04 2886  0.77  0.75  0.72   0.67 1.09 1.07
s11_05 2886  0.71  0.69  0.63   0.59 0.80 1.07
s11_06 2886  0.68  0.68  0.62   0.57 0.59 0.96
s11_07 2886  0.67  0.70  0.65   0.58 0.41 0.80
s11_08 2886  0.66  0.68  0.62   0.56 0.42 0.85
s11_09 2886  0.58  0.63  0.56   0.50 0.21 0.61

Non missing response frequency for each item
          0    1    2    3    4 miss
s11_01 0.44 0.41 0.05 0.06 0.03    0
s11_02 0.45 0.45 0.05 0.04 0.02    0
s11_03 0.46 0.35 0.06 0.09 0.04    0
s11_04 0.31 0.48 0.08 0.09 0.05    0
s11_05 0.51 0.33 0.05 0.07 0.04    0
s11_06 0.63 0.26 0.05 0.05 0.03    0
s11_07 0.72 0.21 0.03 0.03 0.01    0
s11_08 0.73 0.19 0.03 0.03 0.02    0
s11_09 0.86 0.10 0.02 0.01 0.01    0
data <- data %>% 
  rowwise() %>% 
  mutate(sintomatologia_depresiva = sum(s11_01,s11_02,s11_03,s11_04,s11_05,s11_06,s11_07,s11_08,s11_09))
summary(data$sintomatologia_depresiva)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.000   2.000   5.000   5.991   8.000  36.000 

Estandarización de variables

data <- data %>% 
  select(sintomatologia_depresiva, edad, educacion, sexo) 

Descriptivos

sjmisc::descr(data,
      show = c("label","range", "mean", "sd", "NA.prc", "n"))%>% # Selecciona estadísticos
      kable(.,"markdown") # Esto es para que se vea bien en quarto
var label n NA.prc mean sd range
4 sintomatologia_depresiva sintomatologia_depresiva 2886 0 5.991338 5.7511293 36 (0-36)
1 edad edad 2886 0 46.040540 15.3004147 70 (18-88)
2 educacion educacion 2886 0 5.257796 2.1950156 9 (1-10)
3 sexo sexo 2886 0 1.601178 0.4897408 1 (1-2)

Estandarización

data_std = data.frame(scale(data))
sjmisc::descr(data_std,
      show = c("label","range", "mean", "sd", "NA.prc", "n"))%>% # Selecciona estadísticos
      kable(.,"markdown") # Esto es para que se vea bien en quarto
var label n NA.prc mean sd range
4 sintomatologia_depresiva sintomatologia_depresiva 2886 0 0 1 6.26 (-1.04-5.22)
1 edad edad 2886 0 0 1 4.58 (-1.83-2.74)
2 educacion educacion 2886 0 0 1 4.1 (-1.94-2.16)
3 sexo sexo 2886 0 0 1 2.04 (-1.23-0.81)

Estimar regresiones

reg <- lm(sintomatologia_depresiva ~ educacion + edad + sexo, data=data)

reg_std <- lm(sintomatologia_depresiva ~ educacion + edad + sexo, data=data_std)
sjPlot::tab_model(list(reg, reg_std), 
  show.ci=FALSE, 
  show.se = TRUE,
  p.style = "stars", 
  dv.labels = c("Modelo lineal", "Modelo estandarizado"),
  string.pred = "Predictores", 
  string.est = "β")
  Modelo lineal Modelo estandarizado
Predictores β std. Error β std. Error
(Intercept) 5.44 *** 0.62 -0.00 0.02
educacion -0.37 *** 0.05 -0.14 *** 0.02
edad -0.02 * 0.01 -0.04 * 0.02
sexo 1.99 *** 0.21 0.17 *** 0.02
Observations 2886 2886
R2 / R2 adjusted 0.049 / 0.048 0.049 / 0.048
* p<0.05   ** p<0.01   *** p<0.001

Ejercicio

  1. Interprete los coeficientes
  • Modelo lineal (coeficientes no estandarizados)

    • Intercepto (5.44, p < 0.001): Cuando todas las variables independientes (educación, edad, sexo) valen 0, el puntaje esperado en sintomatología depresiva es 5.44. Como las escalas de las variables predictores pueden no tener un 0 “realista”, el intercepto no suele ser de interés sustantivo aquí, pero es necesario en el modelo.

    • Educación (β = -0.37, p < 0.001): Cada incremento en el nivel educativo se asocia con una disminución de 0.37 puntos en sintomatología depresiva, en promedio y controlando por edad y sexo. Es un efecto negativo y estadísticamente significativo con un 99,9% de confianza

    • Edad (β = -0.02, p < 0.05): Por cada año adicional de edad, los síntomas depresivos disminuyen en 0.02 puntos, controlando por educación y sexo. Efecto estadísticamente significativo con un 95% de confianza

    • Sexo (β = 1.99, p < 0.001): Pertenecer a la categoría ‘mujeres’ se asocia con un aumento promedio de 1.99 puntos en sintomatología depresiva respecto al grupo de referencia (hombres), controlando por educación y edad. Efecto estadísticamente significativo con un 99,9% de confianza

  • Modelo estandarizado

    • Intercepto (-0.00, ns): No tiene interpretación relevante en el modelo estandarizado, ya que todas las variables fueron centradas en media cero.

    • Educación (β = -0.14, p < 0.001): Un aumento de una desviación estándar en educación se asocia con una disminución de 0.14 desviaciones estándar en sintomatología depresiva. Es un efecto negativo y estadísticamente significativo con un 99,9% de confianz

    • Edad (β = -0.04, p < 0.05): Cada desviación estándar adicional en edad se asocia con 0.04 desviaciones estándar menos en síntomas depresivos. Efecto estadísticamente significativo con un 95% de confianza

    • Sexo (β = 0.17, p < 0.001): Ser mujer aumenta en 0.17 desviaciones estándar la sintomatología depresiva respecto a hombres, en promedio. Efecto estadísticamente significativo con un 99,9% de confianza

  • R² = 0.049 (ajustado 0.048): El modelo explica aproximadamente un 5% de la varianza en sintomatología depresiva. Esto indica que, aunque los predictores son significativos, la mayor parte de la variación en los síntomas se explica por otros factores no incluidos.

  1. ¿Qué diferencias hay entre un modelo y otro?
  • Escala de los coeficientes

En el modelo lineal (no estandarizado), los coeficientes están en las unidades originales de las variables. Ejemplo: un año más de edad equivale a -0.02 puntos en síntomas depresivos.

En el modelo estandarizado, los coeficientes están expresados en desviaciones estándar, lo que permite comparar directamente la magnitud de los efectos. Ejemplo: un aumento de 1 desviación estándar en educación equivale a -0.14 desviaciones estándar en síntomas depresivos.

  • Interpretación del intercepto

En el modelo lineal, el intercepto tiene un valor “real” (5.44), aunque no siempre interpretable si los predictores no toman valor 0 en la práctica.

En el modelo estandarizado, el intercepto suele quedar cercano a 0 y no tiene interpretación sustantiva, porque las variables se centraron en la media.

  • Comparabilidad de predictores

En el modelo lineal no puedes comparar directamente la magnitud de educación, edad y sexo, ya que cada uno tiene escalas distintas.

En el modelo estandarizado sí puedes hacerlo: se observa, por ejemplo, que sexo (β=0.17) y educación (β=-0.14) tienen un peso mayor que edad (β=-0.04).

  • Bondad de ajuste

El R² se mantiene idéntico (0.049), porque estandarizar las variables no cambia el poder explicativo del modelo, solo la escala de los coeficientes.

  1. ¿Qué ventajas o desventajas tiene trabajar con un modelo estandarizado?
  • Ventajas

Comparabilidad entre predictores: permite identificar cuáles variables tienen mayor peso relativo sobre la variable dependiente.

Neutraliza escalas distintas: útil cuando se combinan variables con diferentes unidades (años, niveles, categorías dummy, etc.).

Facilita la interpretación en términos relativos: por ejemplo, puedes decir que el sexo tiene un efecto mayor que la edad.

  • Desventajas

Pérdida de interpretación sustantiva: los coeficientes dejan de estar en las unidades originales, por lo que no puedes decir “un año más de edad reduce 0.02 puntos en síntomas”.

Intercepto poco informativo: al centrar y escalar, el intercepto no tiene sentido práctico.

En variables dicotómicas (como sexo), la interpretación en desviaciones estándar puede ser menos intuitiva que en unidades originales.

Dificultad para comunicar los resultados.