Introducción

¡Bienvenido/a a este tutorial sobre Regresión Lineal Múltiple (RLM)!

En el tutorial anterior, exploramos cómo una variable (X) puede predecir a otra (Y) usando la regresión lineal simple. Sin embargo, en la investigación clínica y en la vida real, los fenómenos rara vez dependen de un solo factor.

Aquí es donde entra la Regresión Lineal Múltiple. Es una de las herramientas más poderosas y utilizadas en el análisis de datos, permitiéndonos modelar cómo múltiples variables predictoras influyen en una variable de respuesta al mismo tiempo.

En este documento, daremos el salto de la regresión simple a la múltiple. Usaremos un ejemplo clínico simulado sobre hipertensión para entender la teoría y la interpretación, y finalizaremos con un ejercicio práctico para que puedas aplicar tus conocimientos con un conjunto de datos reales.

  • Objetivos de Aprendizaje:

    • Explicar cómo se utiliza una variable cuantitativa explicativa (\(X\)) para predecir el valor de una variable de respuesta (\(Y\)).

    • Formular la ecuación de la línea de regresión.

    • Comprender que la regresión evalúa asociación, pero no implica causalidad.


Módulo 1: ¿Qué es la Regresión Lineal Múltiple?

La Regresión Lineal Múltiple (RLM) es una técnica estadística que extiende la regresión lineal simple. Mientras que la regresión simple modela la relación entre una variable de respuesta (dependiente, \(Y\)) y una variable predictora (independiente, \(X\)), la regresión múltiple modela la relación entre \(Y\) y dos o más variables predictoras (\(X_1, X_2, ..., X_k\)).

El objetivo es encontrar una ecuación lineal que mejor prediga el valor de \(Y\) a partir de un conjunto de predictores.

La Ecuación del Modelo

La ecuación de un modelo de regresión lineal múltiple con \(k\) predictores es:

\[ Y_i = \beta_0 + \beta_1X_{1i} + \beta_2X_{2i} + \dots + \beta_kX_{ki} + \epsilon_i \] Donde:

  • \(Y_i\) es el valor de la variable de respuesta para la \(i\)-ésima observación.
  • \(\beta_0\) es el intercepto (o constante), el valor esperado de \(Y\) cuando todos los predictores (\(X_1, ..., X_k\)) son cero.
  • \(\beta_1\) es el coeficiente de la primera variable predictora (\(X_1\)). Representa el cambio esperado en \(Y\) por cada unidad de aumento en \(X_1\), manteniendo constantes todas las demás variables predictoras (\(X_2, ..., X_k\)).
  • \(\beta_k\) es el coeficiente para el \(k\)-ésimo predictor.
  • \(\epsilon_i\) es el error o residuo, la diferencia entre el valor observado \(Y_i\) y el valor predicho por el modelo.

¿Por qué usar RLM en lugar de múltiples regresiones simples?

  1. Controlar Confusores (Ajuste): En investigación clínica, varias variables están interrelacionadas. La RLM nos permite aislar el efecto de un predictor principal (ej. exposicion) sobre la respuesta (ej. puntaje_C), “ajustando” o “controlando” el efecto de otras variables (ej. edad, genero).
  2. Mejor Predicción: Usar múltiples predictores relevantes generalmente nos da un modelo con un poder predictivo más alto (un \(R^2\) ajustado más alto) que cualquier modelo simple por sí solo.

2. Supuestos del Modelo

Al igual que la regresión simple, la RLM se basa en varios supuestos clave para que sus inferencias (p-values, intervalos de confianza) sean válidas:

  1. Linealidad: La relación entre cada predictor \(X_k\) y la respuesta \(Y\) es lineal (manteniendo los demás \(X\) constantes).
  2. Independencia: Los residuos \(\epsilon_i\) son independientes entre sí. (El valor de un residuo no predice el valor de otro).
  3. Normalidad: Los residuos \(\epsilon_i\) se distribuyen normalmente (con media cero).
  4. Homocedasticidad (Varianza Constante): La varianza de los residuos es constante en todos los niveles de las variables predictoras.
  5. No-Multicolinealidad: Los predictores no deben estar altamente correlacionados entre sí. Si lo están (ej. correlación > 0.8), puede ser difícil para el modelo estimar sus efectos individuales.

3. Ejemplo Clínico: Hipertensión Arterial

Vamos a simular un conjunto de datos para ilustrar cómo modelar la Presión Arterial Sistólica (PAS) de un paciente basándonos en predictores clínicos conocidos.

Objetivo: Predecir la PAS (Y) usando la edad (X1), el IMC (Índice de Masa Corporal, X2) y el consumo_sal_g (gramos de sal diarios, X3).

3.1. Carga de Paquetes y Simulación de Datos

Primero, cargamos los paquetes que usaremos. broom es muy útil para limpiar los resultados del modelo.

library(tidyverse) # Para manipulación de datos (dplyr) y gráficos (ggplot2)
library(broom)     # Para limpiar los 'outputs' de los modelos (tidy)
library(GGally)    # Para gráficos de pares

Ahora, simulamos los datos. En un caso real, cargarías tus propios datos (ej. read_csv o read_excel).

# Fijamos una semilla para que los resultados sean reproducibles
set.seed(123)

N <- 200 # Número de pacientes

# Creamos el dataframe
datos_hipertension <- tibble(
id_paciente = 1:N,
# X1: Edad (entre 40 y 80 años)
edad = rnorm(N, mean = 60, sd = 8) %>% round(0),

# X2: IMC (media 28, sd 4)
IMC = rnorm(N, mean = 28, sd = 4) %>% round(1),

# X3: Consumo de sal en gramos/día (media 5g, sd 1.5)
consumo_sal_g = rnorm(N, mean = 5, sd = 1.5) %>% round(1),

# Y: PAS (Presión Arterial Sistólica)
# Creamos una relación lineal + ruido aleatorio
PAS = 70 + (0.8 * edad) + (1.2 * IMC) + (0.5 * consumo_sal_g) + rnorm(N, mean = 0, sd = 10)
) %>% 
# Asegurarnos que no haya valores negativos irreales
filter(IMC > 0, consumo_sal_g > 0)

