lm()Analítica de Personas · Semestre otoño 2026 · Semana 5 · Prof. René Gempp
La regresión lineal responde una pregunta del tipo: "¿qué explica la variación de Y, y cuánto aporta cada variable a esa explicación?". En people analytics, las preguntas típicas son:
La regresión lineal exige una variable dependiente continua (salario, puntaje de engagement, horas de capacitación, etc.). Cuando la VD es binaria, usamos regresión logística (Apunte 09). La sintaxis en R es casi idéntica.
lm()# Estructura general
modelo <- lm(VD ~ VI1 + VI2 + VI3, data = mi_base)
# Ejemplo: salario en función del género
modelo_1 <- lm(log(ingreso_mensual) ~ genero, data = empleados)
glm():
La sintaxis es la misma que aprendiste para la regresión logística en la Clase 3. La única diferencia es que lm() no necesita argumento family: por defecto asume una distribución normal de los residuos. glm(VD ~ VI, family = binomial) ⇒ logística; lm(VD ~ VI) ⇒ lineal.
summary()summary(modelo_1)
Cómo se lee, línea por línea:
| Elemento | Qué significa |
|---|---|
Call | El modelo que ajustaste. Verifica que sea el que querías. |
Residuals | Resumen de los errores del modelo. Buscamos mediana cercana a 0 y cuartiles aproximadamente simétricos. |
(Intercept) | Valor predicho de la VD cuando todas las VI categóricas están en su nivel de referencia y las numéricas valen 0. |
Estimate | El coeficiente β: cuánto cambia la VD por una unidad de cambio en esa VI. |
Std. Error | Cuán precisa es esa estimación. Más pequeño = más preciso. |
t value | Estimate / Std. Error. Indica cuántos errores estándar se aleja el coeficiente de cero. |
Pr(>|t|) | p-value: probabilidad de observar un t así de extremo si la verdadera β fuera cero. Menor a 0.05 ⇒ significativo (Apunte 07). |
R-squared | Proporción de la varianza de la VD explicada por el modelo. Va de 0 a 1. |
Adjusted R² | R² penalizado por el número de predictores. Es el que se debe reportar en modelos con varios predictores. |
F-statistic | Test global del modelo: ¿al menos un predictor es útil? Su p-value debe ser pequeño. |
Cuando una variable es categórica (texto), R crea automáticamente variables dummy y elige una categoría como referencia. Por defecto, R toma la categoría que viene primero alfabéticamente.
# En empleados$genero hay dos niveles: "Hombre" y "Mujer"
# R toma "Hombre" como referencia (por orden alfabético)
# Por eso aparece "generoMujer" en el output, pero NO "generoHombre"
fct_relevel():
empleados <- empleados |>
mutate(genero = fct_relevel(genero, "Mujer"))
Para una variable con k categorías, R crea k − 1 dummies. Por ejemplo, nivel_jerarquico tiene 4 niveles (Operativo, Profesional, Jefatura, Gerencia), por lo que en el output verás 3 coeficientes: nivel_jerarquicoOperativo, nivel_jerarquicoProfesional, nivel_jerarquicoJefatura. La categoría que falta (Gerencia) es la referencia.
modelo_2 <- lm(
log(ingreso_mensual) ~ genero + nivel_jerarquico + departamento +
antiguedad_anios + edad + nivel_educacion +
evaluacion_desempeno,
data = empleados
)
summary(modelo_2)
Ejemplo concreto: si en el Modelo 2 el coeficiente de generoMujer vale −0,08, lo leemos así:
"A igualdad de nivel jerárquico, departamento, antigüedad, edad, educación y desempeño, las mujeres ganan en promedio aproximadamente un 8% menos que los hombres en InnovaCo."
En el ejemplo anterior usamos log(ingreso_mensual) como variable dependiente, no ingreso_mensual directo. Tres razones:
Los salarios típicamente tienen una cola larga a la derecha (pocas personas con sueldos muy altos). Un histograma de ingreso_mensual se ve sesgado; un histograma de log(ingreso_mensual) se aproxima a una normal. Los modelos lineales asumen residuos aproximadamente normales.
Cuando la VD es log(Y), un coeficiente β se interpreta como un cambio porcentual en Y, no como un cambio en pesos. La aproximación es:
| Coeficiente β | Interpretación aproximada | Cálculo exacto |
|---|---|---|
| −0.05 | ≈ 5% menos | (exp(−0.05) − 1) × 100 = −4.9% |
| −0.08 | ≈ 8% menos | (exp(−0.08) − 1) × 100 = −7.7% |
| +0.10 | ≈ 10% más | (exp(0.10) − 1) × 100 = +10.5% |
| +0.30 | ≈ 30% más (impreciso) | (exp(0.30) − 1) × 100 = +35.0% |
(exp(β) − 1) × 100.
En escala original, los errores del modelo crecen con el salario (alguien que gana 10 millones puede tener residuos de cientos de miles; alguien que gana 600 mil tiene residuos mucho menores). En escala log, esos errores tienden a estabilizarse, cumpliendo mejor el supuesto de homocedasticidad (Apunte 12).
| Quiero... | Función |
|---|---|
| Ajustar el modelo | lm(VD ~ VI1 + VI2, data = ...) |
| Ver coeficientes, R², F | summary(modelo) |
| Tabla ordenada de coeficientes | broom::tidy(modelo, conf.int = TRUE) (Apunte 13) |
| R², AIC, BIC en una fila | broom::glance(modelo) (Apunte 13) |
| Residuos y valores ajustados | broom::augment(modelo) (Apunte 12) |
| Multicolinealidad | car::vif(modelo) (Apunte 12) |
| Predicción para nuevos casos | predict(modelo, newdata = ...) |
| Especificar interacciones | VI1 * VI2 (Apunte 13) |
| Comparar dos modelos anidados | anova(modelo_1, modelo_2) |