El modelo lineal normal como base para comprender los GLM

EP7120-Modelos Lineales Generalizados Aplicados

Enver Gerald Tarazona Vargas

Universidad Nacional Agraria La Molina (UNALM), Perú

Del modelo lineal normal a los GLM: motivación y lógica general

Punto de partida: una pregunta de modelación

En regresión se parte de preguntas como:

  • ¿cómo cambia una respuesta cuando cambian ciertas covariables?
  • ¿qué variables explican mejor la variación observada?
  • ¿cuál es el efecto esperado de una covariable sobre la respuesta?
  • ¿cómo comparar grupos controlando por otras variables?
  • ¿cómo predecir la respuesta bajo condiciones dadas?

Estas preguntas requieren un modelo estadístico que conecte respuesta, covariables e incertidumbre.

¿Qué es un modelo estadístico?

Los modelos estadísticos se construyen a partir de modelos de probabilidad.

Los datos observados se tratan como realizaciones de variables aleatorias:

\[ Y_1,\ldots,Y_n \]

donde cada \(Y_i\) representa la información recogida para la \(i\)-ésima unidad observada.

El supuesto central es que:

\[ Y=(Y_1,\ldots,Y_n) \]

es generado por un modelo de probabilidad \(P\).

El problema estadístico

Si el modelo de probabilidad \(P\) fuera completamente conocido, no habría un problema estadístico de estimación.

El problema aparece cuando existe incertidumbre sobre \(P\).

En ese caso, se considera que \(P\) pertenece a una familia de modelos:

\[ \mathcal{M}=\{P_\theta:\theta \in \Theta\} \]

donde:

  • \(\theta\) representa un parámetro desconocido;
  • \(\Theta\) es el espacio paramétrico;
  • el análisis estadístico busca aprender sobre \(\theta\) a partir de los datos.

Modelos paramétricos

Un modelo es paramétrico cuando puede describirse mediante un número finito de parámetros.

En general, se representa como:

\[ \mathcal{M}=\{P_\theta:\theta \in \Theta \subset \mathbb{R}^p\} \]

donde:

  • \(p\) es la dimensión del vector de parámetros;
  • \(\theta\) contiene las cantidades desconocidas del modelo;
  • cada valor de \(\theta\) determina un modelo de probabilidad dentro de la familia.

En este marco, el análisis se concentra en estimar o contrastar valores posibles de \(\theta\).

Ejemplo: modelo normal

Un ejemplo básico de modelo paramétrico es:

\[ Y_1,\ldots,Y_n \overset{iid}{\sim} N(\mu,\sigma^2) \]

En este caso:

\[ \theta=(\mu,\sigma^2) \]

El modelo queda determinado por un número finito de parámetros.

El interés estadístico puede estar en estimar \(\mu\), estimar \(\sigma^2\) o contrastar hipótesis sobre estos parámetros.

Ejemplo: regresión lineal

En regresión, la distribución de la respuesta puede depender de covariables observadas.

Un ejemplo paramétrico es:

\[ Y_i \mid x_i \overset{ind}{\sim} N(\beta_0+\beta_1x_i,\sigma^2), \quad i=1,\ldots,n \]

En este caso, el parámetro desconocido es:

\[ \theta=(\beta_0,\beta_1,\sigma^2) \]

La media de la respuesta depende de \(x_i\) mediante una estructura lineal.

Modelos no paramétricos

En algunos problemas, restringir el análisis a una forma paramétrica específica puede ser demasiado limitado.

Los modelos no paramétricos buscan relajar esa restricción.

En estos modelos, la clase de distribuciones posibles es más amplia y el parámetro puede ser de dimensión infinita.

Por ejemplo, en regresión puede asumirse:

\[ Y_i \mid x_i \overset{ind}{\sim} N(m(x_i),\sigma^2) \]

donde \(m\) es una función desconocida.

Regresión paramétrica y no paramétrica

En regresión paramétrica, la forma de la relación se especifica mediante un número finito de parámetros.

Por ejemplo:

\[ E(Y_i \mid x_i)=\beta_0+\beta_1x_i \]

En regresión no paramétrica, la forma funcional es más flexible:

\[ E(Y_i \mid x_i)=m(x_i) \]

En este curso se trabajará principalmente con modelos paramétricos de regresión, donde la media de la respuesta se relaciona con covariables mediante una estructura especificada.

Estructura general de un modelo de regresión

Un modelo de regresión puede representarse, de manera general, como:

\[ Y_i = m(\mathbf{x}_i) + \varepsilon_i, \quad i = 1, \ldots, n \]

donde:

  • \(Y_i\): variable respuesta;
  • \(\mathbf{x}_i\): vector de variables explicativas;
  • \(m(\mathbf{x}_i)\): componente sistemático, explicado por las variables observadas;
  • \(\varepsilon_i\): componente aleatorio, no explicado por el modelo.

El modelo permite estudiar cómo cambia la respuesta según las variables explicativas, separando la parte estructurada de la variabilidad residual.

Media condicional

En un modelo de regresión, una formulación usual es modelar el comportamiento esperado de la respuesta dadas las variables explicativas:

\[ \mu_i = E(Y_i \mid \mathbf{x}_i) \]

donde:

  • \(\mu_i\): media condicional de la respuesta;
  • \(E(Y_i \mid \mathbf{x}_i)\): valor esperado de \(Y_i\) dados los valores de las variables explicativas.

A partir del modelo general:

\[ Y_i = m(\mathbf{x}_i) + \varepsilon_i \]

si \(E(\varepsilon_i)=0\), entonces:

\[ \mu_i = m(\mathbf{x}_i) \]

Por tanto, el componente sistemático representa el comportamiento esperado de la respuesta.

Explicar, estimar y predecir

A partir de un modelo de regresión, pueden distinguirse tres objetivos relacionados:

  • Explicar: describir cómo se relaciona la respuesta con las variables explicativas.
  • Estimar: obtener valores para los parámetros desconocidos del modelo.
  • Predecir: usar el modelo ajustado para anticipar valores de la respuesta bajo ciertas condiciones.

Estas tareas no son equivalentes.

Un mismo modelo puede ser útil para predicción, pero requerir cautela para interpretar efectos o establecer conclusiones sustantivas.

Tipos de respuesta en problemas de regresión

La variable respuesta no siempre tiene la misma naturaleza.

En aplicaciones reales puede ser:

  • continua;
  • binaria;
  • de conteo;
  • una proporción;
  • una tasa;
  • positiva y asimétrica.

El tipo de respuesta condiciona la forma del modelo, la distribución asumida, la estructura de la varianza y las herramientas de diagnóstico.

Necesidad de una clase más general de modelos

El modelo de regresión debe ser coherente con la naturaleza de la respuesta.

Cuando la respuesta no es continua o cuando su variabilidad cambia con el nivel esperado de la respuesta, una formulación normal con varianza constante puede ser insuficiente.

Por ello, se requiere una clase de modelos que permita:

  • mantener la lógica de regresión;
  • incorporar distintas distribuciones para la respuesta;
  • relacionar el comportamiento esperado de la respuesta con las variables explicativas;
  • adaptar la estimación, inferencia y diagnóstico al tipo de dato.

Elementos que se reutilizarán en GLM

Al pasar a modelos lineales generalizados se mantienen varios elementos de la lógica de regresión:

  • variable respuesta;
  • variables explicativas;
  • media condicional;
  • componente sistemático;
  • parámetros desconocidos;
  • estimación;
  • inferencia;
  • diagnóstico;
  • comparación de modelos.

Lo que cambia es la forma probabilística y la relación entre la media y el componente sistemático.

Pregunta de transición

La transición hacia los modelos lineales generalizados se organiza a partir de tres preguntas:

  • ¿qué distribución es adecuada para la respuesta?
  • ¿cómo se relaciona la media condicional con las variables explicativas?
  • ¿cómo cambia la varianza según el comportamiento esperado de la respuesta?

Estas preguntas permiten pasar del modelo lineal normal a una familia más amplia de modelos de regresión.

Formulación y estimación del modelo lineal normal

Modelo lineal normal

El modelo lineal normal se define como:

\[ Y_i = \mathbf{x}_i^\top \boldsymbol{\beta} + \varepsilon_i, \quad i = 1,\ldots,n \]

donde:

  • \(Y_i\): variable respuesta;
  • \(\mathbf{x}_i\): vector de variables explicativas;
  • \(\boldsymbol{\beta}\): vector de parámetros desconocidos;
  • \(\varepsilon_i\): error aleatorio.

Se asume que:

\[ \varepsilon_i \overset{iid}{\sim} N(0,\sigma^2) \]

Media y varianza condicional

A partir del modelo:

\[ Y_i = \mathbf{x}_i^\top \boldsymbol{\beta} + \varepsilon_i \]

si:

\[ E(\varepsilon_i)=0 \]

entonces:

\[ E(Y_i \mid \mathbf{x}_i)=\mu_i=\mathbf{x}_i^\top \boldsymbol{\beta} \]

Además, bajo el supuesto de varianza constante:

\[ \operatorname{Var}(Y_i \mid \mathbf{x}_i)=\sigma^2 \]

Por tanto, el modelo especifica una media lineal y una varianza constante.

Distribución condicional de la respuesta

Bajo los supuestos del modelo lineal normal:

\[ \varepsilon_i \overset{iid}{\sim} N(0,\sigma^2) \]

se obtiene:

\[ Y_i \mid \mathbf{x}_i \sim N(\mu_i,\sigma^2) \]

con:

\[ \mu_i=\mathbf{x}_i^\top \boldsymbol{\beta} \]

Así, la respuesta condicionada a las variables explicativas sigue una distribución normal con media dependiente de las covariables y varianza constante.

Forma matricial del modelo

Para las \(n\) observaciones, el modelo puede escribirse como:

\[ \mathbf{Y}=X\boldsymbol{\beta}+\boldsymbol{\varepsilon} \]

donde:

  • \(\mathbf{Y}\): vector de respuestas;
  • \(X\): matriz de diseño;
  • \(\boldsymbol{\beta}\): vector de parámetros;
  • \(\boldsymbol{\varepsilon}\): vector de errores.

Bajo normalidad:

\[ \boldsymbol{\varepsilon}\sim N_n(\mathbf{0},\sigma^2 I_n) \]

y, por tanto:

\[ \mathbf{Y}\mid X \sim N_n(X\boldsymbol{\beta},\sigma^2 I_n) \]

Matriz de diseño

La matriz de diseño organiza los valores observados de las variables explicativas:

\[ X = \begin{pmatrix} \mathbf{x}_1^\top \\ \mathbf{x}_2^\top \\ \vdots \\ \mathbf{x}_n^\top \end{pmatrix} = \begin{pmatrix} x_{11} & x_{12} & \cdots & x_{1p} \\ x_{21} & x_{22} & \cdots & x_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{np} \end{pmatrix} \]

Cada fila corresponde a una observación.

Cada columna corresponde a una variable explicativa, una codificación, una transformación o una interacción.

Si el modelo incluye intercepto, una columna de \(X\) está formada por unos.

Predictor lineal

El predictor lineal de la observación \(i\) es:

\[ \eta_i=\mathbf{x}_i^\top \boldsymbol{\beta} \]

En el modelo lineal normal:

\[ \mu_i=\eta_i \]

es decir:

\[ E(Y_i\mid \mathbf{x}_i)=\mathbf{x}_i^\top \boldsymbol{\beta} \]

Por tanto, la media condicional se modela directamente mediante una combinación lineal de las variables explicativas.

Estimación y supuestos: recordatorio

En el modelo lineal normal, la estimación clásica se basa en mínimos cuadrados:

\[ \widehat{\boldsymbol{\beta}} = (X^\top X)^{-1}X^\top \mathbf{y} \]

bajo los supuestos usuales:

  • linealidad de la media;
  • errores con media cero;
  • varianza constante;
  • independencia;
  • normalidad de los errores.

Estos elementos no se desarrollan nuevamente aquí; se retoman porque permiten comparar el modelo lineal normal con los GLM.

Modelo ajustado

Una vez estimado el vector de parámetros, el modelo ajustado se expresa como:

\[ \widehat{\mu}_i = \mathbf{x}_i^\top \widehat{\boldsymbol{\beta}}, \quad i = 1,\ldots,n \]

o, equivalentemente:

\[ \widehat{Y}_i = \mathbf{x}_i^\top \widehat{\boldsymbol{\beta}} \]

donde:

  • \(\widehat{\mu}_i\): media estimada de la respuesta para la observación \(i\);
  • \(\widehat{Y}_i\): valor ajustado por el modelo;
  • \(\widehat{\boldsymbol{\beta}}\): vector de coeficientes estimados.

El modelo ajustado permite pasar de la formulación teórica a la interpretación empírica.

Interpretación de los coeficientes estimados

En el modelo ajustado:

\[ \widehat{\mu}_i = \widehat{\beta}_1 x_{i1} + \widehat{\beta}_2 x_{i2} + \cdots + \widehat{\beta}_p x_{ip} \]

cada coeficiente estimado \(\widehat{\beta}_j\) representa el cambio esperado en la media de la respuesta asociado a una unidad adicional de \(x_{ij}\), manteniendo constantes las demás variables explicativas.

La interpretación depende de:

  • la escala de la respuesta;
  • la escala de la variable explicativa;
  • la codificación usada;
  • las demás variables incluidas en el modelo;
  • el contexto aplicado del problema.

Valores ajustados y residuos

Los valores ajustados se obtienen mediante:

\[ \widehat{\mathbf{y}}=X\widehat{\boldsymbol{\beta}} \]

El vector de residuos ordinarios es:

\[ \mathbf{r}=\mathbf{y}-\widehat{\mathbf{y}} \]

Los residuos resumen la parte de la respuesta observada que no es explicada por el modelo ajustado.

Esta idea será central para el diagnóstico del modelo.

Mínimos cuadrados y máxima verosimilitud

Bajo errores normales, la estimación de \(\boldsymbol{\beta}\) por mínimos cuadrados coincide con la estimación por máxima verosimilitud.

Esta conexión es importante porque los MLG se formulan a partir de máxima verosimilitud.

En el modelo lineal normal se dispone de una solución explícita para los coeficientes.

En los MLG, la estimación se obtiene usualmente mediante procedimientos iterativos.

Regresión lineal simple como caso particular

La regresión lineal simple corresponde al caso con una sola variable explicativa:

\[ Y_i = \beta_1 + \beta_2 x_i + \varepsilon_i, \quad i=1,\ldots,n \]

donde:

  • \(\beta_1\): intercepto;
  • \(\beta_2\): pendiente;
  • \(x_i\): valor observado de la variable explicativa;
  • \(\varepsilon_i\): error aleatorio.

Este caso permite visualizar la relación entre respuesta, media ajustada y residuo.

Interpretación de la pendiente

En el modelo:

\[ Y_i = \beta_1 + \beta_2 x_i + \varepsilon_i \]

la pendiente \(\beta_2\) representa el cambio esperado en la respuesta cuando la variable explicativa aumenta en una unidad.

La interpretación depende de:

  • la escala de \(Y_i\);
  • la escala de \(x_i\);
  • el contexto del problema;
  • la validez del supuesto de relación lineal.

En el modelo múltiple, esta interpretación se extiende considerando las demás covariables constantes.

Coeficiente de determinación

Con intercepto en el modelo, la variabilidad total se descompone como:

\[ \underbrace{\sum_{i=1}^{n}(y_i-\bar{y})^2}_{SQT} = \underbrace{\sum_{i=1}^{n}(\widehat{y}_i-\bar{y})^2}_{SQReg} + \underbrace{\sum_{i=1}^{n}(y_i-\widehat{y}_i)^2}_{SQRes} \]

Por tanto, el coeficiente de determinación se calcula como:

\[ R^2 = \frac{SQReg}{SQT} = 1-\frac{SQRes}{SQT} \]

El \(R^2\) mide la proporción de la variabilidad total de la respuesta explicada por el modelo ajustado.

Coeficiente de determinación ajustado

El coeficiente de determinación ajustado se calcula como:

\[ \bar{R}^2 = 1-\frac{QMRes}{QMT} \]

donde:

\[ QMRes=\frac{SQRes}{n-p} \qquad \text{y} \qquad QMT=\frac{SQT}{n-1} \]

Equivalentemente:

\[ \bar{R}^2 = 1- (1-R^2) \frac{n-1}{n-p} \]

El \(R^2\) ajustado penaliza la incorporación de parámetros y permite comparar modelos con distinta complejidad.

Ejemplo 1: Venta de tejados

El objetivo es explicar el número medio de tejados vendidos en una red de tiendas de construcción, a partir de características comerciales de cada filial.

Se trabajará con el archivo vendas.txt, que contiene información de (n=26) filiales. Los datos corresponden a la venta anual de un tipo de tejado de madera, reportados originalmente por Neter et al. (1996, p. 449) y retomados en Paula, sección 1.14.1.

Variable respuesta:

  • telhados: total de tejados vendidos, en miles de metros cuadrados.

Variables explicativas:

  • clientes: número de clientes registrados en la tienda, en miles;
  • gastos: gastos de promoción del producto, en miles de dólares;
  • marcas: número de marcas competidoras;
  • potencial: potencial de la tienda; valores más altos indican mayor potencial.

Ejemplo 1: Exploración inicial de las variables