# Vemos los primeros pacientes
head(datos_hipertension)
## # A tibble: 6 × 5
##   id_paciente  edad   IMC consumo_sal_g   PAS
##         <int> <dbl> <dbl>         <dbl> <dbl>
## 1           1    56  36.8           4.9  172.
## 2           2    58  33.2           3.2  158.
## 3           3    72  26.9           4    162.
## 4           4    61  30.2           5    142.
## 5           5    61  26.3           6    161.
## 6           6    74  26.1           2.5  160.

3.2. Análisis Exploratorio (Breve)

Es útil ver las relaciones entre todas las variables. Usamos ggpairs para esto.

# ggpairs(datos_hipertension, columns = c("PAS", "edad", "IMC", "consumo_sal_g"))

Idealmente, buscaríamos relaciones lineales entre PAS y cada predictor en los gráficos de dispersión (scatterplot).

3.3. Construcción del Modelo

Usamos la misma función lm() que en la regresión simple, pero añadimos más predictores usando el símbolo +.

La fórmula PAS ~ edad + IMC + consumo_sal_g se lee como: “Queremos modelar PAS en función de la edad, más el IMC, más el consumo de sal.”

# Construir el modelo
modelo_pas <- lm(PAS ~ edad + IMC + consumo_sal_g, data = datos_hipertension)

3.4. Interpretación de Resultados

La forma más común de ver los resultados es con summary().

summary(modelo_pas)
## 
## Call:
## lm(formula = PAS ~ edad + IMC + consumo_sal_g, data = datos_hipertension)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -25.2831  -6.7085   0.7261   7.0962  26.8599 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   66.19632    8.43990   7.843 2.76e-13 ***
## edad           0.74122    0.09673   7.663 8.19e-13 ***
## IMC            1.40644    0.18306   7.683 7.27e-13 ***
## consumo_sal_g  0.75608    0.50266   1.504    0.134    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 10.27 on 196 degrees of freedom
## Multiple R-squared:  0.3698, Adjusted R-squared:  0.3602 
## F-statistic: 38.34 on 3 and 196 DF,  p-value: < 2.2e-16

Analicemos el summary:

  1. Call: Simplemente nos recuerda la fórmula que usamos.
  2. Residuals: Un resumen de la distribución de los errores. Idealmente, la mediana (Median) debería estar cerca de 0.
  3. Coefficients (La parte más importante):
  • (Intercept) \(\beta_0\): 68.0820. Este es el valor predicho de la PAS cuando edad, IMC y consumo_sal_g son todos cero. Clínicamente, esto no tiene sentido (nadie tiene 0 años o 0 de IMC), por lo que el intercepto a menudo no se interpreta.
  • edad \(\beta_1\): 0.8066.
  • Interpretación: “Por cada año adicional de edad, la PAS aumenta en promedio 0.807 mmHg, manteniendo constantes el IMC y el consumo de sal.”
  • Significancia: El p-value (Pr(>|t|)) es 3.28e-15 (muy pequeño, < 0.05). Esto significa que la edad es un predictor estadísticamente significativo.
  • IMC \(\beta_2\): 1.2483.
  • Interpretación: “Por cada punto adicional de IMC, la PAS aumenta en promedio 1.25 mmHg, manteniendo constantes la edad y el consumo de sal.”
  • Significancia: El p-value (7.49e-08) es muy pequeño. El IMC es un predictor significativo.
  • consumo_sal_g \(\beta_3\): 0.6277.
  • Interpretación: “Por cada gramo adicional de sal consumido al día, la PAS aumenta en promedio 0.63 mmHg, manteniendo constantes la edad y el IMC.”
  • Significancia: El p-value (0.142) es mayor que 0.05. En nuestro modelo simulado, el consumo de sal no es un predictor estadísticamente significativo (después de ajustar por edad e IMC).
  1. Estadísticas del Modelo (Abajo):
  • Residual standard error: La desviación estándar de los residuos (aprox. 10.15).
  • Multiple R-squared (R Múltiple): 0.518. “El 51.8% de la variabilidad en la Presión Arterial Sistólica (PAS) es explicada por nuestro modelo (edad, IMC y consumo de sal).”
  • Adjusted R-squared (R Ajustado): 0.5108. Este valor es mejor para regresión múltiple porque penaliza la adición de variables que no mejoran el modelo. Es el que deberías reportar.
  • F-statistic (Estadístico F): 69.91 on 3 and 195 DF.
  • Interpretación: Prueba la hipótesis nula de que todos los coeficientes \(\beta\) (excepto el intercepto) son cero.
  • p-value (del modelo F): < 2.2e-16. Un p-value muy pequeño indica que nuestro modelo en su conjunto es estadísticamente significativo (es decir, es mejor que un modelo que solo predice la media de PAS).

3.5. Limpiando el resultado con broom

La función tidy() del paquete broom nos da un dataframe limpio con los coeficientes, sus errores estándar, estadísticos t y p-values.

# Resultados de los coeficientes
tidy(modelo_pas)
## # A tibble: 4 × 5
##   term          estimate std.error statistic  p.value
##   <chr>            <dbl>     <dbl>     <dbl>    <dbl>
## 1 (Intercept)     66.2      8.44        7.84 2.76e-13
## 2 edad             0.741    0.0967      7.66 8.19e-13
## 3 IMC              1.41     0.183       7.68 7.27e-13
## 4 consumo_sal_g    0.756    0.503       1.50 1.34e- 1

Y glance() nos da las estadísticas globales del modelo (como R2 ajustado).

# Estadísticas del modelo
glance(modelo_pas)
## # A tibble: 1 × 12
##   r.squared adj.r.squared sigma statistic  p.value    df logLik   AIC   BIC
##       <dbl>         <dbl> <dbl>     <dbl>    <dbl> <dbl>  <dbl> <dbl> <dbl>
## 1     0.370         0.360  10.3      38.3 1.53e-19     3  -748. 1505. 1522.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>

¿Qué son logLik, AIC y BIC?

Cuando ejecutas glance(), ves estas tres métricas. A diferencia de adj.r.squared, que mide la “calidad del ajuste”, estas métricas se utilizan para comparar modelos entre sí.

La idea central es la parsimonia: queremos un modelo que explique bien los datos (buen ajuste), pero que sea lo más simple posible (pocas variables). Añadir variables inútiles a un modelo se llama “sobreajuste” (overfitting).

La regla de oro para AIC y BIC es: el modelo con el valor MÁS BAJO es mejor.

  • logLik (Log-Likelihood / Log-Verosimilitud):
    • Es la base para los otros dos. Mide qué tan “probable” es que hayamos observado nuestros datos dado el modelo que hemos construido.
    • Un valor más alto (más cercano a 0, ya que suelen ser negativos) indica un mejor ajuste.
  • AIC (Akaike Information Criterion):
    • Es la métrica más usada para comparar. Busca un balance entre el buen ajuste (el logLik) y la complejidad del modelo (el número de predictores).
    • El AIC penaliza al modelo por cada variable extra que añades.
    • Al comparar un Modelo A (con 5 variables) y un Modelo B (con 8 variables), elegirías el que tenga el valor AIC más bajo.
  • BIC (Bayesian Information Criterion):
    • Es muy similar al AIC, pero su penalización por complejidad es más fuerte.
    • Tiende a favorecer modelos incluso más simples (con menos variables) que el AIC.
    • Al igual que con AIC, el modelo con el BIC más bajo es el preferido.

En resumen, si estuvieras probando dos modelos (ej. uno completo y otro con menos variables), podrías usar glance() en ambos y comparar sus AIC y BIC para decidir cuál es estadísticamente preferible.

3.6. Diagnóstico del Modelo (Breve)

Podemos usar plot() en el objeto lm para revisar los supuestos.

par(mfrow = c(2, 2)) # Poner 4 gráficos en una cuadrícula
plot(modelo_pas)

par(mfrow = c(1, 1)) # Volver a la normalidad
  • Residuals vs Fitted: Busca un patrón. Queremos ver una nube de puntos aleatoria (sin “forma de embudo”). Esto revisa la linealidad y la homocedasticidad.
  • Normal Q-Q: Los puntos deben seguir la línea discontinua. Esto revisa la normalidad de los residuos.
  • Scale-Location: Similar al primero, busca homocedasticidad.
  • Residuals vs Leverage: Busca puntos influyentes (outliers) que puedan estar afectando desproporcionadamente al modelo.

Interpretación de los Gráficos de Diagnóstico

Estos cuatro gráficos son un “chequeo de salud” para nuestro modelo. En un escenario de libro de texto, todo se vería perfecto. En la práctica (incluso con datos simulados como los nuestros), buscamos señales de alarma graves más que la perfección.

1. Residuals vs Fitted (Arriba-Izquierda)

  • ¿Qué mira? La Linealidad y la Homocedasticidad.
  • ¿Qué buscamos? Una nube de puntos aleatoria y dispersa alrededor de la línea horizontal en 0, sin patrones claros.
  • “La línea roja no es horizontal.”
    • Esta línea roja (un suavizador loess) muestra la tendencia promedio de los residuos. Idealmente, debería ser perfectamente plana en 0.
    • En nuestro gráfico, se curva ligeramente. Esto nos dice que podría haber una relación no lineal muy sutil que no capturamos. Sin embargo, la curvatura no es severa (como una “U” o una “U” invertida). Si lo fuera, tendríamos que revisar si nos falta una variable o si necesitamos transformar un predictor (ej. edad^2).
    • Para la Homocedasticidad, nos fijamos en que la dispersión vertical (la “altura” de la nube) sea más o menos la misma de izquierda a derecha. Nuestro gráfico no muestra un patrón de “embudo” o “megáfono”, lo cual es bueno.

2. Normal Q-Q (Arriba-Derecha)

  • ¿Qué mira? La Normalidad de los residuos.
  • ¿Qué buscamos? Que los puntos caigan perfectamente sobre la línea diagonal discontinua.
  • Interpretación: Nuestros puntos siguen la línea muy bien en el centro, pero se desvían un poco en los extremos (las “colas”). Esto es extremadamente común y generalmente no es un problema grave. Indica que la normalidad se cumple razonablemente bien.

3. Scale-Location (Abajo-Izquierda)

  • ¿Qué mira? La Homocedasticidad (de nuevo). Es similar al primer gráfico, pero usa la raíz cuadrada de los residuos estandarizados.
  • ¿Qué buscamos? Que la línea roja sea relativamente plana y horizontal.
  • Interpretación: Al igual que en el primer gráfico, la línea roja no es perfectamente plana, pero tampoco muestra un patrón claro (como una pendiente fuerte). Confirma que la varianza de los errores es razonablemente constante.

4. Residuals vs Leverage (Abajo-Derecha)

  • ¿Qué mira? Puntos Influyentes (Outliers y Puntos de Apalancamiento). Estos son puntos de datos que pueden estar “tirando” de nuestra línea de regresión y distorsionando los resultados.
  • ¿Qué buscamos? Puntos que estén fuera de las líneas rojas punteadas (la “Distancia de Cook”).
  • “Parecen haber puntos influyentes.”
    • ¡Nuevamente, bien visto! R automáticamente etiqueta los puntos más “extremos” (como el 14, 18, 168).
    • Leverage (Apalancamiento, eje X): Mide qué tan “inusual” es un punto en sus valores X (predictores).
    • Residuals (Eje Y): Mide qué tan mal predijo el modelo a ese punto (un error grande).
    • Lo más importante (Distancia de Cook): Las líneas rojas punteadas nos marcan el límite de lo “peligroso”. En nuestro gráfico, aunque hay puntos etiquetados, ninguno cruza las líneas de Cook.
    • Conclusión: Esto significa que, aunque tenemos algunos puntos atípicos, ninguno es lo suficientemente influyente como para distorsionar nuestros resultados. Si viéramos un punto en la esquina superior derecha, más allá de la línea de Cook, tendríamos que investigarlo (revisar si fue un error de tipeo, etc.).

Resumen General: Los gráficos de diagnóstico en datos reales casi nunca son perfectos. Lo que vemos aquí es un modelo “bastante saludable” y sin “alarmas rojas” que nos impidan interpretar los resultados.


4. Ejercicio Práctico: Base CAP_modif

Ahora es tu turno. Vas a construir un modelo de regresión lineal múltiple usando una base de datos llamada CAP_modif.

Objetivo del Ejercicio: Modelar la variable respuesta puntaje_C usando exposicion como predictor principal, ajustando por un conjunto de covariables.