Antes de ajustar el modelo, se revisan las principales medidas descriptivas de las variables del ejemplo.

Ver código en R
library(dplyr)
library(knitr)

vendas <- read.table("vendas.txt", header = TRUE)

tabla_desc <- data.frame(
  Variable = c("telhados", "clientes", "gastos", "marcas", "potencial"),
  Media = c(
    mean(vendas$telhados),
    mean(vendas$clientes),
    mean(vendas$gastos),
    mean(vendas$marcas),
    mean(vendas$potencial)
  ),
  `Desv. estándar` = c(
    sd(vendas$telhados),
    sd(vendas$clientes),
    sd(vendas$gastos),
    sd(vendas$marcas),
    sd(vendas$potencial)
  ),
  Mínimo = c(
    min(vendas$telhados),
    min(vendas$clientes),
    min(vendas$gastos),
    min(vendas$marcas),
    min(vendas$potencial)
  ),
  Mediana = c(
    median(vendas$telhados),
    median(vendas$clientes),
    median(vendas$gastos),
    median(vendas$marcas),
    median(vendas$potencial)
  ),
  Máximo = c(
    max(vendas$telhados),
    max(vendas$clientes),
    max(vendas$gastos),
    max(vendas$marcas),
    max(vendas$potencial)
  )
)

kable(
  tabla_desc,
  digits = 2,
  align = "lrrrrr"
)
Variable Media Desv..estándar Mínimo Mediana Máximo
telhados 170.21 84.55 30.9 159.8 339.4
clientes 51.85 14.21 26.0 51.5 75.0
gastos 5.41 1.83 2.5 5.5 9.0
marcas 9.12 2.58 4.0 9.0 13.0
potencial 9.88 4.73 3.0 9.0 19.0

La tabla permite revisar la magnitud, dispersión y rango de las variables antes de formular el modelo.

Ejemplo 1: Distribución de telhados

Ver código en R
library(robustbase)

par(mfrow = c(1, 2))

adjbox(
  vendas$telhados,
  main = "Boxplot ajustado",
  ylab = "Tejados vendidos"
)

hist(
  vendas$telhados,
  probability = TRUE,
  main = "Distribución de telhados",
  xlab = "Tejados vendidos",
  ylab = "Densidad",
  breaks = 8
)

lines(
  density(vendas$telhados),
  lwd = 2
)

Ejemplo 1: Lectura de la distribución de telhados

En la distribución de telhados se observa:

  • ausencia de observaciones aberrantes evidentes según el boxplot ajustado;
  • ligera asimetría hacia la derecha;
  • dispersión importante en las ventas entre filiales.

La revisión gráfica sugiere que la respuesta puede tratarse inicialmente como continua para el ajuste del modelo lineal normal.

Ejemplo 1: Relaciones bivariadas con la respuesta

Ver código en R
library(ggplot2)
library(patchwork)

p1 <- ggplot(vendas, aes(x = clientes, y = telhados)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  labs(x = "Clientes registrados", y = "Tejados vendidos")

p2 <- ggplot(vendas, aes(x = gastos, y = telhados)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  labs(x = "Gastos de promoción", y = "Tejados vendidos")

p3 <- ggplot(vendas, aes(x = marcas, y = telhados)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  labs(x = "Marcas competidoras", y = "Tejados vendidos")

p4 <- ggplot(vendas, aes(x = potencial, y = telhados)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  labs(x = "Potencial de la tienda", y = "Tejados vendidos")

(p1 | p2) / (p3 | p4)

Ejemplo 1: Lectura de las relaciones bivariadas

  • La relación con clientes es claramente positiva: las filiales con más clientes registrados tienden a vender más tejados.

  • La relación con marcas es negativa: a mayor número de marcas competidoras, menor venta observada de tejados.

  • Las relaciones con gastos y potencial parecen positivas, pero visualmente son más débiles y con mayor dispersión.

  • Esta exploración sugiere que clientes y marcas podrían tener mayor aporte explicativo en el modelo múltiple.

Ejemplo 1: Matriz de correlaciones

Ver código en R
library(knitr)

cor(vendas[, c("telhados", "gastos", "clientes", "marcas", "potencial")]) |>
  round(3) |>
  kable()
telhados gastos clientes marcas potencial
telhados 1.000 0.159 0.783 -0.833 0.407
gastos 0.159 1.000 0.173 -0.038 -0.071
clientes 0.783 0.173 1.000 -0.324 0.468
marcas -0.833 -0.038 -0.324 1.000 -0.202
potencial 0.407 -0.071 0.468 -0.202 1.000

Ejemplo 1: Lectura de la matriz de correlaciones

En la matriz de correlaciones de Pearson se observa:

  • baja correlación entre telhados y gastos;
  • altas correlaciones entre telhados con clientes y marcas;
  • correlación moderada entre telhados y potencial;
  • correlaciones bajas entre las variables explicativas, excepto una correlación moderada entre clientes y potencial.

Estas correlaciones son coherentes con los diagramas de dispersión presentados a continuación.

Ejemplo 1: Modelo propuesto

Para la filial \(i\), sea \(Y_i\) el total de tejados vendidos.

Se propone el modelo lineal normal:

\[ Y_i = \beta_1 + \beta_2 gastos_i + \beta_3 clientes_i + \beta_4 marcas_i + \varepsilon_i, \quad i = 1, \ldots, 26 \]

con:

\[ \varepsilon_i \overset{iid}{\sim} N(0,\sigma^2) \]

Por tanto:

\[ E(Y_i \mid gastos_i, clientes_i, marcas_i) = \beta_1 + \beta_2 gastos_i + \beta_3 clientes_i + \beta_4 marcas_i \]

El modelo busca explicar el número medio de tejados vendidos a partir de gastos, clientes y marcas.

Ejemplo 1: Modelo ajustado

Ver código en R
mod_tejados <- lm(
  telhados ~ gastos + clientes + marcas,
  data = vendas
)

summary(mod_tejados)

Call:
lm(formula = telhados ~ gastos + clientes + marcas, data = vendas)

Residuals:
     Min       1Q   Median       3Q      Max 
-20.4450  -4.6552   0.6802   6.1668  14.3571 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 179.8443    12.6213  14.249 1.37e-12 ***
gastos        1.6772     1.0521   1.594    0.125    
clientes      3.3694     0.1432  23.524  < 2e-16 ***
marcas      -21.2165     0.7773 -27.295  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 9.491 on 22 degrees of freedom
Multiple R-squared:  0.9889,    Adjusted R-squared:  0.9874 
F-statistic: 654.1 on 3 and 22 DF,  p-value: < 2.2e-16

Ejemplo 1: Ecuación estimada e interpretación de los coeficientes

A partir del modelo ajustado, se obtiene:

\[ \widehat{\mu}_i = 179.844 + 1.677 gastos_i + 3.369 clientes_i - 21.217 marcas_i \]

donde \(\widehat{\mu}_i\) representa el número medio estimado de tejados vendidos para la filial \(i\).

Interpretación: Manteniendo constantes las demás variables:

  • por cada mil dólares adicionales en gastos de promoción, la venta media estimada aumenta en 1.677 miles de m²;
  • por cada mil clientes registrados adicionales, la venta media estimada aumenta en 3.369 miles de m²;
  • por cada marca competidora adicional, la venta media estimada disminuye en 21.217 miles de m².

Esta lectura corresponde a estimación e interpretación del modelo ajustado.

Ejemplo 1: Bondad de ajuste

Ver código en R
resumen_modelo <- summary(mod_tejados)

tabla_ajuste <- data.frame(
  Medida = c(
    "Error estándar residual",
    "R2",
    "R2 ajustado"
  ),
  Valor = c(
    resumen_modelo$sigma,
    resumen_modelo$r.squared,
    resumen_modelo$adj.r.squared
  )
)

tabla_ajuste |>
  mutate(Valor = round(Valor, 4)) |>
  knitr::kable()
Medida Valor
Error estándar residual 9.4905
R2 0.9889
R2 ajustado 0.9874

Ejemplo 1: Interpretación de la bondad de ajuste

El modelo presenta:

  • error estándar residual: 9.491;
  • \(R^2 = 0.989\);
  • \(R^2\) ajustado = 0.987.

El valor de \(R^2 = 0.989\) indica que el modelo explica aproximadamente el 98.9% de la variabilidad observada en la venta de tejados entre filiales.

El \(R^2\) ajustado, igual a 0.987, sigue siendo muy alto después de penalizar por el número de parámetros incluidos en el modelo.

Por tanto, el modelo tiene una alta capacidad descriptiva para explicar las diferencias observadas en telhados a partir de gastos, clientes y marcas.

El error estándar residual de 9.491 indica que, en promedio, las diferencias típicas entre las ventas observadas y las ventas ajustadas son de aproximadamente 9.491 miles de m² de tejados.

Inferencia y predicción en el modelo lineal normal

Inferencia en el modelo lineal normal

Después de estimar el modelo, interesa evaluar la incertidumbre asociada a los parámetros.

La inferencia clásica se realiza bajo el supuesto de que el modelo está correctamente especificado y que sus supuestos principales son razonables.

En esta sección se revisan:

  • prueba global del modelo;
  • pruebas individuales para coeficientes;
  • restricciones lineales;
  • modelos anidados;
  • intervalos de confianza;
  • predicción.

El diagnóstico posterior evaluará si estos supuestos son compatibles con los datos.

Prueba global del modelo

La prueba global evalúa si el conjunto de variables explicativas aporta información para explicar la respuesta.

Para un modelo con intercepto, se contrasta:

\[ H_0:\beta_2=\beta_3=\cdots=\beta_p=0 \]

frente a:

\[ H_1:\text{al menos un } \beta_j \neq 0,\quad j=2,\ldots,p \]

Bajo \(H_0\), el modelo se reduce a un modelo con intercepto.

Bajo \(H_1\), al menos una variable explicativa contribuye al modelo.

Estadístico F global

La prueba global se basa en comparar la variabilidad explicada por el modelo con la variabilidad residual:

\[ F = \frac{QMReg}{QMRes} = \frac{SQReg/(p-1)}{SQRes/(n-p)} = \frac{ \left[\sum_{i=1}^{n}(\widehat{y}_i-\bar{y})^2\right]/(p-1) }{ \left[\sum_{i=1}^{n}(y_i-\widehat{y}_i)^2\right]/(n-p) } \]

donde:

  • \(SQReg\): suma de cuadrados explicada por la regresión;
  • \(SQRes\): suma de cuadrados residual;
  • \(p\): número de parámetros del modelo;
  • \(n\): tamaño de muestra.

Bajo \(H_0\):

\[ F \sim F_{p-1,n-p} \]

Tabla ANOVA del modelo lineal

La prueba global suele resumirse mediante la tabla ANOVA:

Fuente Suma de cuadrados gl Cuadrado medio Estadístico
Regresión \(SQReg\) \(p-1\) \(QMReg=SQReg/(p-1)\) \(F=QMReg/QMRes\)
Residual \(SQRes\) \(n-p\) \(QMRes=SQRes/(n-p)\)
Total \(SQT\) \(n-1\)

La tabla ANOVA resume la descomposición de la variabilidad y permite evaluar si el modelo con covariables mejora respecto al modelo con solo intercepto.

Ejemplo 1: Prueba global del modelo

Para el modelo ajustado:

\[ Y_i = \beta_1 + \beta_2 gastos_i + \beta_3 clientes_i + \beta_4 marcas_i + \varepsilon_i \]

se evalúa:

\[ H_0:\beta_2=\beta_3=\beta_4=0 \]

frente a:

\[ H_1:\text{al menos uno de } \beta_2,\beta_3,\beta_4 \text{ es distinto de cero} \]

Ver código en R
library(olsrr)

ols_anova(mod_tejados)
                                 ANOVA                                  
-----------------------------------------------------------------------
                  Sum of                                               
                 Squares        DF    Mean Square       F         Sig. 
-----------------------------------------------------------------------
Regression    176732.665         3      58910.888    654.059    0.0000 
Residual        1981.534        22         90.070                      
Total         178714.198        25                                     
-----------------------------------------------------------------------

Ejemplo 1: Interpretación de la prueba global

La prueba F global evalúa si el modelo con gastos, clientes y marcas mejora el ajuste respecto a un modelo con solo intercepto.

A partir de la tabla ANOVA:

  • la variabilidad explicada por la regresión se compara con la variabilidad residual;
  • el estadístico observado es \(F_{obs} = 654.06\), con \(gl_1 = 3\) y \(gl_2 = 22\);
  • el valor-p asociado es <2e-16.

Como el valor-p es muy pequeño, se rechaza la hipótesis nula de que las pendientes de gastos, clientes y marcas sean simultáneamente iguales a cero.

Por tanto, la prueba global indica que el conjunto de variables explicativas aporta información para explicar la venta media de tejados.

Antes de revisar coeficientes individuales, el modelo muestra evidencia global de utilidad explicativa.

Distribución de los estimadores

Bajo los supuestos del modelo lineal normal:

\[ \widehat{\boldsymbol{\beta}} \sim N_p \left( \boldsymbol{\beta}, \sigma^2 (X^\top X)^{-1} \right) \]

Por tanto, para cada coeficiente:

\[ \widehat{\beta}_j \sim N \left( \beta_j, \sigma^2 c_{jj} \right) \]

donde \(c_{jj}\) es el elemento diagonal \(j\) de la matriz:

\[ (X^\top X)^{-1} \]

Esta distribución permite construir pruebas de hipótesis e intervalos de confianza para los coeficientes.

Error estándar de los coeficientes

Como \(\sigma^2\) es desconocida, se estima mediante:

\[ \widehat{\sigma}^2 = \frac{SQRes}{n-p} \]

Entonces:

\[ \widehat{Var}(\widehat{\beta}_j) = \widehat{\sigma}^2 c_{jj} \]

y el error estándar estimado es:

\[ \widehat{SE}(\widehat{\beta}_j) = \sqrt{ \widehat{\sigma}^2 c_{jj} } \]

Este error estándar mide la incertidumbre asociada a la estimación de \(\beta_j\).

Pruebas individuales para coeficientes

Para evaluar un coeficiente individual, se plantea una hipótesis nula de igualdad:

\[ H_0:\beta_j=\beta_{j0} \]

La hipótesis alternativa puede ser bilateral o unilateral:

\[ H_1:\beta_j \neq \beta_{j0} \qquad H_1:\beta_j > \beta_{j0} \qquad H_1:\beta_j < \beta_{j0} \]

El estadístico de prueba es:

\[ t= \frac{\widehat{\beta}_j-\beta_{j0}} {\widehat{SE}(\widehat{\beta}_j)} \]

Bajo \(H_0\): \(t \sim t_{n-p}\)

Cuando el valor hipotético es \(\beta_{j0}=0\), el estadístico se reduce a:

\[ t= \frac{\widehat{\beta}_j} {\widehat{SE}(\widehat{\beta}_j)} \]

En regresión, este caso es frecuente porque permite evaluar si la variable asociada al coeficiente aporta información al modelo, manteniendo constantes las demás variables.

Ejemplo 1: Pruebas individuales para coeficientes

Para el modelo de venta de tejados, se evalúa individualmente cada coeficiente asociado a las variables explicativas.

En el caso usual, para cada variable se contrasta:

\[ H_0:\beta_j=0 \]

frente a:

\[ H_1:\beta_j \neq 0 \]

Ver código en R
summary(mod_tejados)$coefficients
              Estimate Std. Error    t value     Pr(>|t|)
(Intercept) 179.844285 12.6213290  14.249235 1.373950e-12
gastos        1.677243  1.0520933   1.594196 1.251589e-01
clientes      3.369392  0.1432307  23.524241 4.371281e-17
marcas      -21.216510  0.7772988 -27.295179 1.842109e-18

La tabla presenta, para cada coeficiente, la estimación, su error estándar, el estadístico t y el valor-p asociado.

Ejemplo 1: Interpretación de las pruebas individuales

A partir de la salida del modelo, usando un nivel de significancia de \(\alpha=0.05\):

  • Para gastos, el valor-p es 0.1252. Como 0.1252 > 0.05, no se rechaza \(H_0:\beta_2=0\). No hay evidencia estadística suficiente para afirmar que gastos aporte individualmente al modelo, manteniendo constantes clientes y marcas.

  • Para clientes, el valor-p es 4.37e-17. Como 4.37e-17 < 0.05, se rechaza \(H_0:\beta_3=0\). Existe evidencia estadística de que clientes aporta individualmente al modelo, manteniendo constantes gastos y marcas.

  • Para marcas, el valor-p es 1.84e-18. Como 1.84e-18 < 0.05, se rechaza \(H_0:\beta_4=0\). Existe evidencia estadística de que marcas aporta individualmente al modelo, manteniendo constantes gastos y clientes.

Ejemplo 1: Lectura conjunta

La prueba global indicó que el conjunto de variables explicativas aporta información para explicar telhados.

Las pruebas individuales muestran que:

  • clientes tiene un coeficiente estimado positivo (3.3694) y evidencia estadística individual clara;
  • marcas tiene un coeficiente estimado negativo (-21.2165) y evidencia estadística individual clara;
  • gastos tiene un coeficiente estimado positivo (1.6772), pero no presenta evidencia estadística individual al nivel 0.05.

Por tanto, dentro del modelo ajustado, el aporte individual más claro corresponde a clientes y marcas.

La interpretación sigue siendo condicional al modelo múltiple: cada coeficiente se evalúa manteniendo constantes las demás variables incluidas.

Intervalos de confianza para coeficientes

A partir de la distribución t del estadístico:

\[ \frac{\widehat{\beta}_j-\beta_j} {\widehat{SE}(\widehat{\beta}_j)} \sim t_{n-p} \]

un intervalo de confianza al nivel \(1-\alpha\) para \(\beta_j\) es:

\[ \widehat{\beta}_j \pm t_{1-\alpha/2,n-p} \widehat{SE}(\widehat{\beta}_j) \]

El intervalo resume el rango de valores plausibles para el coeficiente \(\beta_j\) bajo el modelo ajustado.

Interpretación de los intervalos

El intervalo de confianza permite evaluar la magnitud y precisión de la estimación.

Para un coeficiente \(\beta_j\):

  • intervalos estrechos indican mayor precisión;
  • intervalos amplios indican mayor incertidumbre;
  • si el intervalo contiene cero, el efecto estimado puede ser compatible con ausencia de efecto lineal;
  • si el intervalo no contiene cero, hay evidencia contra \(H_0:\beta_j=0\) al nivel correspondiente.

La interpretación debe considerar la escala de la variable y el contexto del problema.

Ejemplo 1: Intervalos de confianza para coeficientes

Ver código en R
confint(mod_tejados, level = 0.95)
                 2.5 %     97.5 %
(Intercept) 153.669251 206.019319
gastos       -0.504665   3.859151
clientes      3.072350   3.666435
marcas      -22.828529 -19.604491

Los intervalos se construyen al 95% de confianza para los coeficientes del modelo ajustado:

  • Para gastos, el intervalo es aproximadamente \([-0.505,\ 3.859]\).
    Esto indica que, manteniendo constantes clientes y marcas, el efecto medio de un aumento de mil dólares en gastos de promoción podría estar entre una disminución de 0.505 y un aumento de 3.859 miles de m² de tejados vendidos. Como el intervalo incluye cero, no hay evidencia clara de un efecto lineal individual de gastos.

  • Para clientes, el intervalo es aproximadamente \([3.072,\ 3.666]\).
    Esto indica que, manteniendo constantes gastos y marcas, por cada mil clientes registrados adicionales, la venta media de tejados aumenta entre 3.072 y 3.666 miles de m².

  • Para marcas, el intervalo es aproximadamente \([-22.828,\ -19.605]\).
    Esto indica que, manteniendo constantes gastos y clientes, por cada marca competidora adicional, la venta media de tejados disminuye entre 19.605 y 22.828 miles de m².

Los intervalos de clientes y marcas no contienen cero, mientras que el intervalo de gastos sí lo contiene.

Hipótesis lineal general

Además de probar coeficientes individuales, puede ser necesario evaluar hipótesis simultáneas sobre varios coeficientes.

Una hipótesis lineal general puede escribirse como:

\[ H_0:R\boldsymbol{\beta}=\mathbf{r} \]

frente a:

\[ H_1:R\boldsymbol{\beta}\neq\mathbf{r} \]

donde:

  • \(R\): matriz que define las hipótesis lineales;
  • \(\boldsymbol{\beta}\): vector de parámetros del modelo;
  • \(\mathbf{r}\): vector de valores hipotéticos;
  • \(q\): número de hipótesis lineales independientes.

Si el modelo tiene \(p\) parámetros, entonces \(R\) es una matriz de dimensión \(q \times p\).

Ejemplo: exclusión conjunta de variables

Suponga el modelo con vector de parámetros:

\[ \boldsymbol{\beta} = (\beta_1,\beta_2,\beta_3,\beta_4)^\top \]

Si se desea probar:

\[ H_0:\beta_2=\beta_3=0 \]

entonces esta hipótesis puede escribirse como:

\[ H_0: \begin{pmatrix} 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} \beta_1\\ \beta_2\\ \beta_3\\ \beta_4 \end{pmatrix} = \begin{pmatrix} 0\\ 0 \end{pmatrix} \]

En este caso, la matriz \(R\) selecciona los coeficientes que se desea evaluar conjuntamente.

Ejemplo: igualdad entre coeficientes

Si se desea probar que dos efectos son iguales:

\[ H_0:\beta_2=\beta_3 \]

la hipótesis se reescribe como:

\[ H_0:\beta_2-\beta_3=0 \]

Por tanto:

\[ H_0: \begin{pmatrix} 0 & 1 & -1 & 0 \end{pmatrix} \begin{pmatrix} \beta_1\\ \beta_2\\ \beta_3\\ \beta_4 \end{pmatrix} = 0 \]

Aquí, la matriz \(R\) no selecciona coeficientes por separado, sino que construye una diferencia entre ellos.

Ejemplo: combinación lineal de coeficientes

Si se desea probar:

\[ H_0:\beta_2+\beta_3=1 \]

entonces:

\[ H_0: \begin{pmatrix} 0 & 1 & 1 & 0 \end{pmatrix} \begin{pmatrix} \beta_1\\ \beta_2\\ \beta_3\\ \beta_4 \end{pmatrix} = 1 \]

En este caso:

\[ R= \begin{pmatrix} 0 & 1 & 1 & 0 \end{pmatrix}, \qquad \mathbf{r}=1 \]

La matriz \(R\) permite representar combinaciones lineales de los coeficientes, no solo exclusión de variables.

Ejemplo: varias restricciones simultáneas

Suponga el modelo con vector de parámetros:

\[ \boldsymbol{\beta} = (\beta_1,\beta_2,\beta_3,\beta_4)^\top \]

Si se desea probar simultáneamente:

\[ H_0: \begin{cases} \beta_2=\beta_3 \\ \beta_4=0 \end{cases} \]

entonces se reescribe como:

\[ H_0: \begin{cases} \beta_2-\beta_3=0 \\ \beta_4=0 \end{cases} \]

y puede expresarse matricialmente como:

\[ H_0: \begin{pmatrix} 0 & 1 & -1 & 0\\ 0 & 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \beta_1\\ \beta_2\\ \beta_3\\ \beta_4 \end{pmatrix} = \begin{pmatrix} 0\\ 0 \end{pmatrix} \]

Aquí, la matriz \(R\) representa dos restricciones lineales independientes evaluadas de manera conjunta.

Hipótesis lineal general y modelos anidados

La hipótesis lineal general permite comparar modelos anidados.

El modelo completo no impone la hipótesis:

\[ R\boldsymbol{\beta}=\mathbf{r} \]

El modelo reducido corresponde al modelo ajustado bajo:

\[ H_0:R\boldsymbol{\beta}=\mathbf{r} \]

La comparación evalúa si imponer la hipótesis lineal produce una pérdida importante de ajuste.

Si la pérdida es pequeña, el modelo reducido puede ser suficiente; si la pérdida es grande, el modelo completo aporta información adicional.

Prueba F para la hipótesis lineal general

Para comparar el modelo reducido con el modelo completo se usa:

\[ F= \frac{ (SQRes_R-SQRes_C)/(p_C-p_R) }{ SQRes_C/(n-p_C) } \]

donde:

  • \(SQRes_R\): suma de cuadrados residual del modelo reducido, ajustado bajo \(H_0\);
  • \(SQRes_C\): suma de cuadrados residual del modelo completo;
  • \(p_R\): número de parámetros del modelo reducido;
  • \(p_C\): número de parámetros del modelo completo.

Bajo \(H_0\):

\[ F\sim F_{p_C-p_R,\ n-p_C} \]

Lectura de la prueba

La hipótesis nula plantea que la hipótesis lineal general es compatible con los datos.

El numerador mide la pérdida promedio de ajuste al imponer \(H_0\):

\[ SQRes_R-SQRes_C \]

El denominador corresponde al cuadrado medio residual del modelo completo:

\[ \frac{SQRes_C}{n-p_C} \]

Si el estadístico \(F\) es grande y el valor-p es pequeño, se rechaza \(H_0\).

En ese caso, la hipótesis lineal planteada no es compatible con el modelo ajustado.

Si no se rechaza \(H_0\), el modelo reducido puede considerarse suficiente desde el punto de vista inferencial. Esta lógica será importante más adelante para selección de modelos.

Ejemplo 1: Hipótesis lineal simultánea

Consideremos el modelo completo:

\[ Y_i = \beta_1 + \beta_2 gastos_i + \beta_3 clientes_i + \beta_4 marcas_i + \beta_5 potencial_i + \varepsilon_i \]

Se desea evaluar si gastos y potencial aportan información adicional al modelo, una vez consideradas clientes y marcas.

La hipótesis simultánea es:

\[ H_0: \begin{cases} \beta_2=0 \\ \beta_5=0 \end{cases} \]

frente a:

\[ H_1:\text{al menos una de las dos restricciones no se cumple} \]

Esta hipótesis es razonable porque evalúa conjuntamente dos variables comerciales cuyo aporte podría ser débil después de controlar por clientes registrados y marcas competidoras.

Ejemplo 1: Forma matricial de la hipótesis

La hipótesis puede escribirse como:

\[ H_0:R\boldsymbol{\beta}=\mathbf{r} \]

donde:

\[ \boldsymbol{\beta} = \begin{pmatrix} \beta_1\\ \beta_2\\ \beta_3\\ \beta_4\\ \beta_5 \end{pmatrix} \]

y:

\[ R= \begin{pmatrix} 0 & 1 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 1 \end{pmatrix}, \qquad \mathbf{r} = \begin{pmatrix} 0\\ 0 \end{pmatrix} \]

La primera fila de \(R\) selecciona el coeficiente de gastos.

La segunda fila de \(R\) selecciona el coeficiente de potencial.

Por tanto, se evalúan dos restricciones lineales simultáneamente.

Ejemplo 1: Modelo completo y modelo reducido

El modelo completo es:

\[ Y_i = \beta_1 + \beta_2 gastos_i + \beta_3 clientes_i + \beta_4 marcas_i + \beta_5 potencial_i + \varepsilon_i \]

Bajo \(H_0:\beta_2=\beta_5=0\), el modelo reducido queda:

\[ Y_i = \beta_1 + \beta_3 clientes_i + \beta_4 marcas_i + \varepsilon_i \]

La prueba compara si el modelo completo mejora suficientemente el ajuste respecto al modelo reducido.

Ejemplo 1: Modelo reducido

Bajo la hipótesis nula, se ajusta el modelo reducido:

\[ Y_i = \beta_1 + \beta_3 clientes_i + \beta_4 marcas_i + \varepsilon_i \]

Ver código en R
mod_reducido <- lm(
  telhados ~ clientes + marcas,
  data = vendas
)

summary(mod_reducido)

Call:
lm(formula = telhados ~ clientes + marcas, data = vendas)

Residuals:
     Min       1Q   Median       3Q      Max 
-18.4136  -6.1499  -0.5683   6.2472  20.3185 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 186.6940    12.2587   15.23 1.66e-13 ***
clientes      3.4081     0.1458   23.37  < 2e-16 ***
marcas      -21.1930     0.8028  -26.40  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 9.803 on 23 degrees of freedom
Multiple R-squared:  0.9876,    Adjusted R-squared:  0.9866 
F-statistic: 918.3 on 2 and 23 DF,  p-value: < 2.2e-16

Ejemplo 1: Modelo completo

El modelo completo incorpora gastos y potencial:

\[ Y_i = \beta_1 + \beta_2 gastos_i + \beta_3 clientes_i + \beta_4 marcas_i + \beta_5 potencial_i + \varepsilon_i \]

Ver código en R
mod_completo <- lm(
  telhados ~ gastos + clientes + marcas + potencial,
  data = vendas
)

summary(mod_completo)

Call:
lm(formula = telhados ~ gastos + clientes + marcas + potencial, 
    data = vendas)

Residuals:
     Min       1Q   Median       3Q      Max 
-19.0906  -5.9796   0.8968   6.5667  14.7985 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 178.3203    12.9603  13.759 5.62e-12 ***
gastos        1.8071     1.0810   1.672    0.109    
clientes      3.3178     0.1629  20.368 2.60e-15 ***
marcas      -21.1850     0.7879 -26.887  < 2e-16 ***
potencial     0.3245     0.4678   0.694    0.495    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 9.604 on 21 degrees of freedom
Multiple R-squared:  0.9892,    Adjusted R-squared:  0.9871 
F-statistic: 479.1 on 4 and 21 DF,  p-value: < 2.2e-16

Ejemplo 1: Comparación inicial de modelos

Ver código en R
tabla_modelos <- data.frame(
  Modelo = c("Reducido", "Completo"),
  Variables = c(
    "clientes + marcas",
    "gastos + clientes + marcas + potencial"
  ),
  `Número de parámetros` = c(
    length(coef(mod_reducido)),
    length(coef(mod_completo))
  ),
  `SQRes` = c(
    sum(residuals(mod_reducido)^2),
    sum(residuals(mod_completo)^2)
  )
)

knitr::kable(
  tabla_modelos,
  digits = 4
)
Modelo Variables Número.de.parámetros SQRes
Reducido clientes + marcas 3 2210.442
Completo gastos + clientes + marcas + potencial 5 1937.137

El modelo completo reduce la suma de cuadrados residual respecto al modelo reducido. La prueba F evaluará si esa reducción es suficientemente grande en relación con la variabilidad residual del modelo completo.

Ejemplo 1: Cálculo manual del estadístico F

Se contrasta si gastos y potencial aportan información adicional al modelo con clientes y marcas:

\[ H_0:\beta_2=\beta_5=0 \]

Modelo reducido: telhados ~ clientes + marcas
Modelo completo: telhados ~ gastos + clientes + marcas + potencial

A partir de la comparación de modelos:

\[ SQRes_R = 2210.442, \qquad SQRes_C = 1937.137 \]

\[ p_R=3, \qquad p_C=5, \qquad n=26 \]

Entonces:

\[ F = \frac{(SQRes_R-SQRes_C)/(p_C-p_R)} {SQRes_C/(n-p_C)} = \frac{(2210.442-1937.137)/(5-3)} {1937.137/(26-5)} = \frac{273.305/2}{1937.137/21} = 1.482 \]

Con grados de libertad: \(gl_1=p_C-p_R=2,\qquad gl_2=n-p_C=21\)

El valor-p asociado es: \(p\text{-valor}=0.250\)

Ver código en R
SQRes_R <- sum(residuals(mod_reducido)^2)
SQRes_C <- sum(residuals(mod_completo)^2)

n <- nobs(mod_completo)
p_R <- length(coef(mod_reducido))
p_C <- length(coef(mod_completo))

F_manual <- ((SQRes_R - SQRes_C) / (p_C - p_R)) /
  (SQRes_C / (n - p_C))

p_valor_manual <- pf(
  F_manual,
  df1 = p_C - p_R,
  df2 = n - p_C,
  lower.tail = FALSE
)

data.frame(
  SQRes_reducido = SQRes_R,
  SQRes_completo = SQRes_C,
  F = F_manual,
  gl1 = p_C - p_R,
  gl2 = n - p_C,
  valor_p = p_valor_manual
) |>
  knitr::kable(digits = 4)
SQRes_reducido SQRes_completo F gl1 gl2 valor_p
2210.442 1937.137 1.4814 2 21 0.2501

Ejemplo 1: Contraste usando una función en R

Ver código en R
anova(mod_reducido, mod_completo)
Analysis of Variance Table

Model 1: telhados ~ clientes + marcas
Model 2: telhados ~ gastos + clientes + marcas + potencial
  Res.Df    RSS Df Sum of Sq      F Pr(>F)
1     23 2210.4                           
2     21 1937.1  2    273.31 1.4814 0.2501

La función anova() compara los dos modelos anidados.

Debe producir el mismo estadístico F y el mismo valor-p que el cálculo manual.

Ejemplo 1: Contraste con hipótesis lineal general

Ver código en R
library(car)

linearHypothesis(
  mod_completo,
  c(
    "gastos = 0",
    "potencial = 0"
  )
)

Linear hypothesis test:
gastos = 0
potencial = 0

Model 1: restricted model
Model 2: telhados ~ gastos + clientes + marcas + potencial

  Res.Df    RSS Df Sum of Sq      F Pr(>F)
1     23 2210.4                           
2     21 1937.1  2    273.31 1.4814 0.2501

Esta función contrasta directamente:

\[ H_0: \begin{cases} \beta_2=0 \\ \beta_5=0 \end{cases} \]

Debe coincidir con la comparación entre el modelo reducido y el modelo completo.

Ejemplo 1: Lectura del contraste

La prueba evalúa si gastos y potencial, considerados simultáneamente, mejoran el modelo que ya contiene clientes y marcas.

La hipótesis evaluada fue:

\[ H_0:\beta_2=\beta_5=0 \]

El estadístico obtenido fue:

\[ F=1.482 \]

con grados de libertad:

\[ gl_1=2, \qquad gl_2=21 \]

y valor-p:

\[ p\text{-valor}=0.250 \]

Como:

\[ 0.250 > 0.05 \]

no se rechaza \(H_0\) al nivel de significancia de 5%.

Por tanto, no se encuentra evidencia estadística suficiente para afirmar que gastos y potencial mejoren conjuntamente el ajuste del modelo, una vez incluidas clientes y marcas.

Nueva observación y vector de covariables

Suponga una nueva observación que no pertenece a la muestra.

Sus valores para las variables explicativas se representan por:

\[ \mathbf{z} = (z_1,z_2,\ldots,z_p)^\top \]

En el modelo lineal normal:

\[ Y(\mathbf{z}) = \mathbf{z}^\top\boldsymbol{\beta} + \varepsilon(\mathbf{z}) \]

Por tanto:

\[ E\{Y(\mathbf{z})\} = \mu(\mathbf{z}) = \mathbf{z}^\top\boldsymbol{\beta} \]

y su estimador es:

\[ \widehat{\mu}(\mathbf{z}) = \mathbf{z}^\top\widehat{\boldsymbol{\beta}} \]

Intervalos y bandas

Para una nueva observación con covariables \(\mathbf{z}\), se pueden construir resultados puntuales o simultáneos.

Resultado Cobertura
Intervalo Un valor específico de \(\mathbf{z}\)
Banda Un conjunto de valores de \(\mathbf{z}\)

Un intervalo responde a una pregunta puntual.

Una banda responde a una pregunta simultánea sobre varios valores de \(\mathbf{z}\).

Por eso, una banda suele ser más amplia que un intervalo puntual.

Valor esperado y nueva observación

También debe distinguirse entre estimar el valor esperado y predecir una nueva observación.

Objetivo Cantidad
Valor esperado \(\mu(\mathbf{z})=E\{Y(\mathbf{z})\}\)
Nueva observación \(Y(\mathbf{z})\)

Para el valor esperado se considera la incertidumbre asociada a la estimación de \(\mu(\mathbf{z})\).

Para una nueva observación se incorpora, además, la variabilidad aleatoria de \(\varepsilon(\mathbf{z})\).

Por ello, los intervalos y bandas de predicción son más amplios.

Varianza del estimador en \(\mathbf{z}\)

Como:

\[ \widehat{\mu}(\mathbf{z}) = \mathbf{z}^\top\widehat{\boldsymbol{\beta}} \]

se tiene:

\[ Var\{\widehat{\mu}(\mathbf{z})\} = \sigma^2 \mathbf{z}^\top (X^\top X)^{-1} \mathbf{z} \]

Como \(\sigma^2\) es desconocida, se reemplaza por:

\[ s^2=\frac{SQRes}{n-p} \]

Entonces:

\[ \widehat{Var}\{\widehat{\mu}(\mathbf{z})\} = s^2 \mathbf{z}^\top (X^\top X)^{-1} \mathbf{z} \]

Intervalo de confianza para el valor esperado

Un intervalo de confianza de nivel \(1-\alpha\) para:

\[ \mu(\mathbf{z})=E\{Y(\mathbf{z})\} \]

es:

\[ \widehat{\mu}(\mathbf{z}) \pm t_{1-\alpha/2,n-p} s \left\{ \mathbf{z}^\top (X^\top X)^{-1} \mathbf{z} \right\}^{1/2} \]

Este intervalo se construye para un valor específico de \(\mathbf{z}\).

Cuantifica la incertidumbre asociada a estimar el valor esperado de la respuesta en ese punto.

Intervalo de predicción

Para una nueva observación individual:

\[ Y(\mathbf{z}) = \mathbf{z}^\top\boldsymbol{\beta} + \varepsilon(\mathbf{z}) \]

el intervalo de predicción de nivel \(1-\alpha\) es:

\[ \widehat{\mu}(\mathbf{z}) \pm t_{1-\alpha/2,n-p} s \left\{ 1+ \mathbf{z}^\top (X^\top X)^{-1} \mathbf{z} \right\}^{1/2} \]

El término adicional \(1\) incorpora la variabilidad propia de una nueva observación.

Por eso, este intervalo es más amplio que el intervalo para el valor esperado.

Intervalo de confianza vs. intervalo de predicción

Para un mismo vector \(\mathbf{z}\):

Objetivo Expresión de incertidumbre
Valor esperado \(s\left\{\mathbf{z}^\top(X^\top X)^{-1}\mathbf{z}\right\}^{1/2}\)
Nueva observación \(s\left\{1+\mathbf{z}^\top(X^\top X)^{-1}\mathbf{z}\right\}^{1/2}\)

La diferencia está en el término adicional \(1\).

Ese término aparece solo cuando se predice una observación individual.

Banda de confianza para el valor esperado

Una banda de confianza cubre simultáneamente el valor esperado:

\[ \mu(\mathbf{z})=E\{Y(\mathbf{z})\} \]

para un conjunto de valores de \(\mathbf{z}\).

La banda de confianza de nivel \(1-\alpha\) es:

\[ \widehat{\mu}(\mathbf{z}) \pm \sqrt{c_\alpha}\, s \left\{ \mathbf{z}^\top (X^\top X)^{-1} \mathbf{z} \right\}^{1/2} \]

donde \(c_\alpha\) se obtiene de:

\[ P\{F_{p,n-p}\leq c_\alpha\}=1-\alpha \]

es decir, \(c_\alpha\) es el cuantil \(1-\alpha\) de una distribución F con \(p\) y \(n-p\) grados de libertad.

A diferencia del intervalo, la banda controla la incertidumbre simultáneamente para varios valores de \(\mathbf{z}\).

Banda de predicción

La banda de predicción cubre simultáneamente nuevas observaciones:

\[ Y(\mathbf{z}) \]

para un conjunto de valores de \(\mathbf{z}\).

La banda de predicción de nivel \(1-\alpha\) es:

\[ \widehat{\mu}(\mathbf{z}) \pm \sqrt{c_\alpha}\, s \left\{ 1+ \mathbf{z}^\top (X^\top X)^{-1} \mathbf{z} \right\}^{1/2} \]

La banda de predicción es más amplia que la banda de confianza porque incorpora la variabilidad individual de nuevas observaciones.

Caso de regresión lineal simple

En regresión lineal simple, para una nueva observación con valor explicativo \(z\):

\[ \mathbf{z}^\top (X^\top X)^{-1} \mathbf{z} = \frac{1}{n} + \frac{(z-\bar{x})^2}{S_{xx}} \]

donde:

\[ S_{xx} = \sum_{i=1}^{n} (x_i-\bar{x})^2 \]

Por tanto, la incertidumbre aumenta cuando \(z\) se aleja de \(\bar{x}\).

Esto explica por qué los intervalos y bandas se ensanchan hacia los extremos del rango observado de la variable explicativa.

Ejemplo 1: Modelo simple para intervalos y bandas

Para ilustrar intervalos y bandas se usa el modelo lineal simple:

\[ Y_i=\beta_1+\beta_2 clientes_i+\varepsilon_i \]

donde telhados es la venta de tejados y clientes es el número de clientes registrados, en miles.

Ver código en R
mod_bandas <- lm(
  telhados ~ clientes,
  data = vendas
)

summary(mod_bandas)

Call:
lm(formula = telhados ~ clientes, data = vendas)

Residuals:
     Min       1Q   Median       3Q      Max 
-102.180  -35.661    1.311   38.032  102.350 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -71.2084    40.5584  -1.756   0.0919 .  
clientes      4.6564     0.7555   6.164 2.28e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 53.69 on 24 degrees of freedom
Multiple R-squared:  0.6128,    Adjusted R-squared:  0.5967 
F-statistic: 37.99 on 1 and 24 DF,  p-value: 2.282e-06

Ejemplo 1: Nueva observación

Se considera una nueva filial que no pertenece a la muestra, con:

\[ z=60 \]

es decir, clientes = 60 miles de clientes registrados.

Ver código en R
nuevo <- data.frame(clientes = 60)

ic_60 <- predict(
  mod_bandas,
  newdata = nuevo,
  interval = "confidence",
  level = 0.95
)

ip_60 <- predict(
  mod_bandas,
  newdata = nuevo,
  interval = "prediction",
  level = 0.95
)

tabla_intervalos <- data.frame(
  Resultado = c("Intervalo de confianza", "Intervalo de predicción"),
  Objetivo = c("Valor esperado de telhados", "Nueva filial individual"),
  Estimacion = c(ic_60[1, "fit"], ip_60[1, "fit"]),
  LI = c(ic_60[1, "lwr"], ip_60[1, "lwr"]),
  LS = c(ic_60[1, "upr"], ip_60[1, "upr"])
)

knitr::kable(
  tabla_intervalos,
  digits = 2,
  col.names = c("Resultado", "Objetivo", "Estimación", "LI", "LS")
)
Resultado Objetivo Estimación LI LS
Intervalo de confianza Valor esperado de telhados 208.18 183.00 233.35
Intervalo de predicción Nueva filial individual 208.18 94.53 321.82

Ejemplo 1: Interpretación de los intervalos

Para una nueva filial con clientes = 60:

  • El intervalo de confianza se refiere al valor esperado de telhados.
  • El intervalo de predicción se refiere a una nueva filial individual.

La diferencia es conceptual:

Resultado Pregunta
Intervalo de confianza ¿Cuál es el rango plausible para la venta media esperada cuando clientes = 60?
Intervalo de predicción ¿Cuál es el rango plausible para la venta de una nueva filial con clientes = 60?

El intervalo de predicción es más amplio porque incorpora la variabilidad individual de una nueva observación.

Ejemplo 1: Construcción de bandas

Para las bandas ya no se usa un único valor de clientes.

Se construye una grilla sobre el rango observado de clientes.

Ver código en R
grid_clientes <- data.frame(
  clientes = seq(
    min(vendas$clientes),
    max(vendas$clientes),
    length.out = 200
  )
)

X <- model.matrix(mod_bandas)
X0 <- model.matrix(~ clientes, data = grid_clientes)

beta_hat <- coef(mod_bandas)
s <- summary(mod_bandas)$sigma

n <- nobs(mod_bandas)
p <- length(beta_hat)
alpha <- 0.05

c_alpha <- qf(
  1 - alpha,
  df1 = p,
  df2 = n - p
)

fit <- as.vector(X0 %*% beta_hat)

h <- rowSums((X0 %*% solve(t(X) %*% X)) * X0)

bandas <- data.frame(
  clientes = grid_clientes$clientes,
  ajuste = fit,
  conf_inf = fit - sqrt(p * c_alpha) * s * sqrt(h),
  conf_sup = fit + sqrt(p * c_alpha) * s * sqrt(h),
  pred_inf = fit - sqrt(p * c_alpha) * s * sqrt(1 + h),
  pred_sup = fit + sqrt(p * c_alpha) * s * sqrt(1 + h)
)

Las bandas se interpretan como regiones sobre el rango de clientes.

Ejemplo 1: Bandas de confianza y predicción

Ver código en R
library(ggplot2)

ggplot(vendas, aes(x = clientes, y = telhados)) +
  geom_point() +
  geom_ribbon(
    data = bandas,
    aes(x = clientes, ymin = pred_inf, ymax = pred_sup),
    inherit.aes = FALSE,
    alpha = 0.15
  ) +
  geom_ribbon(
    data = bandas,
    aes(x = clientes, ymin = conf_inf, ymax = conf_sup),
    inherit.aes = FALSE,
    alpha = 0.35
  ) +
  geom_line(
    data = bandas,
    aes(x = clientes, y = ajuste),
    inherit.aes = FALSE,
    linewidth = 1
  ) +
  labs(
    x = "Clientes registrados",
    y = "Tejados vendidos",
    title = "Bandas de confianza y predicción"
  )

La región más estrecha es la banda de confianza.

La región más amplia es la banda de predicción.

Ejemplo 1: Interpretación de las bandas

La banda de confianza se refiere a la relación esperada entre clientes y telhados.

La banda de predicción se refiere a nuevas filiales individuales.

Resultado Se refiere a Interpretación
Banda de confianza Valor esperado Región plausible para la relación media
Banda de predicción Nueva observación Región plausible para nuevas filiales individuales

La banda de predicción es más amplia porque incorpora la variabilidad propia de una nueva filial.

En regresión simple puede graficarse en dos dimensiones. En regresión múltiple dependería del vector completo de covariables.

Diagnóstico del modelo lineal normal

Propósito del diagnóstico

Después de ajustar el modelo, se debe evaluar si los datos son compatibles con los supuestos y la estructura asumida.

El diagnóstico permite revisar:

  • si los residuos muestran patrones sistemáticos;
  • si la variabilidad es aproximadamente constante;
  • si la normalidad de los errores es razonable;
  • si existen observaciones atípicas o influyentes;
  • si hay problemas en la estructura de las covariables.

El diagnóstico no busca eliminar observaciones automáticamente.

Su objetivo es evaluar la confiabilidad del modelo ajustado y de las conclusiones obtenidas.

Organización del diagnóstico

El diagnóstico del modelo lineal normal puede organizarse en tres bloques:

Bloque Pregunta central
Diagnóstico de supuestos ¿Los residuos son compatibles con los supuestos del modelo?
Diagnóstico de estructura ¿La forma del modelo y las covariables son adecuadas?
Diagnóstico de observaciones influyentes ¿Algunas observaciones afectan de manera importante el ajuste?

Esta organización permite separar problemas de naturaleza distinta y evitar interpretar todos los gráficos diagnósticos como si respondieran la misma pregunta.

Diagnóstico de supuestos

El diagnóstico de supuestos se basa principalmente en el análisis de residuos.

En el modelo lineal normal se espera que los errores:

\[ \varepsilon_i \overset{iid}{\sim} N(0,\sigma^2) \]

Por tanto, se revisa si los residuos son compatibles con:

  • media aproximadamente cero;
  • varianza constante;
  • normalidad;
  • independencia;
  • ausencia de patrones sistemáticos.

Los residuos no son los errores verdaderos, pero permiten aproximar su comportamiento.

Residuos ordinarios

El residuo ordinario de la observación \(i\) se define como:

\[ e_i=y_i-\widehat{y}_i \]

donde:

  • \(y_i\): valor observado de la respuesta;
  • \(\widehat{y}_i\): valor ajustado por el modelo;
  • \(e_i\): diferencia entre lo observado y lo ajustado.

Los residuos ordinarios muestran la discrepancia básica entre los datos y el modelo ajustado.

Sin embargo, no son los residuos más adecuados para el diagnóstico, porque no todos tienen la misma variabilidad.

Limitación de los residuos ordinarios

En el modelo lineal normal, los residuos ordinarios tienen varianza:

\[ Var(e_i)=\sigma^2(1-h_{ii}) \]

donde \(h_{ii}\) es el valor de apalancamiento de la observación \(i\).

Por tanto, dos residuos ordinarios no necesariamente son comparables entre sí.

Una observación con alto apalancamiento puede tener un residuo ordinario pequeño, aun cuando tenga capacidad para afectar el ajuste.

Por esta razón, para diagnóstico se usan residuos corregidos por su variabilidad.

Residuos estandarizados

El residuo estandarizado corrige el residuo ordinario usando una estimación común de la desviación residual:

\[ e_i^* = \frac{e_i} {s\sqrt{1-h_{ii}}} \]

donde:

  • \(e_i\): residuo ordinario;
  • \(s\): desviación estándar residual estimada;
  • \(h_{ii}\): valor de apalancamiento de la observación \(i\).

Estos residuos permiten comparar observaciones en una escala más homogénea.

Valores grandes en valor absoluto sugieren observaciones con ajuste deficiente.

Residuos studentizados

El residuo studentizado eliminado usa una estimación de la escala calculada sin la observación \(i\):

\[ t_i = \frac{e_i} {s_{(i)}\sqrt{1-h_{ii}}} \]

donde:

  • \(s_{(i)}\): desviación estándar residual estimada excluyendo la observación \(i\);
  • \(h_{ii}\): valor de apalancamiento de la observación \(i\).

La diferencia con el residuo estandarizado es que la escala no usa la misma observación que se está evaluando.

Por eso, los residuos studentizados son especialmente útiles para detectar observaciones aberrantes.

Lectura diagnóstica de los residuos

En el diagnóstico no interesa solo el tamaño del residuo.

También importa si el residuo aparece asociado a:

  • valores ajustados altos o bajos;
  • alguna covariable específica;
  • cambios en la dispersión;
  • patrones curvos;
  • observaciones con alto apalancamiento.

Por eso el análisis de residuos debe hacerse mediante gráficos y no solo revisando una tabla de valores.

Residuos frente a valores ajustados

El gráfico de residuos frente a valores ajustados permite revisar si el modelo presenta patrones sistemáticos no explicados.

En el eje horizontal se colocan los valores ajustados:

\[ \widehat{y}_i \]

En el eje vertical se colocan residuos corregidos, por ejemplo residuos studentizados:

\[ t_i \]

Se espera observar:

  • puntos dispersos alrededor de cero;
  • ausencia de curvatura sistemática;
  • dispersión aproximadamente constante;
  • ausencia de observaciones extremadamente alejadas.

Lectura del gráfico de residuos

Una nube sin patrón claro es compatible con un modelo razonable.

En cambio, algunos patrones sugieren problemas:

Patrón observado Posible problema
Curvatura Falta de linealidad
Forma de embudo Varianza no constante
Grupos separados Variable omitida o estructura no modelada
Puntos muy alejados Observaciones aberrantes

Este gráfico no prueba formalmente los supuestos, pero orienta la revisión del modelo.

Normalidad de los errores

La normalidad de los errores se revisa principalmente mediante el gráfico Q-Q normal de los residuos.

Si los errores son aproximadamente normales, los puntos deberían ubicarse cerca de una recta.

Desviaciones sistemáticas pueden indicar:

  • asimetría;
  • colas pesadas;
  • valores extremos;
  • incompatibilidad con el supuesto normal.

La normalidad es especialmente relevante para la inferencia en muestras pequeñas.

Gráfico Q-Q con envelope

El gráfico Q-Q normal puede complementarse con una banda empírica de confianza, conocida como envelope.

El envelope sirve como referencia visual para evaluar si las desviaciones respecto a la recta normal son compatibles con la variabilidad esperada bajo el modelo.

La lectura es:

  • si la mayoría de residuos cae dentro del envelope, no hay evidencia visual fuerte contra la normalidad;
  • si varios residuos quedan fuera, especialmente en las colas, puede haber alejamiento de la normalidad;
  • si la desviación es sistemática, conviene revisar la especificación del modelo.

La construcción detallada del envelope se retomará más adelante al discutir diagnóstico en MLG.

Varianza constante

El supuesto de varianza constante establece que:

\[ Var(\varepsilon_i)=\sigma^2 \]

para todas las observaciones.

Se revisa usando:

  • residuos frente a valores ajustados;
  • residuos frente a covariables;
  • gráfico escala-localización.

Una dispersión creciente o decreciente sugiere heterocedasticidad.

Si la varianza no es constante, los errores estándar, pruebas e intervalos pueden verse afectados.

Independencia

El supuesto de independencia depende del diseño de recolección de datos.

Puede ser especialmente relevante cuando los datos tienen:

  • orden temporal;
  • agrupamiento;
  • mediciones repetidas;
  • estructura espacial;
  • unidades relacionadas.

Una revisión inicial puede hacerse con residuos frente al orden de observación.

Patrones secuenciales, ciclos o bloques pueden sugerir dependencia no modelada.

Diagnóstico gráfico y pruebas formales

El diagnóstico del modelo no debe basarse solo en gráficos ni solo en pruebas formales.

Los gráficos permiten observar:

  • patrones;
  • curvaturas;
  • cambios de dispersión;
  • observaciones extremas;
  • comportamientos no esperados.

Las pruebas formales permiten contrastar hipótesis específicas, pero su lectura depende del tamaño muestral y de los supuestos de cada prueba.

Por ello, una estrategia razonable combina ambos enfoques:

  1. revisar gráficos diagnósticos;
  2. aplicar pruebas formales cuando correspondan;
  3. interpretar los resultados en conjunto;
  4. decidir si el modelo requiere ajustes.

Pruebas formales de normalidad

Para evaluar la normalidad de los errores pueden usarse pruebas como:

Prueba Comentario
Shapiro-Wilk Frecuente en muestras pequeñas y medianas
Anderson-Darling Da mayor peso a las colas
Kolmogorov-Smirnov Compara con una distribución teórica, pero requiere cuidado si los parámetros se estiman
Jarque-Bera Basada en asimetría y curtosis

Estas pruebas contrastan una hipótesis de normalidad, pero deben interpretarse con cautela.

En muestras grandes, pueden detectar desviaciones pequeñas sin relevancia práctica.

En muestras pequeñas, pueden tener baja potencia para detectar desviaciones importantes.

Por eso, se recomienda usarlas junto con el gráfico Q-Q normal y, cuando corresponda, con envelopes.

Pruebas formales de homocedasticidad

Para evaluar varianza constante pueden usarse pruebas como:

Prueba Idea general
Breusch-Pagan Relaciona la varianza de los errores con las covariables
White Permite formas más generales de heterocedasticidad
Goldfeld-Quandt Compara varianzas en grupos ordenados

Estas pruebas evalúan si la variabilidad de los errores cambia sistemáticamente.

Sin embargo, también deben interpretarse junto con gráficos de residuos.

Un resultado significativo puede indicar heterocedasticidad, pero el gráfico ayuda a entender la forma del problema.

Pruebas de independencia

La independencia depende del diseño del estudio.

Cuando las observaciones tienen orden temporal, espacial o secuencial, pueden usarse pruebas como:

Prueba Uso habitual
Durbin-Watson Autocorrelación de primer orden
Breusch-Godfrey Autocorrelación de orden superior
Ljung-Box Dependencia serial en residuos

Estas pruebas no siempre son necesarias.

Tienen sentido cuando existe una estructura de orden o dependencia potencial en los datos.

Si los datos provienen de una muestra transversal sin orden natural, la independencia debe justificarse principalmente desde el diseño.

Limitaciones de las pruebas formales

Las pruebas formales son útiles, pero no deben aplicarse mecánicamente.

Algunas limitaciones son:

  • dependen del tamaño muestral;
  • pueden detectar desviaciones pequeñas sin importancia práctica;
  • pueden tener baja potencia en muestras pequeñas;
  • evalúan aspectos específicos del supuesto;
  • no explican por sí solas la causa del problema;
  • no indican automáticamente qué corrección aplicar.

Por eso, el diagnóstico debe integrar evidencia gráfica, pruebas formales y conocimiento del contexto.

Ejemplo 1: Diagnóstico de supuestos

Se retoma el modelo ajustado para explicar la venta de tejados:

\[ Y_i = \beta_1 + \beta_2 gastos_i + \beta_3 clientes_i + \beta_4 marcas_i + \varepsilon_i \]

con:

\[ \varepsilon_i \overset{iid}{\sim} N(0,\sigma^2) \]

El diagnóstico de supuestos revisará:

  • linealidad;
  • normalidad de los errores;
  • varianza constante;
  • independencia, si el orden de observación es relevante.

Los datos corresponden al archivo vendas.txt, con las variables telhados, gastos, clientes, marcas y potencial. :contentReferenceoaicite:0

Ejemplo 1: Residuos studentizados

Ver código en R
vendas <- read.table("vendas.txt", header = TRUE)

mod_tejados <- lm(
  telhados ~ gastos + clientes + marcas,
  data = vendas
)

vendas_diag <- data.frame(
  ajustado = fitted(mod_tejados),
  residuo_studentizado = rstudent(mod_tejados)
)

head(vendas_diag, 6)
   ajustado residuo_studentizado
1  81.35519          -0.22699691
2 199.62190           0.05352249
3 164.41341          -0.14328210
4 204.83007          -0.52835650
5 143.18085           0.31632153
6 169.33704           1.07973904

Para el diagnóstico se usan residuos studentizados porque permiten comparar mejor la magnitud de los residuos entre observaciones.

Ejemplo 1: Linealidad y patrones residuales

Ver código en R
library(ggplot2)

ggplot(vendas_diag, aes(x = ajustado, y = residuo_studentizado)) +
  geom_point() +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_smooth(method = "loess", se = FALSE) +
  labs(
    x = "Valores ajustados",
    y = "Residuos studentizados",
    title = "Residuos studentizados frente a valores ajustados"
  )

El gráfico no muestra una curvatura marcada ni un patrón sistemático evidente.

La nube de puntos se distribuye alrededor de cero, por lo que no se observa evidencia visual fuerte de falta de linealidad.

Ejemplo 1: Prueba formal de linealidad

Como apoyo formal, se aplica una prueba RESET de Ramsey.

Ver código en R
library(lmtest)

resettest(
  mod_tejados,
  power = 2,
  type = "fitted"
)

    RESET test

data:  mod_tejados
RESET = 1.2722, df1 = 1, df2 = 21, p-value = 0.2721

Para este modelo, la prueba RESET produce aproximadamente:

\[ F = 1.272, \qquad p\text{-valor}=0.272 \]

Como 0.272 > 0.05, no se rechaza la hipótesis nula de especificación lineal.

Esto es coherente con el gráfico de residuos: no se observa evidencia suficiente de falta de linealidad.

Ejemplo 1: Normalidad de los errores

Ver código en R
qqnorm(
  rstudent(mod_tejados),
  main = "Q-Q plot de residuos studentizados",
  ylab = "Residuos studentizados"
)

qqline(
  rstudent(mod_tejados),
  lty = 2
)

El gráfico Q-Q muestra puntos razonablemente alineados con la recta de referencia.

No se observa una desviación sistemática fuerte respecto a la normalidad.

Ejemplo 1: Q-Q plot con envelope

Además del Q-Q plot usual, se puede usar un envelope simulado para evaluar la normalidad de los residuos studentizados.

Ver código en R
# Cargar previamente la función envel.norm()
# Puede guardarse en el archivo envel.norm.R y cargarse con:
# source("envel.norm.R")

source("envel.norm.R", encoding = "latin1")

envel.norm(
  modelo = mod_tejados,
  sim = 100,
  conf = 0.95,
  res = TRUE,
  quad = FALSE
)

Banda de  95 % de confianca, obtida por  100  simulacoes.

El gráfico muestra los residuos studentizados junto con una banda simulada de referencia bajo normalidad. En este ejemplo, los residuos se mantienen dentro del envelope de 95%, sin desviaciones sistemáticas importantes en las colas. Por tanto, el Q-Q plot con envelope no muestra evidencia visual fuerte contra la normalidad de los errores.

Ejemplo 1: Prueba formal de normalidad

Se aplica la prueba de Shapiro-Wilk sobre los residuos studentizados.

Ver código en R
shapiro.test(
  rstudent(mod_tejados)
)

    Shapiro-Wilk normality test

data:  rstudent(mod_tejados)
W = 0.9792, p-value = 0.8566

La prueba produce aproximadamente:

\[ W = 0.979, \qquad p\text{-valor}=0.857 \]

Como 0.857 > 0.05, no se rechaza la hipótesis de normalidad.

Por tanto, la evidencia gráfica y la prueba formal son compatibles con errores aproximadamente normales.

Ejemplo 1: Varianza constante

Ver código en R
ggplot(vendas_diag, aes(x = ajustado, y = abs(residuo_studentizado))) +
  geom_point() +
  geom_smooth(method = "loess", se = FALSE) +
  labs(
    x = "Valores ajustados",
    y = "|Residuos studentizados|",
    title = "Revisión visual de varianza constante"
  )

No se observa un patrón claro de aumento o disminución de la dispersión con los valores ajustados.

Visualmente, no hay evidencia fuerte de heterocedasticidad.

Ejemplo 1: Prueba formal de homocedasticidad

Se aplica la prueba de Breusch-Pagan.

Ver código en R
library(lmtest)

bptest(mod_tejados)

    studentized Breusch-Pagan test

data:  mod_tejados
BP = 3.741, df = 3, p-value = 0.2908

La prueba produce aproximadamente:

\[ BP = 3.741, \qquad p\text{-valor}=0.291 \]

Como 0.291 > 0.05, no se rechaza la hipótesis de varianza constante.

La prueba formal y el gráfico no muestran evidencia suficiente de heterocedasticidad.

Ejemplo 1: Independencia

En este ejemplo, las observaciones corresponden a filiales de una red de tiendas.

No se ha definido un orden temporal, espacial o secuencial para las observaciones.

Por tanto, la independencia debe sostenerse principalmente por el diseño de recolección y por la interpretación de las unidades como filiales distintas.

En ausencia de un orden natural, no se usa una prueba de autocorrelación como criterio central.

No obstante, si existiera un orden relevante, se podría revisar el gráfico de residuos frente al orden y aplicar pruebas como Durbin-Watson o Ljung-Box.

Ejemplo 1: Conclusión del diagnóstico de supuestos

Para el modelo:

\[ telhados \sim gastos + clientes + marcas \]

el diagnóstico inicial de supuestos muestra:

  • no se observa evidencia visual fuerte de falta de linealidad;
  • la prueba RESET no rechaza la especificación lineal al 5%;
  • el Q-Q plot y Shapiro-Wilk son compatibles con normalidad;
  • el gráfico de dispersión residual y Breusch-Pagan no muestran evidencia suficiente de heterocedasticidad;
  • la independencia debe justificarse desde el diseño, porque no existe un orden natural de observación.

En conjunto, el modelo no presenta señales importantes de violación de supuestos en esta revisión inicial.

Diagnóstico de estructura del modelo

Después de revisar los supuestos sobre los errores, se evalúa si la estructura del modelo es adecuada.

Este diagnóstico busca responder:

  • si la forma funcional de las covariables es razonable;
  • si faltan transformaciones;
  • si existen interacciones relevantes;
  • si hay variables omitidas;
  • si algunas covariables son redundantes;
  • si la interpretación individual de los coeficientes es estable.

A diferencia del diagnóstico de supuestos, aquí el foco no está solo en los residuos, sino en la especificación del modelo.

Forma funcional de las covariables

El modelo lineal normal supone que la respuesta esperada se relaciona linealmente con las covariables incluidas:

\[ E(Y_i\mid \mathbf{x}_i) = \mathbf{x}_i^\top\boldsymbol{\beta} \]

Sin embargo, una covariable puede tener una relación no lineal con la respuesta.

Esto puede revisarse mediante:

  • gráficos de residuos frente a cada covariable;
  • gráficos de residuos parciales;
  • gráficos de variable adicionada;
  • comparación con transformaciones;
  • comparación con modelos que incluyan términos polinomiales.

Una curvatura sistemática puede indicar que la forma funcional lineal no es suficiente.

Transformaciones

Cuando la relación entre una covariable y la respuesta no parece lineal, puede considerarse una transformación.

Por ejemplo:

\[ x,\quad \log(x),\quad \sqrt{x},\quad x^2 \]

La transformación debe justificarse por:

  • el patrón observado en los gráficos;
  • el contexto del problema;
  • la mejora en la interpretación;
  • la mejora en el comportamiento de los residuos;
  • la comparación con modelos alternativos.

No se transforma una variable solo para mejorar mecánicamente un indicador de ajuste.

Interacciones

Una interacción aparece cuando el efecto de una covariable depende del valor de otra.

Por ejemplo:

\[ Y_i = \beta_1 + \beta_2 x_{i2} + \beta_3 x_{i3} + \beta_4 x_{i2}x_{i3} + \varepsilon_i \]

En este modelo, el efecto de \(x_{i2}\) sobre la respuesta depende del valor de \(x_{i3}\).

Las interacciones deben evaluarse cuando tengan sentido en el contexto del problema y cuando exista evidencia de que los efectos no son puramente aditivos.

Variables omitidas

Un modelo puede estar mal especificado si excluye variables relevantes asociadas con la respuesta.

La omisión de variables puede producir:

  • patrones sistemáticos en los residuos;
  • interpretación sesgada de algunos coeficientes;
  • aparente falta de linealidad;
  • cambios importantes al incorporar nuevas covariables;
  • conclusiones incompletas sobre el fenómeno estudiado.

El diagnóstico estadístico puede sugerir el problema, pero la decisión final depende también del conocimiento sustantivo del caso.

Redundancia entre covariables

En un modelo múltiple, puede ocurrir que dos o más covariables aporten información muy similar.

Esto no siempre implica que una variable sea inútil, pero sí puede dificultar la interpretación del modelo.

La redundancia entre covariables puede producir:

  • coeficientes difíciles de interpretar individualmente;
  • cambios importantes en los coeficientes al agregar o retirar variables;
  • aumento de la incertidumbre de algunas estimaciones;
  • modelos más complejos sin una ganancia clara de interpretación.

Por eso, antes de interpretar efectos individuales, conviene revisar si algunas variables explicativas están fuertemente relacionadas entre sí.

Multicolinealidad

La multicolinealidad aparece cuando una variable explicativa está fuertemente asociada con una o más variables explicativas del modelo.

No es un supuesto sobre los errores.

Es un problema de estructura entre covariables, porque afecta la estabilidad e interpretación de los coeficientes.

Sus efectos principales son:

  • aumenta la incertidumbre de algunos estimadores;
  • puede inflar errores estándar;
  • puede hacer inestables los signos o magnitudes de los coeficientes;
  • dificulta interpretar efectos individuales manteniendo constantes las demás variables.

Factor de inflación de varianza

Una medida usual para revisar multicolinealidad es el factor de inflación de varianza:

\[ VIF_j = \frac{1}{1-R_j^2} \]

donde \(R_j^2\) se obtiene al ajustar una regresión auxiliar de la variable explicativa \(x_j\) sobre las demás variables explicativas.

La interpretación es:

  • si \(R_j^2\) es bajo, \(VIF_j\) será cercano a 1;
  • si \(R_j^2\) es alto, \(VIF_j\) aumenta;
  • valores altos de \(VIF_j\) indican que la varianza de \(\widehat{\beta}_j\) está inflada por la asociación con otras covariables.

El VIF no mide ajuste del modelo; mide redundancia entre variables explicativas.

Lectura práctica del VIF

No existe un único punto de corte universal para el VIF.

Como regla práctica, se suelen revisar con atención valores como:

\[ VIF_j > 5 \]

o, de forma más permisiva:

\[ VIF_j > 10 \]

Un VIF elevado no obliga a eliminar una variable.

Debe analizarse junto con:

  • el objetivo del modelo;
  • la interpretación sustantiva de las covariables;
  • la estabilidad de los coeficientes;
  • la precisión de las estimaciones;
  • la posible redundancia entre variables.

Ejemplo 1: Diagnóstico de estructura

Se retoma el modelo múltiple:

\[ Y_i= \beta_1 + \beta_2 gastos_i + \beta_3 clientes_i + \beta_4 marcas_i + \varepsilon_i \]

El diagnóstico de estructura revisará:

  • forma funcional de las covariables;
  • posible necesidad de transformaciones;
  • redundancia entre covariables;
  • multicolinealidad.
Ver código en R
mod_tejados <- lm(
  telhados ~ gastos + clientes + marcas,
  data = vendas
)

Ejemplo 1: Residuos frente a covariables

Ver código en R
library(ggplot2)
library(patchwork)

datos_res <- data.frame(
  gastos = vendas$gastos,
  clientes = vendas$clientes,
  marcas = vendas$marcas,
  residuo_studentizado = rstudent(mod_tejados)
)

p1 <- ggplot(datos_res, aes(x = gastos, y = residuo_studentizado)) +
  geom_point() +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_smooth(method = "loess", se = FALSE) +
  labs(x = "Gastos", y = "Residuo studentizado")

p2 <- ggplot(datos_res, aes(x = clientes, y = residuo_studentizado)) +
  geom_point() +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_smooth(method = "loess", se = FALSE) +
  labs(x = "Clientes", y = "Residuo studentizado")

p3 <- ggplot(datos_res, aes(x = marcas, y = residuo_studentizado)) +
  geom_point() +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_smooth(method = "loess", se = FALSE) +
  labs(x = "Marcas", y = "Residuo studentizado")

p1 | p2 | p3

Los gráficos permiten revisar si queda algún patrón sistemático asociado a una covariable específica.

Ejemplo 1: Lectura de forma funcional

A partir de los residuos frente a las covariables:

  • no se observa una curvatura marcada frente a clientes;
  • no se observa un patrón sistemático claro frente a marcas;
  • en gastos tampoco aparece una estructura residual fuerte que sugiera una transformación inmediata.

Por tanto, con esta revisión gráfica no se encuentra evidencia visual clara de que la forma lineal de las covariables incluidas sea insuficiente.

Esta conclusión debe leerse junto con el diagnóstico previo de residuos frente a valores ajustados.

Ejemplo 1: Redundancia entre covariables

Antes de interpretar efectos individuales, se revisa la asociación entre las covariables incluidas en el modelo.

Ver código en R
cor(
  vendas[, c("gastos", "clientes", "marcas")]
) |>
  round(3) |>
  knitr::kable()
gastos clientes marcas
gastos 1.000 0.173 -0.038
clientes 0.173 1.000 -0.324
marcas -0.038 -0.324 1.000

La matriz permite identificar si dos covariables aportan información muy similar.

Ejemplo 1: Lectura de redundancia

En la matriz de correlaciones entre covariables:

  • gastos y clientes presentan correlación baja;
  • gastos y marcas presentan correlación prácticamente nula;
  • clientes y marcas presentan correlación negativa moderada, pero no extrema.

Por tanto, no se observa una redundancia fuerte entre las covariables usadas en el modelo.

Esto favorece la interpretación individual de los coeficientes, aunque no reemplaza una revisión más formal de multicolinealidad.

Ejemplo 1: Factor de inflación de varianza

Ver código en R
library(car)

vif(mod_tejados)
  gastos clientes   marcas 
1.031060 1.150545 1.117925 

El VIF mide cuánto se infla la varianza estimada de cada coeficiente por la asociación con las demás covariables.

Ejemplo 1: Lectura del VIF

Los valores obtenidos son aproximadamente:

Covariable VIF
gastos 1.031
clientes 1.151
marcas 1.118

Todos los VIF están muy cerca de 1.

Por tanto, no se observa evidencia de multicolinealidad problemática en el modelo.

En este caso, la falta de significancia individual de gastos no parece explicarse por inflación de varianza debida a colinealidad con clientes o marcas.

Ejemplo 1: Conclusión del diagnóstico de estructura

Para el modelo:

\[ telhados \sim gastos + clientes + marcas \]

el diagnóstico de estructura indica:

  • no se observan patrones residuales claros frente a las covariables incluidas;
  • no se identifica una necesidad inmediata de transformaciones;
  • no hay evidencia de redundancia fuerte entre gastos, clientes y marcas;
  • los VIF son cercanos a 1, por lo que no se detecta multicolinealidad problemática.

En conjunto, la estructura del modelo parece razonable para continuar con el análisis diagnóstico posterior.

Diagnóstico de observaciones especiales

Después de revisar supuestos y estructura del modelo, se evalúa si algunas observaciones tienen un comportamiento particular dentro del ajuste.

Conviene distinguir tres situaciones:

Tipo de observación Qué indica
Observación atípica Presenta un residuo inusualmente grande
Punto de alto apalancamiento Tiene una combinación inusual de covariables
Observación influyente Cambia de forma importante el ajuste del modelo

Estos conceptos están relacionados, pero no son equivalentes.

Una observación puede ser atípica sin ser influyente, o puede tener alto apalancamiento sin presentar un residuo grande.

Observaciones atípicas

Una observación atípica es aquella cuyo valor observado de la respuesta se aleja considerablemente del valor ajustado por el modelo.

Se revisa principalmente mediante residuos studentizados:

\[ t_i = \frac{e_i} {s_{(i)}\sqrt{1-h_{ii}}} \]

donde:

  • \(e_i\): residuo ordinario;
  • \(s_{(i)}\): desviación estándar residual estimada excluyendo la observación \(i\);
  • \(h_{ii}\): valor de apalancamiento de la observación \(i\).

Valores grandes en valor absoluto indican observaciones con ajuste deficiente.

Lectura de observaciones atípicas

Como referencia práctica, suelen revisarse observaciones con:

\[ |t_i|>2 \]

o, de manera más estricta, valores cercanos o superiores a:

\[ |t_i|>3 \]

Estos criterios no implican eliminar la observación.

Solo indican que esa unidad debe revisarse con mayor detalle.

La revisión debe considerar si el valor corresponde a un error de registro, una unidad excepcional o una característica real del fenómeno.

Puntos de alto apalancamiento

Un punto de alto apalancamiento es una observación con una combinación inusual de valores en las covariables.

La matriz sombrero se define como:

\[ H=X(X^\top X)^{-1}X^\top \]

El valor de apalancamiento de la observación \(i\) es:

\[ h_{ii} \]

El apalancamiento depende de las covariables, no directamente de la respuesta.

Por tanto, una observación puede tener alto apalancamiento aunque su residuo no sea grande.

Lectura del apalancamiento

El promedio de los valores de apalancamiento es:

\[ \bar{h}=\frac{p}{n} \]

donde:

  • \(p\): número de parámetros del modelo;
  • \(n\): número de observaciones.

Reglas prácticas comunes son revisar observaciones con:

\[ h_{ii}>\frac{2p}{n} \]

o, con un criterio más exigente:

\[ h_{ii}>\frac{3p}{n} \]

Un alto apalancamiento no implica necesariamente un problema, pero indica que la observación tiene un perfil inusual de covariables.

Observaciones influyentes

Una observación influyente es aquella que modifica de forma importante el ajuste del modelo.

Su presencia puede afectar:

  • coeficientes estimados;
  • errores estándar;
  • valores ajustados;
  • residuos;
  • valores-p;
  • intervalos de confianza;
  • conclusiones sustantivas.

Una observación influyente suele combinar dos elementos:

  1. una posición inusual en las covariables;
  2. un residuo suficientemente grande.

Por eso se analiza junto con los residuos y el apalancamiento.

Distancia de Cook

La distancia de Cook mide el cambio global en el ajuste cuando se retira una observación.

Valores grandes indican observaciones potencialmente influyentes.

Una regla práctica frecuente es revisar observaciones con:

\[ D_i>\frac{4}{n} \]

También puede revisarse el gráfico de la distancia de Cook frente al índice de observación o frente a los valores ajustados.

La distancia de Cook no implica eliminación automática.

Indica que debe revisarse si la observación cambia las conclusiones del modelo.

Medidas complementarias de influencia

Además de la distancia de Cook, pueden usarse otras medidas diagnósticas:

Medida Qué evalúa
DFFITS Cambio en el valor ajustado al retirar una observación
DFBETAS Cambio en cada coeficiente estimado
COVRATIO Cambio en la matriz de varianzas y covarianzas
Influencia local Sensibilidad del ajuste ante pequeñas perturbaciones

Estas medidas ayudan a identificar si la influencia afecta al modelo global, a un coeficiente específico o a la precisión de las estimaciones.

Análisis confirmatorio

Después de identificar observaciones potencialmente atípicas, de alto apalancamiento o influyentes, se realiza un análisis confirmatorio.

El procedimiento consiste en ajustar nuevamente el modelo retirando una o más observaciones señaladas y comparar los resultados con el modelo original.

No se trata de eliminar observaciones automáticamente.

El objetivo es evaluar si esas observaciones modifican de manera importante:

  • los coeficientes estimados;
  • los errores estándar;
  • los valores-p;
  • los intervalos de confianza;
  • las conclusiones sustantivas del análisis.

Variación porcentual de los coeficientes

Una forma de evaluar el impacto de retirar una observación es calcular la variación porcentual de cada coeficiente.

Si se retira la observación \(i\), se define:

\[ \Delta_{ij} = \left| \frac{ \widehat{\beta}_{j(i)}-\widehat{\beta}_{j} }{ \widehat{\beta}_{j} } \right| \times 100\% \]

donde:

  • \(\widehat{\beta}_{j}\) es el coeficiente estimado con todos los datos;
  • \(\widehat{\beta}_{j(i)}\) es el coeficiente estimado al retirar la observación \(i\).

Variaciones porcentuales muy grandes sugieren que la observación tiene impacto sobre la estimación del coeficiente.

Comparación con observaciones no destacadas

Para saber si una observación sospechosa produce un cambio realmente importante, puede compararse con observaciones no destacadas.

Una medida resumen es:

\[ MRC_s = \max_{i \in S} \max_j \left| \frac{ \widehat{\beta}_{j(i)}-\widehat{\beta}_{j} }{ \widehat{\beta}_{j} } \right| \]

donde \(S\) es el conjunto de observaciones sospechosas.

Luego se compara \(MRC_s\) con el mismo resumen obtenido al retirar observaciones no destacadas.

Si el cambio producido por las observaciones sospechosas es mucho mayor, se tiene evidencia de que esas observaciones afectan de manera especial el ajuste.

Tratamiento de observaciones discrepantes

Cuando una observación genera preocupación diagnóstica, no necesariamente debe eliminarse.

Algunas alternativas son:

  • revisar si existe error de registro o medición;
  • aplicar transformaciones a variables explicativas;
  • incluir términos no lineales;
  • incluir o revisar interacciones;
  • considerar regresión lineal ponderada;
  • aplicar métodos robustos;
  • revisar si otra distribución de errores resulta más adecuada.

La decisión debe justificarse con evidencia estadística y conocimiento del contexto.

Criterio de decisión

El diagnóstico de observaciones especiales no debe aplicarse de forma mecánica.

Antes de modificar el modelo o retirar una observación, se debe revisar:

  • si existe error de digitación o medición;
  • si la observación pertenece realmente a la población de estudio;
  • si representa un caso excepcional pero válido;
  • si modifica las conclusiones principales;
  • si hay justificación sustantiva para tratarla de forma separada.

La decisión final debe combinar evidencia estadística y conocimiento del contexto.

Ejemplo 1: Observaciones especiales e influencia

Se retoma el modelo múltiple:

\[ telhados \sim gastos + clientes + marcas \]

El objetivo es revisar:

  • observaciones atípicas;
  • puntos de alto apalancamiento;
  • observaciones influyentes.
Ver código en R
library(dplyr)
library(knitr)
library(olsrr)

mod_tejados <- lm(
  telhados ~ gastos + clientes + marcas,
  data = vendas
)

El archivo vendas.txt contiene las variables telhados, gastos, clientes, marcas y potencial.

Ejemplo 1: Residuos studentizados

Ver código en R
diag_obs <- data.frame(
  obs = seq_len(nrow(vendas)),
  residuo_studentizado = rstudent(mod_tejados),
  h = hatvalues(mod_tejados),
  cook = cooks.distance(mod_tejados)
)

diag_obs |>
  mutate(abs_residuo = abs(residuo_studentizado)) |>
  arrange(desc(abs_residuo)) |>
  select(obs, residuo_studentizado) |>
  head(6) |>
  kable(digits = 3)
obs residuo_studentizado
21 21 -2.657
8 8 1.911
18 18 1.615
26 26 -1.521
19 19 1.476
24 24 -1.372

Ejemplo 1: Gráfico de residuos studentizados

Ver código en R
ols_plot_resid_stud(mod_tejados)

La gráfica permite identificar observaciones con residuos studentizados grandes.

En este modelo, la observación 21 destaca por su residuo negativo.

Esto indica que su venta observada fue menor que la esperada por el modelo.

Ejemplo 1: Puntos de alto apalancamiento

Ver código en R
p <- length(coef(mod_tejados))
n <- nobs(mod_tejados)

diag_obs |>
  arrange(desc(h)) |>
  select(obs, h) |>
  head(6) |>
  kable(digits = 3)
obs h
6 6 0.329
8 8 0.298
7 7 0.265
3 3 0.239
24 24 0.222
26 26 0.218

El umbral práctico es:

\[ \frac{2p}{n} = 0.308 \]

La observación 6 presenta el mayor apalancamiento, aproximadamente 0.329, por encima del umbral 0.308.

Por tanto, la observación 6 tiene una combinación de covariables relativamente inusual.

Ejemplo 1: Gráfico de apalancamiento

Ver código en R
ols_plot_resid_lev(mod_tejados)

El gráfico permite revisar conjuntamente residuos y apalancamiento.

La observación 6 destaca principalmente por su apalancamiento.

Sin embargo, su residuo studentizado no es grande, por lo que no necesariamente modifica de forma importante el ajuste.

Ejemplo 1: Distancia de Cook

Ver código en R
diag_obs |>
  arrange(desc(cook)) |>
  select(obs, residuo_studentizado, h, cook) |>
  head(6) |>
  kable(digits = 3)
obs residuo_studentizado h cook
8 8 1.911 0.298 0.345
21 21 -2.657 0.162 0.267
26 26 -1.521 0.218 0.152
6 6 1.080 0.329 0.142
24 24 -1.372 0.222 0.129
7 7 -1.092 0.265 0.106

El umbral práctico es:

\[ \frac{4}{n} = 0.154 \]

Las observaciones 8 y 21 superan este umbral.

Por tanto, son candidatas a revisión de influencia.

Ejemplo 1: Gráfico de distancia de Cook

Ver código en R
ols_plot_cooksd_chart(mod_tejados)

La distancia de Cook más alta corresponde a la observación 8, seguida por la observación 21.

La observación 8 combina residuo relativamente alto con apalancamiento cercano al umbral.

La observación 21 destaca más por su residuo studentizado.

Ejemplo 1: DFFITS

Ver código en R
ols_plot_dffits(mod_tejados)

DFFITS evalúa cuánto cambia el valor ajustado de una observación cuando esa misma observación se retira del modelo.

En este caso, se debe revisar si las observaciones 8 y 21 también aparecen destacadas.

Si coinciden con la distancia de Cook, aumenta la evidencia de posible influencia.

Ejemplo 1: DFBETAS

Ver código en R
ols_plot_dfbetas(mod_tejados)

DFBETAS permite revisar si una observación afecta de forma importante un coeficiente específico.

Este gráfico es útil para verificar si la influencia se concentra en gastos, clientes, marcas o en el intercepto.

Ejemplo 1: Diagnóstico integrado con diag.norm()

Ver código en R
# Cargar previamente la función:
source("diag.norm.R", encoding = "latin1")

diag_norm_resultado <- diag.norm(
  modelo = mod_tejados,
  iden = c(0, 0, 0, 0, 0, 0)
)

La función diag.norm() genera seis gráficos: influencia en localización, influencia localización/escala, influencia local, apalancamiento, puntos atípicos y función de varianza. También devuelve residuos studentizados, distancia de Cook, medida modificada de Cook, influencia local y valores de apalancamiento.

Ejemplo 1: Lectura integrada

La revisión muestra tres observaciones relevantes:

Observación Motivo principal
6 Alto apalancamiento
8 Mayor distancia de Cook
21 Residuo studentizado grande y distancia de Cook elevada

La observación 6 tiene covariables inusuales, pero no presenta residuo grande.

La observación 21 tiene el residuo studentizado más alto en valor absoluto.

La observación 8 presenta la mayor distancia de Cook, por lo que es la principal candidata a análisis confirmatorio.

El siguiente paso es revisar si retirar las observaciones 8 y 21 cambia las conclusiones del modelo.

Ejemplo 1: Análisis confirmatorio

El diagnóstico señaló dos observaciones que merecen revisión:

  • observación 8: mayor distancia de Cook;
  • observación 21: mayor residuo studentizado en valor absoluto y distancia de Cook elevada.

El análisis confirmatorio consiste en ajustar nuevamente el modelo retirando estas observaciones y comparar los resultados con el modelo original.

Ver código en R
mod_sin_8 <- lm(
  telhados ~ gastos + clientes + marcas,
  data = vendas[-8, ]
)

mod_sin_21 <- lm(
  telhados ~ gastos + clientes + marcas,
  data = vendas[-21, ]
)

mod_sin_8_21 <- lm(
  telhados ~ gastos + clientes + marcas,
  data = vendas[-c(8, 21), ]
)

El objetivo no es justificar la eliminación automática de observaciones, sino evaluar la estabilidad de las conclusiones.

Ejemplo 1: Comparación de coeficientes

Ver código en R
library(broom)
library(dplyr)
library(knitr)

tabla_confirmatoria <- bind_rows(
  tidy(mod_tejados) |> mutate(modelo = "Original"),
  tidy(mod_sin_8) |> mutate(modelo = "Sin obs. 8"),
  tidy(mod_sin_21) |> mutate(modelo = "Sin obs. 21"),
  tidy(mod_sin_8_21) |> mutate(modelo = "Sin obs. 8 y 21")
) |>
  select(modelo, term, estimate, std.error, p.value) |>
  mutate(
    estimate = round(estimate, 3),
    std.error = round(std.error, 3),
    p.value = signif(p.value, 3)
  )

tabla_confirmatoria |>
  kable(
    col.names = c(
      "Modelo",
      "Término",
      "Estimación",
      "Error estándar",
      "Valor-p"
    )
  )
Modelo Término Estimación Error estándar Valor-p
Original (Intercept) 179.844 12.621 0.0000
Original gastos 1.677 1.052 0.1250
Original clientes 3.369 0.143 0.0000
Original marcas -21.217 0.777 0.0000
Sin obs. 8 (Intercept) 177.120 12.008 0.0000
Sin obs. 8 gastos 0.784 1.098 0.4830
Sin obs. 8 clientes 3.404 0.137 0.0000
Sin obs. 8 marcas -20.673 0.787 0.0000
Sin obs. 21 (Intercept) 171.147 11.645 0.0000
Sin obs. 21 gastos 2.040 0.942 0.0419
Sin obs. 21 clientes 3.405 0.128 0.0000
Sin obs. 21 marcas -20.575 0.729 0.0000
Sin obs. 8 y 21 (Intercept) 168.283 10.715 0.0000
Sin obs. 8 y 21 gastos 1.135 0.948 0.2450
Sin obs. 8 y 21 clientes 3.441 0.118 0.0000
Sin obs. 8 y 21 marcas -20.016 0.711 0.0000

La comparación permite revisar si los coeficientes, sus errores estándar y los valores-p cambian de forma importante al retirar las observaciones señaladas.

Ejemplo 1: Variación porcentual de coeficientes

Además de comparar los coeficientes directamente, se calcula su variación porcentual respecto al modelo original:

\[ \Delta_j = \left| \frac{ \widehat{\beta}_{j(-S)}-\widehat{\beta}_{j} }{ \widehat{\beta}_{j} } \right| \times 100\% \]

donde \(S\) representa la observación o conjunto de observaciones retiradas.

Ver código en R
coef_original <- coef(mod_tejados)

variacion_coef <- function(modelo_alt, nombre_modelo) {
  coef_alt <- coef(modelo_alt)
  
  data.frame(
    modelo = nombre_modelo,
    termino = names(coef_original),
    beta_original = coef_original,
    beta_nuevo = coef_alt,
    variacion_pct = abs((coef_alt - coef_original) / coef_original) * 100
  )
}

tabla_variacion <- bind_rows(
  variacion_coef(mod_sin_8, "Sin obs. 8"),
  variacion_coef(mod_sin_21, "Sin obs. 21"),
  variacion_coef(mod_sin_8_21, "Sin obs. 8 y 21")
) |>
  mutate(
    beta_original = round(beta_original, 3),
    beta_nuevo = round(beta_nuevo, 3),
    variacion_pct = round(variacion_pct, 1)
  )

tabla_variacion |>
  kable(
    col.names = c(
      "Modelo",
      "Término",
      "Coeficiente original",
      "Coeficiente nuevo",
      "Variación porcentual"
    )
  )
Modelo Término Coeficiente original Coeficiente nuevo Variación porcentual
(Intercept)…1 Sin obs. 8 (Intercept) 179.844 177.120 1.5
gastos…2 Sin obs. 8 gastos 1.677 0.784 53.2
clientes…3 Sin obs. 8 clientes 3.369 3.404 1.0
marcas…4 Sin obs. 8 marcas -21.217 -20.673 2.6
(Intercept)…5 Sin obs. 21 (Intercept) 179.844 171.147 4.8
gastos…6 Sin obs. 21 gastos 1.677 2.040 21.6
clientes…7 Sin obs. 21 clientes 3.369 3.405 1.0
marcas…8 Sin obs. 21 marcas -21.217 -20.575 3.0
(Intercept)…9 Sin obs. 8 y 21 (Intercept) 179.844 168.283 6.4
gastos…10 Sin obs. 8 y 21 gastos 1.677 1.135 32.3
clientes…11 Sin obs. 8 y 21 clientes 3.369 3.441 2.1
marcas…12 Sin obs. 8 y 21 marcas -21.217 -20.016 5.7

Ejemplo 1: Lectura del análisis confirmatorio

El análisis confirmatorio muestra que las conclusiones no cambian de la misma manera para todas las variables.

Al retirar la observación 8, el coeficiente de gastos disminuye y su valor-p aumenta. Por tanto, su aporte individual se debilita.

Al retirar la observación 21, el coeficiente de gastos aumenta y su valor-p disminuye. En este caso, la evidencia individual para gastos se vuelve más favorable.

Al retirar simultáneamente las observaciones 8 y 21, el coeficiente de gastos vuelve a una situación intermedia y no muestra evidencia individual clara.

En cambio, clientes y marcas conservan su signo, magnitud relativa y evidencia estadística en todos los ajustes.

Por tanto, la conclusión sobre clientes y marcas es estable, mientras que la conclusión sobre gastos es sensible a las observaciones señaladas.

Ejemplo 1: Tratamiento de observaciones señaladas

Las observaciones 8 y 21 no deben eliminarse automáticamente.

Antes de tomar una decisión, se debe revisar:

  • si existe error de registro o medición;
  • si las observaciones pertenecen realmente a la población de estudio;
  • si representan casos excepcionales pero válidos;
  • si modifican conclusiones sustantivas del modelo;
  • si conviene ajustar un modelo alternativo o más robusto.

En este ejemplo, el modelo mantiene conclusiones estables para clientes y marcas.

La variable gastos requiere una interpretación más cautelosa porque su conclusión cambia según las observaciones consideradas.

Ejemplo 1: Conclusión del diagnóstico de influencia

El diagnóstico identificó las observaciones 8 y 21 como casos relevantes para revisión.

El análisis confirmatorio indica que:

  • clientes mantiene una asociación positiva clara con telhados;
  • marcas mantiene una asociación negativa clara con telhados;
  • gastos presenta una conclusión menos estable;
  • retirar las observaciones señaladas no invalida el modelo, pero sí afecta la lectura de gastos.

Por tanto, el modelo puede considerarse estable respecto a sus conclusiones principales, aunque la interpretación de gastos debe reportarse con cautela.

Gráfico de variable adicionada

El gráfico de variable adicionada permite evaluar el aporte parcial de una covariable dentro de un modelo múltiple.

Para una covariable \(x_j\), la idea es comparar:

  • la parte de \(Y\) que no es explicada por las demás covariables;
  • la parte de \(x_j\) que no es explicada por las demás covariables.

Así se analiza la relación parcial entre \(Y\) y \(x_j\), controlando por las otras variables del modelo.

Construcción conceptual

Para evaluar el efecto parcial de \(x_j\), se ajustan dos regresiones auxiliares.

Primero, se ajusta \(Y\) sobre todas las covariables excepto \(x_j\), y se obtienen residuos:

\[ e_Y \]

Luego, se ajusta \(x_j\) sobre las demás covariables, y se obtienen residuos:

\[ e_{x_j} \]

El gráfico de variable adicionada representa:

\[ e_Y \quad \text{frente a} \quad e_{x_j} \]

La pendiente de esta relación coincide con el coeficiente estimado de \(x_j\) en el modelo múltiple.

Uso diagnóstico

El gráfico de variable adicionada ayuda a revisar:

  • si una covariable aporta información adicional;
  • si su relación parcial con la respuesta parece lineal;
  • si existen observaciones que dominan el efecto estimado;
  • si el coeficiente de una variable depende fuertemente de pocos casos.

Este gráfico no reemplaza la prueba individual del coeficiente.

Su utilidad es mostrar visualmente cómo se sostiene el efecto parcial dentro del modelo múltiple.

Ejemplo 1: Gráficos de variable adicionada

Para el modelo:

\[ telhados \sim gastos + clientes + marcas \]

se revisa el aporte parcial de cada covariable mediante gráficos de variable adicionada.

Ver código en R
library(car)

avPlots(
  mod_tejados,
  id = FALSE
)

Ejemplo 1: Variable adicionada con adic.norm()

La función adic.norm() genera gráficos de variable adicionada para modelos lineales normales.

Ver código en R
# Cargar previamente:
source("adic.norm.R", encoding = "latin1")

adic.norm(
  modelo = mod_tejados,
  iden = c(0, 0, 0)
)
[1] "gastos ~ clientes+marcas"
[1] "clientes ~ gastos+marcas"
[1] "marcas ~ gastos+clientes"

La función genera un gráfico de variable adicionada para cada covariable del modelo.

Ejemplo 1: Lectura de los gráficos

Los gráficos de variable adicionada permiten revisar el aporte parcial de cada covariable.

En el ejemplo:

  • clientes muestra una relación parcial positiva clara con telhados;
  • marcas muestra una relación parcial negativa clara con telhados;
  • gastos presenta una relación parcial más débil, coherente con su menor evidencia individual en el modelo.

Esta lectura coincide con las pruebas individuales de coeficientes.

Además, permite revisar visualmente si el efecto de alguna covariable parece depender de observaciones específicas.

Estrategia recomendada de diagnóstico

Una estrategia práctica es:

  1. revisar gráficos de residuos;
  2. identificar patrones, curvaturas o dispersión no constante;
  3. complementar con pruebas formales cuando el supuesto sea relevante;
  4. revisar multicolinealidad mediante VIF;
  5. evaluar observaciones atípicas, apalancamiento e influencia;
  6. verificar si las conclusiones cambian bajo modelos alternativos o análisis confirmatorio.

El objetivo no es aprobar o rechazar mecánicamente el modelo.

El objetivo es decidir si el modelo ajustado es suficientemente confiable para el propósito del análisis.

Cierre del diagnóstico

El diagnóstico del modelo lineal normal se puede resumir en tres niveles:

Nivel Pregunta
Supuestos ¿Los residuos son compatibles con el modelo asumido?
Estructura ¿La forma del modelo y las covariables son adecuadas?
Observaciones especiales ¿Algunos casos afectan de forma importante el ajuste?

El objetivo no es aprobar o rechazar mecánicamente el modelo.

El objetivo es decidir si el modelo ajustado es suficientemente confiable para sostener la interpretación, la inferencia y las conclusiones del análisis.

Variable binaria e interacción

Variables explicativas cualitativas

Hasta ahora se han considerado principalmente covariables cuantitativas.

Sin embargo, en un modelo lineal normal también pueden incorporarse variables cualitativas.

Para ello, se representan mediante variables indicadoras.

Por ejemplo, si una variable tiene dos categorías, se puede definir:

\[ x_i = \begin{cases} 0, & \text{si la unidad pertenece al grupo de referencia}\\ 1, & \text{si la unidad pertenece al grupo de comparación} \end{cases} \]

De esta forma, una característica cualitativa puede incorporarse al predictor lineal.

Modelo con una variable binaria

Considere el modelo:

\[ Y_i = \beta_1 + \beta_2 x_i + \varepsilon_i, \qquad \varepsilon_i \overset{iid}{\sim} N(0,\sigma^2) \]

donde \(x_i\) es una variable binaria.

Si \(x_i=0\):

\[ E(Y_i\mid x_i=0)=\beta_1 \]

Si \(x_i=1\):

\[ E(Y_i\mid x_i=1)=\beta_1+\beta_2 \]

Por tanto, \(\beta_2\) representa la diferencia esperada entre el grupo de comparación y el grupo de referencia.

Interpretación del coeficiente binario

En el modelo:

\[ Y_i = \beta_1 + \beta_2 x_i + \varepsilon_i \]

la categoría con \(x_i=0\) funciona como grupo de referencia.

La interpretación es:

  • \(\beta_1\): media esperada de la respuesta en el grupo de referencia;
  • \(\beta_1+\beta_2\): media esperada de la respuesta en el grupo de comparación;
  • \(\beta_2\): diferencia entre ambas medias esperadas.

Si \(\beta_2>0\), el grupo de comparación tiene una media esperada mayor.

Si \(\beta_2<0\), el grupo de comparación tiene una media esperada menor.

Variable binaria y covariable cuantitativa

También puede incluirse una variable binaria junto con una covariable cuantitativa.

Considere:

\[ Y_i = \beta_1 + \beta_2 x_i + \beta_3 z_i + \varepsilon_i \]

donde:

  • \(x_i\) es una variable binaria;
  • \(z_i\) es una covariable cuantitativa.

Si \(x_i=0\):

\[ E(Y_i\mid x_i=0,z_i)=\beta_1+\beta_3 z_i \]

Si \(x_i=1\):

\[ E(Y_i\mid x_i=1,z_i)=\beta_1+\beta_2+\beta_3 z_i \]

El modelo permite comparar dos grupos ajustando por la covariable cuantitativa.

Rectas paralelas

En el modelo:

\[ Y_i = \beta_1 + \beta_2 x_i + \beta_3 z_i + \varepsilon_i \]

las dos rectas tienen la misma pendiente respecto a \(z_i\).

Grupo de referencia:

\[ E(Y_i\mid x_i=0,z_i)=\beta_1+\beta_3 z_i \]

Grupo de comparación:

\[ E(Y_i\mid x_i=1,z_i)=\beta_1+\beta_2+\beta_3 z_i \]

La diferencia entre grupos es constante:

\[ (\beta_1+\beta_2+\beta_3 z_i)-(\beta_1+\beta_3 z_i)=\beta_2 \]

Por eso, este modelo representa rectas paralelas.

Modelo con interacción

Si se desea permitir que la pendiente respecto a (z_i) sea distinta entre grupos, se incluye un término de interacción:

\[ Y_i = \beta_1 + \beta_2 x_i + \beta_3 z_i + \beta_4 x_i z_i + \varepsilon_i \]

donde:

  • \(x_i\) es una variable binaria;
  • \(z_i\) es una covariable cuantitativa;
  • \(x_i z_i\) es el término de interacción.

Este modelo permite que el efecto de \(z_i\) cambie según el grupo definido por \(x_i\).

Variables explicativas cualitativas

En un modelo lineal normal también pueden incorporarse variables explicativas cualitativas.

Por ejemplo:

  • tipo de tienda;
  • región;
  • nivel educativo;
  • turno de atención;
  • método de venta;
  • categoría del producto.

Como estas variables no son numéricas de forma natural, deben representarse mediante variables indicadoras.

Codificación dummy

Suponga una variable cualitativa \(G\) con \(k\) categorías:

\[ G \in \{g_1,g_2,\ldots,g_k\} \]

Se elige una categoría de referencia. Supongamos que la referencia es:

\[ g_1 \]

Entonces se construyen \(k-1\) variables dummy:

\[ D_{2i},D_{3i},\ldots,D_{ki} \]

Para cada categoría \(g_j\), con \(j=2,\ldots,k\), se define:

\[ D_{ji} = \begin{cases} 1, & \text{si la observación } i \text{ pertenece a } g_j\\ 0, & \text{si la observación } i \text{ no pertenece a } g_j \end{cases} \]

La categoría \(g_1\) no tiene dummy propia porque queda representada por el intercepto.

¿Por qué se usan \(k-1\) dummies?

Si una variable cualitativa tiene \(k\) categorías, se incluyen solo:

\[ k-1 \]

variables dummy.

La categoría omitida funciona como categoría de referencia.

Si se incluyeran las \(k\) dummies junto con el intercepto, se tendría una redundancia exacta, porque para cada observación:

\[ D_{1i}+D_{2i}+\cdots+D_{ki}=1 \]

Esto genera dependencia lineal perfecta entre las columnas de la matriz de diseño.

Por eso, en un modelo con intercepto, se omite una categoría.

Modelo con una variable cualitativa

Con \(g_1\) como categoría de referencia, el modelo queda:

\[ Y_i = \beta_1 + \beta_2D_{2i} + \beta_3D_{3i} + \cdots + \beta_kD_{ki} + \varepsilon_i \]

Para la categoría de referencia:

\[ E(Y_i\mid G_i=g_1)=\beta_1 \]

Para una categoría \(g_j\), con \(j=2,\ldots,k\):

\[ E(Y_i\mid G_i=g_j)=\beta_1+\beta_j \]

Interpretación de los coeficientes

En el modelo:

\[ Y_i = \beta_1 + \beta_2D_{2i} + \beta_3D_{3i} + \cdots + \beta_kD_{ki} + \varepsilon_i \]

la interpretación es:

  • \(\beta_1\): media esperada de la respuesta en la categoría de referencia \(g_1\);
  • \(\beta_2\): diferencia entre la media esperada de \(g_2\) y la media esperada de \(g_1\);
  • \(\beta_3\): diferencia entre la media esperada de \(g_3\) y la media esperada de \(g_1\);
  • \(\beta_j\): diferencia entre la media esperada de \(g_j\) y la media esperada de \(g_1\).

Por tanto, cada coeficiente asociado a una dummy se interpreta respecto a la categoría de referencia.

Ejemplo de codificación dummy

Suponga una variable region con cuatro categorías:

\[ \text{Norte},\quad \text{Centro},\quad \text{Sur},\quad \text{Este} \]

Si Norte es la categoría de referencia, se crean tres dummies:

Región \(D_{\text{Centro}}\) \(D_{\text{Sur}}\) \(D_{\text{Este}}\)
Norte 0 0 0
Centro 1 0 0
Sur 0 1 0
Este 0 0 1

La categoría Norte queda representada cuando todas las dummies valen cero.

Modelo con el ejemplo de región

Con Norte como referencia, el modelo puede escribirse como:

\[ Y_i = \beta_1 + \beta_2D_{\text{Centro},i} + \beta_3D_{\text{Sur},i} + \beta_4D_{\text{Este},i} + \varepsilon_i \]

Las medias esperadas son:

\[ E(Y_i\mid \text{Norte})=\beta_1 \]

\[ E(Y_i\mid \text{Centro})=\beta_1+\beta_2 \]

\[ E(Y_i\mid \text{Sur})=\beta_1+\beta_3 \]

\[ E(Y_i\mid \text{Este})=\beta_1+\beta_4 \]

Así, cada coeficiente compara una región con la región de referencia.

Selección de modelos

Propósito de la selección de modelos

Después de estimar, interpretar y diagnosticar un modelo, puede ser necesario comparar modelos alternativos.

La selección de modelos busca responder preguntas como:

  • ¿todas las covariables incluidas aportan información relevante?
  • ¿existe un modelo más simple con capacidad explicativa similar?
  • ¿conviene mantener una variable por razones estadísticas o sustantivas?
  • ¿el modelo elegido conserva una interpretación razonable?

La selección de modelos no debe verse como un procedimiento automático.

Debe combinar criterios estadísticos, diagnóstico e interpretación del problema.

Modelos candidatos

La selección parte de un conjunto de modelos candidatos.

Por ejemplo, para el caso de venta de tejados podrían compararse modelos como:

\[ M_1:\quad telhados \sim clientes \]

\[ M_2:\quad telhados \sim clientes + marcas \]

\[ M_3:\quad telhados \sim gastos + clientes + marcas \]

\[ M_4:\quad telhados \sim gastos + clientes + marcas + potencial \]

La comparación tiene sentido si los modelos responden a preguntas razonables y usan la misma variable respuesta.

Criterios para comparar modelos

La comparación entre modelos puede apoyarse en distintos criterios.

Criterio Idea central
Pruebas entre modelos anidados Evalúan si variables adicionales mejoran el ajuste
\(R^2\) ajustado Penaliza la inclusión de variables innecesarias
AIC Balancea ajuste y complejidad
BIC Penaliza más fuertemente la complejidad
Diagnóstico Revisa si el modelo es compatible con los supuestos
Interpretabilidad Evalúa si el modelo tiene sentido sustantivo

No hay un único criterio universal.

La elección depende del objetivo del análisis.

Comparación de modelos anidados

Dos modelos son anidados cuando uno se obtiene al retirar variables del otro.

Modelo reducido:

\[ M_R:\quad Y_i=\beta_1+\beta_2x_{i2}+\cdots+\beta_qx_{iq}+\varepsilon_i \]

Modelo completo:

\[ M_C:\quad Y_i=\beta_1+\beta_2x_{i2}+\cdots+\beta_px_{ip}+\varepsilon_i \]

con:

\[ q<p \]

La pregunta es si las variables adicionales del modelo completo aportan información suficiente.

Prueba F para modelos anidados

Para comparar un modelo reducido con un modelo completo se usa:

\[ F= \frac{ (SQRes_R-SQRes_C)/(p_C-p_R) }{ SQRes_C/(n-p_C) } \]

donde:

  • \(SQRes_R\): suma de cuadrados residual del modelo reducido;
  • \(SQRes_C\): suma de cuadrados residual del modelo completo;
  • \(p_R\): número de parámetros del modelo reducido;
  • \(p_C\): número de parámetros del modelo completo;
  • \(n\): tamaño de muestra.

Si el valor-p es pequeño, el modelo completo mejora significativamente al modelo reducido.

Criterios de información

Los criterios de información comparan modelos considerando ajuste y complejidad.

En general, tienen la forma:

\[ \text{criterio} = \text{medida de falta de ajuste} + \text{penalización por complejidad} \]

Dos criterios frecuentes son:

\[ AIC=-2\ell(\widehat{\theta})+2p \]

\[ BIC=-2\ell(\widehat{\theta})+p\log(n) \]

donde:

  • \(\ell(\widehat{\theta})\): log-verosimilitud maximizada;
  • \(p\): número de parámetros;
  • \(n\): tamaño de muestra.

Se prefiere el modelo con menor valor del criterio.

AIC y BIC: diferencia práctica

Aunque ambos criterios penalizan la complejidad, no lo hacen de la misma forma.

Criterio Penalización Tendencia
AIC \(2p\) Puede seleccionar modelos más grandes
BIC \(p\log(n)\) Penaliza más cuando \(n\) crece

El AIC suele orientarse más a capacidad predictiva.

El BIC suele favorecer modelos más parsimoniosos.

Por eso, si AIC y BIC seleccionan modelos distintos, la decisión debe apoyarse también en interpretación, diagnóstico y objetivo del análisis.

Procedimientos automáticos

Existen procedimientos automáticos de selección, como:

Procedimiento Descripción
Forward Parte de un modelo simple y agrega variables
Backward Parte de un modelo completo y retira variables
Stepwise Combina inclusión y eliminación de variables

Estos procedimientos pueden usar criterios como AIC, BIC o pruebas parciales.

Son útiles como apoyo exploratorio, pero no deben reemplazar el juicio estadístico.

Un modelo seleccionado automáticamente debe ser diagnosticado e interpretado.

Precauciones en selección de modelos

La selección automática puede generar problemas:

  • sobreajuste;
  • inestabilidad ante pequeños cambios en los datos;
  • valores-p difíciles de interpretar después de seleccionar;
  • exclusión de variables sustantivamente importantes;
  • inclusión de variables sin interpretación clara;
  • subestimación de la incertidumbre del proceso de selección.

Por eso, la selección debe verse como una herramienta de apoyo, no como una regla mecánica.

Estrategia recomendada

Una estrategia razonable es:

  1. definir modelos candidatos con sentido sustantivo;
  2. comparar modelos anidados cuando corresponda;
  3. revisar AIC, BIC y \(R^2\) ajustado;
  4. verificar diagnóstico de los modelos relevantes;
  5. preferir modelos interpretables y parsimoniosos;
  6. justificar la decisión final.

El mejor modelo no es necesariamente el que tiene más variables.

Es el que logra un equilibrio entre ajuste, simplicidad, diagnóstico e interpretación.

Ejemplo 1: Modelos candidatos

Para el caso de venta de tejados, se comparan cuatro modelos:

\[ M_1:\quad telhados \sim clientes \]

\[ M_2:\quad telhados \sim clientes + marcas \]

\[ M_3:\quad telhados \sim gastos + clientes + marcas \]

\[ M_4:\quad telhados \sim gastos + clientes + marcas + potencial \]

La comparación permite evaluar si gastos y potencial aportan información adicional frente a modelos más simples.

Ejemplo 1: Ajuste de modelos candidatos

Ver código en R
mod_1 <- lm(
  telhados ~ clientes,
  data = vendas
)

mod_2 <- lm(
  telhados ~ clientes + marcas,
  data = vendas
)

mod_3 <- lm(
  telhados ~ gastos + clientes + marcas,
  data = vendas
)

mod_4 <- lm(
  telhados ~ gastos + clientes + marcas + potencial,
  data = vendas
)

Ejemplo 1: Comparación con criterios de ajuste

Ver código en R
library(broom)
library(dplyr)
library(knitr)

comparacion_modelos <- bind_rows(
  glance(mod_1) |> mutate(modelo = "M1: clientes"),
  glance(mod_2) |> mutate(modelo = "M2: clientes + marcas"),
  glance(mod_3) |> mutate(modelo = "M3: gastos + clientes + marcas"),
  glance(mod_4) |> mutate(modelo = "M4: gastos + clientes + marcas + potencial")
) |>
  select(modelo, r.squared, adj.r.squared, sigma, AIC, BIC) |>
  mutate(
    r.squared = round(r.squared, 4),
    adj.r.squared = round(adj.r.squared, 4),
    sigma = round(sigma, 3),
    AIC = round(AIC, 2),
    BIC = round(BIC, 2)
  )

comparacion_modelos |>
  kable(
    col.names = c(
      "Modelo",
      "R2",
      "R2 ajustado",
      "Error residual",
      "AIC",
      "BIC"
    )
  )
Modelo R2 R2 ajustado Error residual AIC BIC
M1: clientes 0.6128 0.5967 53.693 284.83 288.61
M2: clientes + marcas 0.9876 0.9866 9.803 197.30 202.33
M3: gastos + clientes + marcas 0.9889 0.9874 9.491 196.46 202.75
M4: gastos + clientes + marcas + potencial 0.9892 0.9871 9.604 197.87 205.42

Ejemplo 1: Lectura de la comparación

La comparación debe considerar ajuste y complejidad.

El modelo con más variables no siempre es preferible.

En este ejemplo, interesa revisar si gastos y potencial mejoran suficientemente el modelo frente a alternativas más simples.

La lectura debe centrarse en:

  • aumento de \(R^2\) ajustado;
  • reducción del error residual;
  • reducción de AIC o BIC;
  • coherencia con las pruebas parciales;
  • estabilidad del diagnóstico;
  • interpretación sustantiva de las variables.

Ejemplo 1: Comparación de modelos anidados

Ver código en R
anova(mod_2, mod_3)
Analysis of Variance Table

Model 1: telhados ~ clientes + marcas
Model 2: telhados ~ gastos + clientes + marcas
  Res.Df    RSS Df Sum of Sq      F Pr(>F)
1     23 2210.4                           
2     22 1981.5  1    228.91 2.5415 0.1252
Ver código en R
anova(mod_3, mod_4)
Analysis of Variance Table

Model 1: telhados ~ gastos + clientes + marcas
Model 2: telhados ~ gastos + clientes + marcas + potencial
  Res.Df    RSS Df Sum of Sq      F Pr(>F)
1     22 1981.5                           
2     21 1937.1  1    44.397 0.4813 0.4954

La primera comparación evalúa si gastos mejora el modelo con clientes y marcas.

La segunda comparación evalúa si potencial mejora el modelo que ya contiene gastos, clientes y marcas.

Ejemplo 1: Selección automática de modelos

Se parte de dos modelos extremos:

  • modelo nulo: solo intercepto;
  • modelo completo: incluye todas las covariables disponibles.
Ver código en R
mod_nulo <- lm(
  telhados ~ 1,
  data = vendas
)

mod_completo_sel <- lm(
  telhados ~ gastos + clientes + marcas + potencial,
  data = vendas
)

Los procedimientos automáticos se usarán como apoyo exploratorio, no como decisión final automática.

Ejemplo 1: Selección forward

La selección forward parte del modelo nulo y agrega variables según el criterio usado.

Ver código en R
mod_forward <- step(
  mod_nulo,
  scope = list(
    lower = mod_nulo,
    upper = mod_completo_sel
  ),
  direction = "forward",
  trace = FALSE
)

formula(mod_forward)
telhados ~ marcas + clientes + gastos
Ver código en R
AIC(mod_forward)
[1] 196.4566

El procedimiento identifica el modelo obtenido al agregar variables progresivamente desde el modelo con solo intercepto.

Ejemplo 1: Selección backward

La selección backward parte del modelo completo y elimina variables según el criterio usado.

Ver código en R
mod_backward <- step(
  mod_completo_sel,
  direction = "backward",
  trace = FALSE
)

formula(mod_backward)
telhados ~ gastos + clientes + marcas
Ver código en R
AIC(mod_backward)
[1] 196.4566

El procedimiento identifica el modelo obtenido al retirar variables desde el modelo completo.

Ejemplo 1: Selección stepwise

La selección stepwise combina inclusión y eliminación de variables.

Ver código en R
mod_stepwise <- step(
  mod_nulo,
  scope = list(
    lower = mod_nulo,
    upper = mod_completo_sel
  ),
  direction = "both",
  trace = FALSE
)

formula(mod_stepwise)
telhados ~ marcas + clientes + gastos
Ver código en R
AIC(mod_stepwise)
[1] 196.4566

Este procedimiento permite agregar o retirar variables en cada paso del algoritmo.

Ejemplo 1: Comparación de modelos seleccionados

Ver código en R
modelos_seleccion <- list(
  "Forward" = mod_forward,
  "Backward" = mod_backward,
  "Stepwise" = mod_stepwise
)

tabla_seleccion <- purrr::imap_dfr(
  modelos_seleccion,
  ~ broom::glance(.x) |>
    dplyr::mutate(
      Procedimiento = .y,
      Modelo = paste(deparse(formula(.x)), collapse = " ")
    )
) |>
  dplyr::select(
    Procedimiento,
    Modelo,
    r.squared,
    adj.r.squared,
    sigma,
    AIC,
    BIC
  ) |>
  dplyr::mutate(
    r.squared = round(r.squared, 4),
    adj.r.squared = round(adj.r.squared, 4),
    sigma = round(sigma, 3),
    AIC = round(AIC, 2),
    BIC = round(BIC, 2)
  )

knitr::kable(
  tabla_seleccion,
  col.names = c(
    "Procedimiento",
    "Modelo seleccionado",
    "R2",
    "R2 ajustado",
    "Error residual",
    "AIC",
    "BIC"
  )
)
Procedimiento Modelo seleccionado R2 R2 ajustado Error residual AIC BIC
Forward telhados ~ marcas + clientes + gastos 0.9889 0.9874 9.491 196.46 202.75
Backward telhados ~ gastos + clientes + marcas 0.9889 0.9874 9.491 196.46 202.75
Stepwise telhados ~ marcas + clientes + gastos 0.9889 0.9874 9.491 196.46 202.75

La tabla permite revisar si los tres procedimientos conducen al mismo modelo o a modelos distintos.

Ejemplo 1: Lectura de la selección automática

Los métodos forward, backward y stepwise ayudan a explorar modelos candidatos.

Sin embargo, la decisión final no debe basarse solo en el procedimiento automático.

La lectura debe combinar:

  • modelo seleccionado por cada procedimiento;
  • AIC y BIC;
  • \(R^2\) ajustado;
  • diagnóstico del modelo;
  • estabilidad frente a observaciones influyentes;
  • interpretación sustantiva de las covariables.

Si los procedimientos automáticos seleccionan un modelo distinto al elegido por diagnóstico e interpretación, se debe justificar explícitamente la decisión final.

Ejemplo 1: Decisión final

La decisión final no debe basarse en un único número.

Si potencial no reduce claramente AIC/BIC ni mejora significativamente el ajuste, no habría razón fuerte para incluirlo.

Si gastos mejora poco el ajuste y además fue sensible al análisis de influencia, su inclusión debe justificarse con cautela.

Un modelo razonable para fines explicativos podría ser:

\[ telhados \sim clientes + marcas \]

porque conserva las variables con evidencia más estable y mantiene una interpretación simple.

Sin embargo, si existe justificación comercial para conservar gastos, puede reportarse el modelo ampliado aclarando su menor estabilidad.

Cierre de la selección de modelos

La selección de modelos debe responder a una pregunta sustantiva, no solo optimizar indicadores.

Un buen modelo debe ser:

  • suficientemente explicativo;
  • parsimonioso;
  • interpretable;
  • compatible con los supuestos;
  • estable frente al diagnóstico;
  • coherente con el conocimiento del problema.

En este sentido, la selección de modelos es una decisión estadística y sustantiva a la vez.

Referencias

Agresti, A. (2015). Foundations of linear and generalized linear models. Wiley.
Blitzstein, J. K., & Hwang, J. (2019). Introduction to probability (2nd ed.). Chapman; Hall/CRC.
Casella, G., & Berger, R. L. (2002). Statistical inference (2nd ed.). Duxbury.
DeGroot, M. H., & Schervish, M. J. (2012). Probability and statistics (4th ed.). Pearson.
Dobson, A. J., & Barnett, A. G. (2018). An introduction to generalized linear models (4th ed.). Chapman; Hall/CRC.
Faraway, J. J. (2016). Extending the linear model with R: Generalized linear, mixed effects and nonparametric regression models (2nd ed.). Chapman; Hall/CRC.
Hogg, R. V., McKean, J. W., & Craig, A. T. (2019). Introduction to mathematical statistics (8th ed.). Pearson.
Larsen, R. J., & Marx, M. L. (2008). An introduction to mathematical statistics and its applications (4th ed.). Pearson.
McCullagh, P., & Nelder, J. A. (1989). Generalized linear models (2nd ed.). Chapman; Hall.
Pawitan, Y. (2001). In all likelihood: Statistical modelling and inference using likelihood. Oxford University Press.
Pitman, J. (1993). Probability. Springer.
Rice, J. A. (2006). Mathematical statistics and data analysis (3rd ed.). Duxbury Press.
Ross, S. (2014). A first course in probability (9th ed.). Pearson.
Wackerly, D. D., Mendenhall, W., & Scheaffer, R. L. (2008). Mathematical statistics with applications (7th ed.). Thomson Brooks/Cole.
Weisberg, S. (2014). Applied linear regression (4th ed.). Wiley.