Variables:

  • Respuesta (Y): puntaje_C
  • Predictor Principal (X1): exposicion
  • Variables de Ajuste (Covariables, X2…Xk): genero, edad, nivel_edu, enfcro_dicot, area, empleo, ingreso, prev_per, part_prev, dosis.
  • Variable a crear: prev_per_dicot y enfcro_dicot

4.1. Cargar Paquetes y Datos

Asegúrate de tener tidyverse cargado. Luego, carga tus datos. (Debes descomentar y ajustar la ruta a tu archivo).

# 1. Instalar paquetes si no los tiene
# install.packages(c("readxl", "tidyverse", "broom"))
library(readxl)
library(tidyverse)
library(broom)

# 2. Importar el archivo de Excel desde el directorio de trabajo
# Asignamos los datos a un objeto llamado "CAP_modif"
CAP_modif <- read_excel("CAP_modif.xlsx")

# 3. Inspeccionar la estructura
# Vemos los nombres de columnas y sus tipos
# str(CAP_modif)

print("Datos cargados (placeholder):")
## [1] "Datos cargados (placeholder):"
head(CAP_modif)
## # A tibble: 6 × 97
##      id part_prev municipio  edad genero nivel_edu enf_cro hipertension diabetes
##   <dbl> <chr>     <chr>     <dbl> <chr>  <chr>     <chr>   <chr>        <chr>   
## 1     1 No        Santa Te…    52 Femen… Nunca as… No      No           No      
## 2     2 Si        Santa Te…    50 Mascu… Primer c… Si      No           Si      
## 3     3 No        Santa Te…    27 Femen… Bachille… No      No           No      
## 4     4 No        Santa Te…    50 Mascu… Tercer c… No      No           No      
## 5     5 No        Santa Te…    47 Femen… Tercer c… Si      Si           No      
## 6     6 No        Santa Te…    47 Mascu… Segundo … Si      Si           Si      
## # ℹ 88 more variables: epoc <chr>, renal <chr>, artritis <chr>,
## #   cardiopatia <chr>, hipotiroidismo <chr>, glaucoma <chr>, lupus <chr>,
## #   ulcera_venosa <chr>, ninguna <lgl>, area <chr>, hijxs <chr>, nucleo <dbl>,
## #   empleo <chr>, ocupacion <chr>, ingreso <chr>, prev_per <chr>,
## #   rec_apoyo <chr>, satisfaccion <chr>, prev_fam <chr>, mortalidad <chr>,
## #   c1 <dbl>, c2 <dbl>, c3 <dbl>, c4 <dbl>, c5 <dbl>, c6 <dbl>, c7 <dbl>,
## #   c8 <dbl>, c9 <dbl>, c10 <dbl>, a1 <dbl>, a2 <dbl>, a3 <dbl>, a4 <dbl>, …

4.2. Preparación de Datos

# Primero, definimos la lista de todas las variables que son 'character'
# y que queremos convertir a 'factor'
variables_categoricas <- c(
"part_prev", "municipio", "genero", "nivel_edu", "enf_cro", "enfcro_dicot", "hipertension", "diabetes", "epoc", "renal", "artritis", "cardiopatia", "hipotiroidismo", "glaucoma", "lupus", "ulcera_venosa", "ninguna", "uso_de_mascarilla", "distanciamiento_social", "lavado_de_manos", "ponerse_la_vacuna", "no_recuerdo", "todas", "No_he_escuchado", "transmite_por_el_agua", "transmite_en_las_suelas", "rociar_desinfectantes", "beben_alcohol", "pueden_dejar_de_aplicar", "no_se_debe_vacunar", "producen_esterilidad", "producen_homosexualidad", "inyectan_el_virus", "antibioticos_son_buenos", "vitaminas_y_minerales", "edad_dicot", "niveledu_dicot", "dosis_dicot", "area", "hijxs", "empleo", "ocupacion", "ingreso", "prev_per", "rec_apoyo", "satisfaccion", "prev_fam", "mortalidad", "razon_nv", "periodico", "television", "redes_sociales", "personal_salud", "radio", "paginas_internet", "escuela", "mensajes", "patrocinio", "prev_per_dicot", "exposicion", "dosis"
)

# Modificar el dataframe 'CAP_modif'
CAP_modif <- CAP_modif %>%
  mutate(
    
    # 1. Crear 'exposicion' (como numérica 0/1 primero)
    exposicion = case_when(
      mensajes == "Si" ~ 1,
      mensajes %in% c("No", "No recuerda") ~ 0,
      TRUE ~ NA_real_
    ),
    
    # 2. Crear 'prev_per_dicot' (como numérica 0/1 primero)
    prev_per_dicot = case_when(
      prev_per %in% c("Si, hubo sospecha pero no se hizo la prueba", 
                     "Si, se hizo una prueba y el resultado fue positivo") ~ 1,
      prev_per %in% c("No", "No, sabe") ~ 0,
      TRUE ~ NA_real_
    ),
    
    # 3. Convertir TODAS las variables de character a factor
    # (Esto convertirá 'mensajes' y 'prev_per' originales)
    across(all_of(variables_categoricas), as.factor)
    
  ) %>% # Fin del primer mutate
  
  # 4. Ahora, convertir nuestras nuevas variables 0/1 a factores con etiquetas
  mutate(
    exposicion = factor(exposicion, 
                        levels = c(0, 1), 
                        labels = c("No", "Si")),
    
    prev_per_dicot = factor(prev_per_dicot, 
                            levels = c(0, 1), 
                            labels = c("No", "Si"))
  )

# Verificamos la estructura de los datos limpios
# Deberías ver que 'prev_per', 'mensajes', 'genero', etc.,
# ahora dicen 'Factor' en lugar de 'chr'
print("Estructura de los datos limpios:")
## [1] "Estructura de los datos limpios:"
# glimpse(CAP_modif)

# Comprobamos la creación de 'exposicion'
print("Tabla de 'exposicion':")
## [1] "Tabla de 'exposicion':"
table(CAP_modif$mensajes, CAP_modif$exposicion, useNA = "ifany")
##              
##                No  Si
##   No          182   0
##   No recuerda  92   0
##   Si            0 241
# Comprobamos la creación de 'prev_per_dicot'
print("Tabla de 'prev_per_dicot':")
## [1] "Tabla de 'prev_per_dicot':"
table(CAP_modif$prev_per, CAP_modif$prev_per_dicot, useNA = "ifany")
##                                                     
##                                                       No  Si
##   No                                                 323   0
##   No, sabe                                             6   0
##   Si, hubo sospecha pero no se hizo la prueba          0  40
##   Si, se hizo una prueba y el resultado fue positivo   0 146
# Reagrupar la variable nivel_edu
CAP_modif <- CAP_modif %>%
  mutate(
    nivel_edu_reagrupado = case_when(
      
      # Grupo 1: Educación Básica (La nueva referencia)
      nivel_edu %in% c("Nunca asistio", "Primer ciclo", "Segundo ciclo") ~ "Basica",
      
      # Grupo 2: Educación Secundaria
      nivel_edu %in% c("Tercer ciclo", "Bachillerato") ~ "Secundaria",
      
      # Grupo 3: Educación Superior
      nivel_edu %in% c("Tecnico", "Universitario") ~ "Superior",
      
      # Seguridad
      TRUE ~ NA_character_
      
    ) %>% 
    # Convertir a factor y establecer el nivel de referencia
    as.factor() %>%
    relevel(ref = "Basica") 
  )

# Opcional: Revisa que se haya creado bien
table(CAP_modif$nivel_edu_reagrupado, useNA = "ifany")
## 
##     Basica Secundaria   Superior 
##        151        302         62
# Crea la nueva variable dicotómica 'esta_desempleado'
CAP_modif <- CAP_modif %>%
  mutate(
    esta_desempleado = case_when(
      
      # El grupo que te interesa
      empleo == "Desempleo" ~ "Si",
      
      # Agrupar a TODOS los demás
      TRUE ~ "No"
      
    ) %>%
    # Convertir a factor y poner "No" (el grupo más grande) como referencia
    as.factor() %>%
    relevel(ref = "No")
  )

# Opcional: Revisa que se haya creado bien
table(CAP_modif$empleo, CAP_modif$esta_desempleado)
##               
##                 No  Si
##   Desempleo      0 104
##   Empleo       334   0
##   En retiro     38   0
##   Solo estudia  39   0
CAP_modif <- CAP_modif %>%
  mutate(
    
    # --- Variable: Familiar enfermo (Lógica actualizada) ---
    prev_fam_dicot = case_when(
      
      # Grupo "Si": Agrupamos ambas respuestas positivas
      prev_fam %in% c("Si, hubo sospecha pero no se hizo la prueba", 
                     "Si, se hizo una prueba y el resultado fue positivo") ~ "Si",
      
      # Grupo "No": Agrupamos "No" y "No sabe"
      prev_fam %in% c("No", "No sabe") ~ "No",
      
      TRUE ~ NA_character_
    ) %>%
    as.factor() %>%
    relevel(ref = "No") # Ponemos "No" como referencia
  )

# --- Verificación ---
print("Verificación de 'prev_fam_dicot':")
## [1] "Verificación de 'prev_fam_dicot':"
table(CAP_modif$prev_fam, CAP_modif$prev_fam_dicot)
##                                                     
##                                                       No  Si
##   No                                                 274   0
##   No sabe                                             70   0
##   Si, hubo sospecha pero no se hizo la prueba          0  16
##   Si, se hizo una prueba y el resultado fue positivo   0 155

4.3. Construir el Modelo del Ejercicio

Ahora, construye el modelo lm() usando la fórmula completa especificada. Asegúrate de usar el dataframe CAP_modif.

modelo_puntaje_C <- lm(puntaje_C ~ 
exposicion + 
genero + 
edad + 
nivel_edu_reagrupado + 
enfcro_dicot + 
area + 
esta_desempleado + 
ingreso + 
part_prev + 
dosis + 
prev_per_dicot, 
data = CAP_modif)

4.4. Interpretar los Resultados

Usa summary() y/o tidy() para ver los resultados de tu modelo.

# Opción 1: Resumen estándar
summary(modelo_puntaje_C)
## 
## Call:
## lm(formula = puntaje_C ~ exposicion + genero + edad + nivel_edu_reagrupado + 
##     enfcro_dicot + area + esta_desempleado + ingreso + part_prev + 
##     dosis + prev_per_dicot, data = CAP_modif)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.1269 -1.0053  0.1439  0.9173  3.7722 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     6.256717   0.371112  16.859  < 2e-16 ***
## exposicionSi                   -0.419284   0.144569  -2.900  0.00389 ** 
## generoMasculino                -0.076353   0.131263  -0.582  0.56105    
## edad                           -0.005936   0.005993  -0.990  0.32243    
## nivel_edu_reagrupadoSecundaria  0.255216   0.166500   1.533  0.12596    
## nivel_edu_reagrupadoSuperior    0.679079   0.255468   2.658  0.00811 ** 
## enfcro_dicotSi                 -0.101367   0.173342  -0.585  0.55896    
## areaUrbana                      0.676237   0.143160   4.724 3.02e-06 ***
## esta_desempleadoSi              0.173120   0.161277   1.073  0.28360    
## ingreso731 a 1,000              0.401238   0.318475   1.260  0.20831    
## ingresoMas de 1,000            -0.290669   0.999015  -0.291  0.77121    
## ingresoMenos de 365            -0.045396   0.188091  -0.241  0.80938    
## ingresoPrefiero no contestar   -0.144477   0.182141  -0.793  0.42803    
## part_prevSi                     0.082795   0.226771   0.365  0.71519    
## dosis1                          0.456853   0.303791   1.504  0.13326    
## dosis2                          0.293273   0.222226   1.320  0.18754    
## dosis3                          0.333001   0.247536   1.345  0.17916    
## dosis4                          0.378517   0.255576   1.481  0.13923    
## prev_per_dicotSi                1.199565   0.145881   8.223 1.75e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.39 on 496 degrees of freedom
## Multiple R-squared:    0.3,  Adjusted R-squared:  0.2745 
## F-statistic: 11.81 on 18 and 496 DF,  p-value: < 2.2e-16
# Opción 2: Resumen limpio con broom
tidy(modelo_puntaje_C)
## # A tibble: 19 × 5
##    term                           estimate std.error statistic  p.value
##    <chr>                             <dbl>     <dbl>     <dbl>    <dbl>
##  1 (Intercept)                     6.26      0.371      16.9   9.52e-51
##  2 exposicionSi                   -0.419     0.145      -2.90  3.89e- 3
##  3 generoMasculino                -0.0764    0.131      -0.582 5.61e- 1
##  4 edad                           -0.00594   0.00599    -0.990 3.22e- 1
##  5 nivel_edu_reagrupadoSecundaria  0.255     0.167       1.53  1.26e- 1
##  6 nivel_edu_reagrupadoSuperior    0.679     0.255       2.66  8.11e- 3
##  7 enfcro_dicotSi                 -0.101     0.173      -0.585 5.59e- 1
##  8 areaUrbana                      0.676     0.143       4.72  3.02e- 6
##  9 esta_desempleadoSi              0.173     0.161       1.07  2.84e- 1
## 10 ingreso731 a 1,000              0.401     0.318       1.26  2.08e- 1
## 11 ingresoMas de 1,000            -0.291     0.999      -0.291 7.71e- 1
## 12 ingresoMenos de 365            -0.0454    0.188      -0.241 8.09e- 1
## 13 ingresoPrefiero no contestar   -0.144     0.182      -0.793 4.28e- 1
## 14 part_prevSi                     0.0828    0.227       0.365 7.15e- 1
## 15 dosis1                          0.457     0.304       1.50  1.33e- 1
## 16 dosis2                          0.293     0.222       1.32  1.88e- 1
## 17 dosis3                          0.333     0.248       1.35  1.79e- 1
## 18 dosis4                          0.379     0.256       1.48  1.39e- 1
## 19 prev_per_dicotSi                1.20      0.146       8.22  1.75e-15
# Opción 3: Estadísticas globales del modelo
glance(modelo_puntaje_C)
## # A tibble: 1 × 12
##   r.squared adj.r.squared sigma statistic  p.value    df logLik   AIC   BIC
##       <dbl>         <dbl> <dbl>     <dbl>    <dbl> <dbl>  <dbl> <dbl> <dbl>
## 1     0.300         0.275  1.39      11.8 1.13e-28    18  -891. 1821. 1906.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>

4.5. Preguntas de Interpretación

Basándote en el output de tu modelo (summary(modelo_cap)):

  1. ¿Cuál es el valor del Adjusted R-squared? ¿Qué te dice sobre tu modelo?
  2. Observa el coeficiente (Estimate) de tu predictor principal: exposicion.
  3. ¿Cómo interpretarías este coeficiente? (Recuerda: “Por cada unidad de aumento en exposicion, el puntaje_C [aumenta/disminuye] en [valor], manteniendo constantes todas las demás variables del modelo.”)
  4. ¿Es exposicion un predictor estadísticamente significativo para puntaje_C en este modelo? (Mira su p-value o Pr(>|t|)).
  5. ¿Alguna otra variable (genero, edad, prev_per_dicot, etc.) parece ser un predictor significativo?

4.6. Ajuste del modelo

Ahora procedemos a eliminar una a una las variables que no sean estadísticamente significativas a fin de alcanzar la parsimonia.

# Backward selection
modelo2_puntaje_c <- lm(puntaje_C ~ exposicion + genero + edad + nivel_edu_reagrupado + 
                   enfcro_dicot + area + esta_desempleado + ingreso + 
                   # part_prev +  <- ELIMINADA
                   dosis + prev_per_dicot, 
                   data = CAP_modif)
summary(modelo2_puntaje_c)
## 
## Call:
## lm(formula = puntaje_C ~ exposicion + genero + edad + nivel_edu_reagrupado + 
##     enfcro_dicot + area + esta_desempleado + ingreso + dosis + 
##     prev_per_dicot, data = CAP_modif)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.1267 -1.0181  0.1478  0.9310  3.7702 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     6.264852   0.370119  16.927  < 2e-16 ***
## exposicionSi                   -0.407559   0.140834  -2.894  0.00397 ** 
## generoMasculino                -0.078030   0.131068  -0.595  0.55189    
## edad                           -0.006068   0.005977  -1.015  0.31045    
## nivel_edu_reagrupadoSecundaria  0.255386   0.166355   1.535  0.12537    
## nivel_edu_reagrupadoSuperior    0.672493   0.254608   2.641  0.00852 ** 
## enfcro_dicotSi                 -0.102200   0.173175  -0.590  0.55536    
## areaUrbana                      0.680795   0.142490   4.778 2.34e-06 ***
## esta_desempleadoSi              0.175014   0.161052   1.087  0.27770    
## ingreso731 a 1,000              0.409951   0.317302   1.292  0.19696    
## ingresoMas de 1,000            -0.295995   0.998038  -0.297  0.76691    
## ingresoMenos de 365            -0.048389   0.187749  -0.258  0.79672    
## ingresoPrefiero no contestar   -0.142184   0.181873  -0.782  0.43472    
## dosis1                          0.453456   0.303384   1.495  0.13564    
## dosis2                          0.289284   0.221763   1.304  0.19268    
## dosis3                          0.330752   0.247244   1.338  0.18159    
## dosis4                          0.376155   0.255271   1.474  0.14124    
## prev_per_dicotSi                1.199940   0.145751   8.233 1.62e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.388 on 497 degrees of freedom
## Multiple R-squared:  0.2998, Adjusted R-squared:  0.2758 
## F-statistic: 12.52 on 17 and 497 DF,  p-value: < 2.2e-16
# Backward selection
modelo3_puntaje_c <- lm(puntaje_C ~ exposicion + genero + edad + nivel_edu_reagrupado + 
                   enfcro_dicot + area + esta_desempleado + 
                   # ingreso + 
                   # part_prev +  <- ELIMINADA
                   dosis + prev_per_dicot, 
                   data = CAP_modif)
summary(modelo3_puntaje_c)
## 
## Call:
## lm(formula = puntaje_C ~ exposicion + genero + edad + nivel_edu_reagrupado + 
##     enfcro_dicot + area + esta_desempleado + dosis + prev_per_dicot, 
##     data = CAP_modif)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.0404 -1.0075  0.1551  0.9145  3.8446 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     6.197049   0.338345  18.316  < 2e-16 ***
## exposicionSi                   -0.382262   0.139778  -2.735  0.00646 ** 
## generoMasculino                -0.084723   0.130539  -0.649  0.51662    
## edad                           -0.006764   0.005935  -1.140  0.25491    
## nivel_edu_reagrupadoSecundaria  0.279858   0.164572   1.701  0.08965 .  
## nivel_edu_reagrupadoSuperior    0.758353   0.241711   3.137  0.00180 ** 
## enfcro_dicotSi                 -0.106996   0.172349  -0.621  0.53501    
## areaUrbana                      0.710429   0.140521   5.056 6.02e-07 ***
## esta_desempleadoSi              0.185464   0.159645   1.162  0.24590    
## dosis1                          0.430198   0.297253   1.447  0.14845    
## dosis2                          0.265599   0.220577   1.204  0.22912    
## dosis3                          0.296743   0.243576   1.218  0.22369    
## dosis4                          0.332220   0.252994   1.313  0.18973    
## prev_per_dicotSi                1.244779   0.142302   8.747  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.387 on 501 degrees of freedom
## Multiple R-squared:  0.2953, Adjusted R-squared:  0.277 
## F-statistic: 16.15 on 13 and 501 DF,  p-value: < 2.2e-16
# Backward selection
modelo4_puntaje_c <- lm(puntaje_C ~ exposicion + 
                   # genero 
                   edad + nivel_edu_reagrupado + 
                   enfcro_dicot + area + esta_desempleado + 
                   # ingreso + 
                   # part_prev +  <- ELIMINADA
                   dosis + prev_per_dicot, 
                   data = CAP_modif)
summary(modelo4_puntaje_c)
## 
## Call:
## lm(formula = puntaje_C ~ exposicion + edad + nivel_edu_reagrupado + 
##     enfcro_dicot + area + esta_desempleado + dosis + prev_per_dicot, 
##     data = CAP_modif)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.0735 -1.0147  0.1761  0.9309  3.7961 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     6.191831   0.338054  18.316  < 2e-16 ***
## exposicionSi                   -0.373889   0.139101  -2.688  0.00743 ** 
## edad                           -0.007673   0.005764  -1.331  0.18374    
## nivel_edu_reagrupadoSecundaria  0.280640   0.164473   1.706  0.08857 .  
## nivel_edu_reagrupadoSuperior    0.761387   0.241527   3.152  0.00172 ** 
## enfcro_dicotSi                 -0.100446   0.171954  -0.584  0.55938    
## areaUrbana                      0.712176   0.140414   5.072 5.55e-07 ***
## esta_desempleadoSi              0.194267   0.158976   1.222  0.22229    
## dosis1                          0.411595   0.295697   1.392  0.16455    
## dosis2                          0.266304   0.220448   1.208  0.22761    
## dosis3                          0.286862   0.242959   1.181  0.23828    
## dosis4                          0.332474   0.252848   1.315  0.18914    
## prev_per_dicotSi                1.245975   0.142208   8.762  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.386 on 502 degrees of freedom
## Multiple R-squared:  0.2947, Adjusted R-squared:  0.2779 
## F-statistic: 17.48 on 12 and 502 DF,  p-value: < 2.2e-16
# Backward selection
modelo5_puntaje_c <- lm(puntaje_C ~ exposicion + 
                   # genero 
                   edad + nivel_edu_reagrupado + 
                   #enfcro_dicot + 
                   area + esta_desempleado + 
                   # ingreso + 
                   # part_prev +  <- ELIMINADA
                   dosis + prev_per_dicot, 
                   data = CAP_modif)
summary(modelo5_puntaje_c)
## 
## Call:
## lm(formula = puntaje_C ~ exposicion + edad + nivel_edu_reagrupado + 
##     area + esta_desempleado + dosis + prev_per_dicot, data = CAP_modif)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.0343 -0.9886  0.1782  0.9262  3.8070 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     6.226832   0.332484  18.728  < 2e-16 ***
## exposicionSi                   -0.380205   0.138589  -2.743  0.00630 ** 
## edad                           -0.009337   0.005007  -1.865  0.06279 .  
## nivel_edu_reagrupadoSecundaria  0.292996   0.163000   1.798  0.07285 .  
## nivel_edu_reagrupadoSuperior    0.774621   0.240304   3.223  0.00135 ** 
## areaUrbana                      0.714257   0.140277   5.092 5.02e-07 ***
## esta_desempleadoSi              0.185834   0.158216   1.175  0.24073    
## dosis1                          0.404644   0.295264   1.370  0.17116    
## dosis2                          0.266314   0.220303   1.209  0.22729    
## dosis3                          0.279099   0.242437   1.151  0.25019    
## dosis4                          0.327667   0.252549   1.297  0.19507    
## prev_per_dicotSi                1.248500   0.142049   8.789  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.386 on 503 degrees of freedom
## Multiple R-squared:  0.2942, Adjusted R-squared:  0.2788 
## F-statistic: 19.06 on 11 and 503 DF,  p-value: < 2.2e-16
# Backward selection
modelo6_puntaje_c <- lm(puntaje_C ~ exposicion + 
                   # genero 
                   edad + nivel_edu_reagrupado + 
                   #enfcro_dicot + 
                   area + esta_desempleado + 
                   # ingreso + 
                   # part_prev +  <- ELIMINADA
                   # dosis + 
                   prev_per_dicot, 
                   data = CAP_modif)
summary(modelo6_puntaje_c)
## 
## Call:
## lm(formula = puntaje_C ~ exposicion + edad + nivel_edu_reagrupado + 
##     area + esta_desempleado + prev_per_dicot, data = CAP_modif)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.2652 -0.9767  0.1665  0.9308  3.5801 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     6.458947   0.280906  22.993  < 2e-16 ***
## exposicionSi                   -0.334229   0.134276  -2.489  0.01313 *  
## edad                           -0.009103   0.004634  -1.964  0.05004 .  
## nivel_edu_reagrupadoSecundaria  0.279581   0.162080   1.725  0.08514 .  
## nivel_edu_reagrupadoSuperior    0.728737   0.237368   3.070  0.00225 ** 
## areaUrbana                      0.745311   0.137419   5.424 9.05e-08 ***
## esta_desempleadoSi              0.167662   0.155770   1.076  0.28229    
## prev_per_dicotSi                1.246443   0.140824   8.851  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.383 on 507 degrees of freedom
## Multiple R-squared:  0.2909, Adjusted R-squared:  0.2811 
## F-statistic: 29.71 on 7 and 507 DF,  p-value: < 2.2e-16
# Backward selection
modelo7_puntaje_c <- lm(puntaje_C ~ exposicion + 
                   # genero 
                   edad + 
                   nivel_edu_reagrupado + 
                   # enfcro_dicot + 
                   area +
                   empleo + 
                   # ingreso + 
                   # part_prev +  <- ELIMINADA
                   # dosis + 
                   prev_per_dicot, 
                   data = CAP_modif)
summary(modelo7_puntaje_c)
## 
## Call:
## lm(formula = puntaje_C ~ exposicion + edad + nivel_edu_reagrupado + 
##     area + empleo + prev_per_dicot, data = CAP_modif)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.3590 -0.9865  0.1369  0.9542  3.4957 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     6.621231   0.333253  19.868  < 2e-16 ***
## exposicionSi                   -0.374198   0.135888  -2.754  0.00610 ** 
## edad                           -0.008545   0.005519  -1.548  0.12221    
## nivel_edu_reagrupadoSecundaria  0.277143   0.161648   1.714  0.08705 .  
## nivel_edu_reagrupadoSuperior    0.701024   0.237084   2.957  0.00325 ** 
## areaUrbana                      0.784241   0.138214   5.674 2.35e-08 ***
## empleoEmpleo                   -0.095018   0.159834  -0.594  0.55246    
## empleoEn retiro                -0.441208   0.288912  -1.527  0.12735    
## empleoSolo estudia             -0.521416   0.291692  -1.788  0.07445 .  
## prev_per_dicotSi                1.191373   0.143067   8.327 7.82e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.38 on 505 degrees of freedom
## Multiple R-squared:  0.2975, Adjusted R-squared:  0.285 
## F-statistic: 23.76 on 9 and 505 DF,  p-value: < 2.2e-16
# Backward selection
modelo8_puntaje_c <- lm(puntaje_C ~ exposicion + 
                   # genero 
                   edad + 
                   nivel_edu_reagrupado + 
                   # enfcro_dicot + 
                   area +
                   empleo + 
                   # ingreso + 
                   # part_prev +  <- ELIMINADA
                   # dosis + 
                   prev_per_dicot +
                   mortalidad +
                   prev_fam_dicot, 
                   data = CAP_modif)
summary(modelo8_puntaje_c)
## 
## Call:
## lm(formula = puntaje_C ~ exposicion + edad + nivel_edu_reagrupado + 
##     area + empleo + prev_per_dicot + mortalidad + prev_fam_dicot, 
##     data = CAP_modif)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.3092 -0.9774  0.1068  0.9598  3.5436 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     6.572583   0.332278  19.780  < 2e-16 ***
## exposicionSi                   -0.357314   0.135930  -2.629 0.008834 ** 
## edad                           -0.008659   0.005494  -1.576 0.115665    
## nivel_edu_reagrupadoSecundaria  0.284839   0.161022   1.769 0.077509 .  
## nivel_edu_reagrupadoSuperior    0.686323   0.236508   2.902 0.003872 ** 
## areaUrbana                      0.802709   0.137967   5.818 1.06e-08 ***
## empleoEmpleo                   -0.097916   0.159113  -0.615 0.538576    
## empleoEn retiro                -0.439251   0.287650  -1.527 0.127381    
## empleoSolo estudia             -0.518065   0.291573  -1.777 0.076207 .  
## prev_per_dicotSi                0.804670   0.208006   3.869 0.000124 ***
## mortalidadSi                    0.154225   0.309960   0.498 0.619009    
## prev_fam_dicotSi                0.497724   0.207621   2.397 0.016882 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.373 on 503 degrees of freedom
## Multiple R-squared:  0.3067, Adjusted R-squared:  0.2915 
## F-statistic: 20.22 on 11 and 503 DF,  p-value: < 2.2e-16

4.7. Diagnóstico del modelo

Solo hace falta verificar si se cunplen los supuestos para correr el modelo y para confiar en la validez, robustez y viabilidad del modelo

# 1. Asegúrate de que tu modelo final esté en la memoria
modelo_final_definitivo <- lm(puntaje_C ~ 
                                exposicion + 
                                edad + 
                                nivel_edu_reagrupado + 
                                area + 
                                empleo + 
                                prev_per_dicot +
                                prev_fam_dicot,
                              data = CAP_modif)

# 2. Configura la ventana de gráficos para mostrar 4 gráficos (2x2)
par(mfrow = c(1, 1))

# 3. Genera los 4 gráficos de diagnóstico
plot(modelo_final_definitivo)

tidy(modelo_final_definitivo)
## # A tibble: 11 × 5
##    term                           estimate std.error statistic  p.value
##    <chr>                             <dbl>     <dbl>     <dbl>    <dbl>
##  1 (Intercept)                     6.57      0.332      19.8   5.91e-65
##  2 exposicionSi                   -0.352     0.135      -2.60  9.58e- 3
##  3 edad                           -0.00867   0.00549    -1.58  1.15e- 1
##  4 nivel_edu_reagrupadoSecundaria  0.282     0.161       1.75  8.01e- 2
##  5 nivel_edu_reagrupadoSuperior    0.694     0.236       2.94  3.41e- 3
##  6 areaUrbana                      0.798     0.138       5.80  1.15e- 8
##  7 empleoEmpleo                   -0.0984    0.159      -0.619 5.36e- 1
##  8 empleoEn retiro                -0.442     0.287      -1.54  1.25e- 1
##  9 empleoSolo estudia             -0.505     0.290      -1.74  8.23e- 2
## 10 prev_per_dicotSi                0.808     0.208       3.89  1.13e- 4
## 11 prev_fam_dicotSi                0.516     0.204       2.53  1.17e- 2
glance(modelo_final_definitivo)
## # A tibble: 1 × 12
##   r.squared adj.r.squared sigma statistic  p.value    df logLik   AIC   BIC
##       <dbl>         <dbl> <dbl>     <dbl>    <dbl> <dbl>  <dbl> <dbl> <dbl>
## 1     0.306         0.293  1.37      22.3 1.50e-34    10  -888. 1800. 1851.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>

5. Tu turno

Ahora debes ajustar un modelo para la variable Puntaje de Actitudes (puntaje_A) y Puntaje de Prácticas (Puntaje_P). Esto te servirá para tu informe final de resultados.

##¡Manos a la obra!