Está en la página 1de 15

Comprobación de adecuación del modelo de

regresión lineal
Contenido
1. Introduccion
2. Análisis de residuales
2.1. Definición de residuales
2.2. Métodos para escalar residuales
2.3. Gráficas de residuales

1. Introducción
Las principales premisas que se han hecho hasta ahora al estudiar el análisis de regresión son las
siguientes:

1. 𝑦
La relación entre la respuesta y los regresores es lineal, al menos en forma aproximada.
2. 𝜀
El término de error tiene media cero.
3. 𝜀
El término de error tiene varianza 𝜎2 constante.
4. Los errores no están correlacionados.
5. Los errores tienen distribución normal.

2. Análisis de Residuales

2.1. Definición de residuales

𝑒𝑖 = 𝑦𝑖 − 𝑦𝑖̂ 
Se definen los residuales de la siguiente forma:

El análisis de los residuales es una forma eficaz de descubrir diversos tipos de inadecuación del modelo.
Los residuales tienen varias propiedades importantes. Tienen media cero, y su varianza promedio
aproximada se estima con:
𝑛 𝑛
∑𝑖=1(𝑒𝑖 − 𝑒¯)2 𝑖=1∑ 𝑒2𝑖 𝑆𝑆
=
𝑛−𝑝 𝑛−𝑝 𝑛−𝑝 = 𝑅𝑒𝑠 = 𝑀 𝑆𝑅𝑒𝑠

Sin embargo, los residuales no son independientes, ya que los 𝑛 residuales sólo tienen 𝑛 − 𝑝 grados de
libertad asociados a ellos. Esta no independencia de los residuales tiene poco efecto en su aplicación para
comprobar la adecuación del modelo, siempre y cuando 𝑛 no sea pequeña en relación con la cantidad de
parámetros 𝑝.

NOTA: Una cosa son los residuales 𝑒𝑖 y otra muy diferente los errores 𝜀𝑖 , este último proviene del modelo
de regresión lineal 𝑌 = 𝑋𝛽 + 𝜀 .

2.2. Métodos para escalar residuales


A veces es mejor trabajar con residuales escalados. En está sección se presentarán cuatro métodos
frecuentes para escalar residuales. Los residuales escalados son útiles para determinar observaciones que
sean atípicas o valores extremos, esto es, observaciones que en algún aspecto estén separadas del resto
de los datos.

2.2.1. Residuales estandarizados


Ya que la varianza aproximada de un residual se estima con 𝑀𝑆𝑅𝑒𝑠
, el cuadrado medio de los residuales,
un escalamiento lógico de los residuales sería el de los residuales estandarizados.
𝑒𝑖 𝑖 = 1,2,⋯,𝑛
𝑑𝑖 = ⎯𝑀⎯⎯⎯⎯⎯⎯⎯⎯⎯
√ 𝑆𝑅𝑒𝑠⎯
Los residuales estandarizados tienen media cero y varianza aproximadamente unitaria, en consecuencia,
un residual estandarizado grande (por ejemplo 𝑑𝑖 > 3
) indica que se trata de un valor atípico potencial.

2.2.2. Residuales estudentizados

Si se usa el 𝑀𝑆𝑅𝑒𝑠 𝑖 𝑒𝑖
como la varianza del -ésimo residual sólo se tendrá una aproximación. Se puede
𝑒𝑖 𝑖
mejorar el escalamiento de residuales dividiendo entre la desviación estándar exacta del -ésimo
residual. Recuerdese que el vector de los residuales se puede escribir como sigue:

𝑒 = (𝐼 − 𝐻)𝑦
𝐻 = 𝑋(𝑋 ′𝑋)−1 es la matriz sombrero. Esta matriz tiene varias propiedades utiles. Es simetrica
en donde
(𝐻 = 𝐻) . De forma parecida 𝐼 − 𝐻 es simétrica e idempotente.

𝑒 = (𝐼 − 𝐻)(𝑋𝛽 + 𝜀)′ = 𝑋𝛽 − 𝐻𝑋𝛽 + (𝐼 − 𝐻)𝜀
= 𝑋𝛽 − 𝑋(𝑋 𝑋) 𝑋 𝑋𝛽 + (𝐼 − 𝐻)𝜀 = (𝐼 − 𝐻)𝜀
′ −1
Por lo anterior, los residuales son la misma transformación lineal de las observaciones y y los errores 𝜀
𝑉𝑎𝑟(𝑒) = 𝑉𝑎𝑟[(𝐼 − 𝐻)𝜀] = (𝐼 − 𝐻)𝑉𝑎𝑟(𝜀)(𝐼 − 𝐻 )′ = 𝜎 2 (𝐼 − 𝐻)
porque 𝑉𝑎𝑟(𝜀) = 𝜎 2 𝐼 , e 𝐼 − 𝐻 es simétrica e idempotente. En general, la matriz 𝐼 − 𝐻 no es diagonal,
por lo que los residuales tienen distintas varianzas, y están correlacionados.

𝑖
La varianza del -ésimo residual es
𝑉𝑎𝑟(𝑒𝑖 ) = 𝜎 2 (1 − ℎ𝑖𝑖)
Las violaciones de las premisas del modelo están, con más probabilidad, en los puntos remotos, y pueden
𝑒𝑖
ser difíciles de detectar por inspección de los residuales ordinarios (o los residuales ordinarios ),𝑑𝑖
porque en general sus residuales serán menores.

Entonces, un procedimiento lógico es examinar los residuales estudentizados.


𝑒𝑖
𝑟𝑖 = √⎯𝑀⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
𝑆𝑅𝑒𝑠(1 − ℎ𝑖𝑖)⎯
Cuando la forma del modelo es correcta estos residuales estudentizados tienen varianza constante
𝑉𝑎𝑟(𝑟𝑖 ) = 1, independiente del lugar de .𝑥𝑖
2.2.2. Residuales PRESS

Los residuales estandarizados y los estudentizados son efectivos para detectar valores atípicos. Otro

𝑦𝑖 − 𝑦(̂ 𝑖) 𝑦(̂ 𝑖)
método para hacer que los residuales sean útiles en la determinación de valores atípicos, consiste en
examinar la cantidad que se calcula partiendo de , siendo 𝑖
el valor ajustado de la -ésima
𝑖
respuesta, basado en todos las observaciones excepto esa -ésima. La lógica de este método es que si la
𝑖-ésima observación 𝑦𝑖
realmente es atípica, el modelo de regresión basado en todas las observaciones
𝑖
𝑦(̂ 𝑖)
estará demasiado influido por esta observación. Sin embargo, si se elimina la -ésima observación,
entonces no puede estar influido por esa observación, así que el residual que resulte probablemente
indique la presencia del valor atípico.

𝑖
Si se elimina la -ésima observación, se ajusta el modelo de regresión a las 𝑛−1
observaciones restantes,
𝑦𝑖
y se calcula el valor predicho de , correspondiente a la observación omitida, el error de predicción

𝑒(𝑖) = 𝑦𝑖 − 𝑦(̂ 𝑖)
correspondiente es:

Si se usa 𝑀𝑆𝑅𝑒𝑠 para estimar 𝜎 resulta ser el residual estudentizado.


2
𝑛
Al principio pareciera que el calculo de PRESS residuales requiere el ajuste de regresiones diferentes.
Sin embargo, es posible calcularlos a partir de los resultados de un solo ajuste por mínimos cuadrados a
𝑛
todas las observaciones.

𝑒(𝑖) = 1 −𝑒𝑖ℎ𝑖𝑖
𝑉𝑎𝑟[𝑒(𝑖) ] = 𝑉𝑎𝑟 [ 1 −𝑒𝑖ℎ𝑖𝑖 ] = (1 −1ℎ𝑖𝑖)2 [𝜎 2 (1 − ℎ𝑖𝑖)] = 1 −𝜎 ℎ𝑖𝑖
2

Si se estadariza el residual PRESS:


𝑒(𝑖) = (1−𝑒ℎ𝑖 𝑖𝑖) = 𝑒𝑖
√⎯𝑉𝑎𝑟[
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
𝑒(𝑖) ]⎯ √⎯𝜎⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
2 (1 − ℎ𝑖𝑖)⎯ √⎯𝜎⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
2 (1 − ℎ𝑖𝑖)⎯

2.3. Gráficas de residuales


El gráfico de residuales es una forma muy efectiva de investigar la adecuación del ajuste de un modelo de
regresión, y para comprobar las premisas básicas. Se deben examinar en forma rutinaria en todos los
problemas de modelado con regresión. Con frecuencia se aconseja graficar tanto los residuales originales
como uno o más de los residuales escalados. Normalmente se graficarán aquí los residuales
estudentizados, porque tienen varianza constante.

Gráfica de probabilidad normal

La parte (a) es el gráfico ideal, el gráfico (b) presenta distribución con colas gruesas, el gráfico (c) presenta
distribución con colas delgadas, el gráfico (d) presenta asimetría positiva y el gráfico (e) presenta asimetría
negativa.
Gráfica de residuales en función de los valores ajustados 𝑦𝑖̂ 
Las distribuciones en las partes (b) y (c) indican que la varianza de los errores no es constante. La figura de
embudo abierto hacia afuera en la parte (b) implica que la varianza es función creciente de y. La
distribución en doble arco en la parte (c) se presenta con frecuencia cuando y es proporción entre 0 y 1. El
método común para manejar la no constancia de la varianza es aplicar una transformación adecuada ya
sea a la variable regresora o a la de respuesta.
Gráfica de residuales en el tiempo

Test de Durwin Watson

Para detectar la presencia de la autocorrelación suelen ser útiles las gráficas residuales. La presentación
más adecuada es la de los residuales en función del tiempo. Si hay autocorrelación positiva, los residuales
de igual signo se presentarán en grupos, que indica que no hay los suficientes cambios de signo en la
secuencia de los residuales. Por otra parte, si hay autocorrelación negativa, los residuales cambiarián de
signo con demasiada rapidez.

Para detectar la presencia de la autocorrelación se pueden aplicar diversas pruebas estadísticas. La que
desarrollaron Durwin-Watson se usa ampliamente, ya que se basa en la hipotesis de que los errores del
modelo de regresión se generan en un proceso autorregresivo de primer orden, que se observa a intervalos
de tiempo igualmente espaciados, esto es,

𝜀𝑡 = 𝜌𝜀𝑡−1 + 𝑎𝑡
Como la mayor parte de los problemas de regresión donde intervienen las series de tiempo tienen
autocorrelación positiva, las hipotesis que se suelen considerar en la prueba de Durwin-Watson son:

𝐻0 : 𝜌 = 0
𝐻1 : 𝜌 > 0
El estadístico de prueba es
𝑛
∑ (𝑒𝑡 − 𝑒𝑡−1 )2
𝑖=2
𝑑= 𝑛
∑𝑡=1 𝑒2𝑡
La distribución de 𝑑 depende de la matrix 𝑋, sin embargo, Durwin-Watson demostraron que 𝑑 está entre
dos cotas, digamos que 𝑑𝐿 y 𝑑𝑈 . EL procedimiento de decisión es el siguiente:

Si 𝑑 < 𝑑𝐿 rechazar 𝐻0 : 𝜌 = 0
Si 𝑑 > 𝑑𝑈 no rechazar 𝐻0 : 𝜌 = 0
Si 𝑑𝐿 ≤ 𝑑 ≤ 𝑑𝑈 la prueba no es concluyente
Ejemplo:
In [1]: options(warn = -1)
suppressMessages(library(MPV))
suppressMessages(library(tidyverse))
suppressMessages(library(GGally))
suppressMessages(library(qpcR))
suppressMessages(library(tseries))
suppressMessages(library(nortest))
suppressMessages(library(lmtest))
suppressMessages(library(ggpubr))
suppressMessages(library(corrplot))
suppressMessages(library(forecast))
suppressMessages(library(stargazer))
suppressMessages(library(regclass))
suppressMessages(library(mctest))
suppressMessages(library(car))
suppressMessages(library(olsrr))
options(warn = 0)
options(repr.plot.width = 9, repr.plot.height = 5)

Un embotellador de bebidas de gaseosas analiza las rutas de servicios de máquinas expendedoras en su


sistema de distribución. Le interesa predecir el tiempo necesario para que el representante de ruta atienda
las máquinas expendedoras en una tienda. Esta actividad de servicio consiste en abastecer la máquina con
productos embotellados, y algo de mantenimiento o limpieza. El ingeniero industrial responsable del estudio
𝑦
ha sugerido que las dos variables más importantes que afectan el el tiempo de entrega son la cantidad de
𝑥1 𝑥2
cajas de producto abastecido, , y la distancia caminada por el representante, . El ingeniero ha reunido
25 observaciones de tiempo de entrega.

In [2]: data <- MPV::p8.3 %>% rename(TIEMPO = y, CANTIDAD = x1 , DISTANCIA = x2)


data %>% head()

A data.frame: 6 × 3

TIEMPO CANTIDAD DISTANCIA

<dbl> <dbl> <dbl>

1 16.68 7 560

2 11.50 3 220

3 12.03 3 340

4 14.88 4 80

5 13.75 6 150

6 18.11 7 330
In [3]: ggpairs(data, lower = list(continuous = 'smooth'))

In [4]: model.reg <- lm(TIEMPO ~ CANTIDAD + DISTANCIA , data = data)

In [5]: summary(model.reg)

Call:
lm(formula = TIEMPO ~ CANTIDAD + DISTANCIA, data = data)

Residuals:
Min 1Q Median 3Q Max
-5.7880 -0.6629 0.4364 1.1566 7.4197

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.341231 1.096730 2.135 0.044170 *
CANTIDAD 1.615907 0.170735 9.464 3.25e-09 ***
DISTANCIA 0.014385 0.003613 3.981 0.000631 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.259 on 22 degrees of freedom


Multiple R-squared: 0.9596, Adjusted R-squared: 0.9559
F-statistic: 261.2 on 2 and 22 DF, p-value: 4.687e-16
In [6]: stargazer(model.reg, title = "Modelo Estimado", type = "text")

Modelo Estimado
===============================================
Dependent variable:
---------------------------
TIEMPO
-----------------------------------------------
CANTIDAD 1.616***
(0.171)

DISTANCIA 0.014***
(0.004)

Constant 2.341**
(1.097)

-----------------------------------------------
Observations 25
R2 0.960
Adjusted R2 0.956
Residual Std. Error 3.259 (df = 22)
F Statistic 261.235*** (df = 2; 22)
===============================================
Note: *p<0.1; **p<0.05; ***p<0.01

In [7]: stargazer(confint.lm(model.reg,level=0.95),type = 'text')

========================
2.5 % 97.5 %
------------------------
(Intercept) 0.067 4.616
CANTIDAD 1.262 1.970
DISTANCIA 0.007 0.022
------------------------

In [8]: ggcoef(model.reg, mapping = aes(x = estimate, y = term, size = p.value),vline_color = 'r


errorbar_color = "blue",errorbar_height = .25,color = 'purple') + theme_classic()
scale_size_continuous(trans = "reverse")
In [10]: y.ajustado <- model.reg$fitted.values
ri <- rstandard(model.reg)
tii <- rstudent(model.reg)
hii <- hatvalues(model.reg)
ei <- PRESS(model.reg)$residuals

.........10.........20.....

In [11]: data %>% mutate(y.ajustado,ri,hii,tii,ei)

A data.frame: 25 × 8

TIEMPO CANTIDAD DISTANCIA y.ajustado ri hii tii ei

<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>

16.68 7 560 21.708084 -1.62767993 0.10180178 -1.69562881 -5.59796734

11.50 3 220 10.353615 0.36484267 0.07070164 0.35753764 1.23360321

12.03 3 340 12.079794 -0.01609165 0.09873476 -0.01572177 -0.05524867

14.88 4 80 9.955646 1.57972040 0.08537479 1.63916491 5.38401290

13.75 6 150 14.194398 -0.14176094 0.07501050 -0.13856493 -0.48043610

18.11 7 330 18.399574 -0.09080847 0.04286693 -0.08873728 -0.30254339

8.00 2 110 7.155376 0.27042496 0.08179867 0.26464769 0.91986749

17.83 7 210 16.673395 0.36672118 0.06372559 0.35938983 1.23532680

79.24 30 1460 71.820294 3.21376278 0.49829216 4.31078012 14.78889824

21.50 5 605 19.123587 0.81325432 0.19629595 0.80677584 2.95682585

40.33 16 688 38.092507 0.71807970 0.08613260 0.70993906 2.44837821

21.00 10 215 21.593041 -0.19325733 0.11365570 -0.18897451 -0.66908638

13.50 4 255 12.472991 0.32517935 0.06112463 0.31846924 1.09387183

19.75 6 462 18.682464 0.34113547 0.07824332 0.33417725 1.15815364

24.00 9 448 23.328798 0.21029137 0.04111077 0.20566324 0.69997845

29.00 10 776 29.662928 -0.22270023 0.16594043 -0.21782566 -0.79482144

15.35 6 200 14.913640 0.13803929 0.05943202 0.13492400 0.46393280

19.00 7 132 15.551379 1.11295196 0.09626046 1.11933065 3.81594602

9.50 3 36 7.706807 0.57876634 0.09644857 0.56981420 1.98460588

35.10 17 770 40.887970 -1.87354643 0.10168486 -1.99667657 -6.44313971

17.90 10 140 20.514179 -0.87784258 0.16527689 -0.87308697 -3.13179171

52.32 26 810 56.006528 -1.44999541 0.39157522 -1.48962473 -6.05913500

18.75 9 450 23.357568 -1.44368977 0.04126005 -1.48246718 -4.80585779

19.83 8 635 24.402854 -1.49605875 0.12060826 -1.54221512 -5.20001871

10.75 4 150 10.962584 -0.06750861 0.06664345 -0.06596332 -0.22776283

Normalidad de los residuos

In [12]: mean(tii)
sd(tii)

0.0534050722399188

1.27582672010531
In [13]: histograma <- ggplot(data = NULL,aes(x = tii,y = ..density..)) + theme_classic() +
geom_histogram(bins=20) + geom_density(col = 'red',size = 2)
cajas <- ggplot(data = NULL,aes(x = tii)) + theme_classic()+ geom_boxplot() + coord_flip
ggarrange(histograma,cajas,ncol = 2, nrow = 1)

In [14]: ggplot(data = NULL,aes(sample = tii)) + theme_classic() + stat_qq() + stat_qq_line()


In [15]: jarque.bera.test(tii)
shapiro.test(tii)
ks.test(tii,'pnorm')
lillie.test(tii)

Jarque Bera Test

data: tii
X-squared = 16.789, df = 2, p-value = 0.0002261

Shapiro-Wilk normality test

data: tii
W = 0.87013, p-value = 0.004352

One-sample Kolmogorov-Smirnov test

data: tii
D = 0.17378, p-value = 0.3919
alternative hypothesis: two-sided

Lilliefors (Kolmogorov-Smirnov) normality test

data: tii
D = 0.17582, p-value = 0.04478

In [17]: #ols_test_normality(model.reg)
ols_test_normality(tii)

-----------------------------------------------
Test Statistic pvalue
-----------------------------------------------
Shapiro-Wilk 0.8701 0.0044
Kolmogorov-Smirnov 0.1758 0.3779
Cramer-von Mises 1.8002 0.0000
Anderson-Darling 1.0164 0.0092
-----------------------------------------------

Varianza constante
In [18]: ggplot(data=data) +
theme_classic() +
geom_point(aes(y.ajustado,tii), col = 'navy', size = 3) +
geom_hline(yintercept = c(0,3,-3), col = c('black', 'red', 'red')) +
scale_y_continuous(expand=c(0.05,0.5), limits = c(-4,6)) +
labs(title = 'GRÁFICO DE VALORES AJUSTADOS VS RESIDUOS',
x = 'Valores Ajustados',
y = 'Residuos Estundentizados') +
theme(axis.title = element_text(size = 20),
plot.title = element_text(hjust = 0.5, size = 15),
text = element_text(size=10))

Test de Breusch Pagan

𝐻0 : Los errores tienen varianza constante


𝐻1 : Los errores no tienen varianza constante
In [19]: bptest(model.reg)

studentized Breusch-Pagan test

data: model.reg
BP = 11.988, df = 2, p-value = 0.002493

Se rechaza 𝐻0
Independencia de los errores
In [20]: ggplot(data=data) +
theme_classic() +
geom_point(aes(c(1:nrow(data)),tii), col = 'navy', size = 3) +
geom_line(aes(c(1:nrow(data)),tii),col = 'navy') +
geom_hline(yintercept = 0, col = 'black') +
scale_y_continuous(limits = c(-3.5,6)) +
labs(title = 'GRÁFICO DE VALORES AJUSTADOS VS TIEMPO',
x = 'Orden',
y = 'Residuos Estundentizados') +
theme(axis.title = element_text(size = 9),
plot.title = element_text(hjust = 0.5, size = 9),
text = element_text(size=8))

Test de Durbin-Watson

𝐻0 : Los errores son independientes


𝐻1 : Los errores están correlacionados
In [21]: dwtest(model.reg)

Durbin-Watson test

data: model.reg
DW = 1.1696, p-value = 0.01202
alternative hypothesis: true autocorrelation is greater than 0

Test de Breush-Godfrey
𝐻0 : Los errores son independientes
𝐻1 : Los errores están correlacionados
In [25]: bgtest(model.reg,order = 1)

Breusch-Godfrey test for serial correlation of order up to 1

data: model.reg
LM test = 3.4136, df = 1, p-value = 0.06466

No se rechaza 𝐻0
In [26]: autoplot(acf(tii,plot=FALSE))+ theme_classic() + labs(title = 'Autocorrelación de los ti

Multicolinealidad

In [20]: imcdiag(model.matrix(model.reg)[,-1],model.reg$model[1],method='VIF')

Call:
imcdiag(x = model.matrix(model.reg)[, -1], y = model.reg$model[1],
method = "VIF")

VIF Multicollinearity Diagnostics

VIF detection
CANTIDAD 3.1185 0
DISTANCIA 3.1185 0

NOTE: VIF Method Failed to detect multicollinearity

0 --> COLLINEARITY is not detected by the test

===================================
In [25]: options(repr.plot.width = 6,repr.plot.height = 5)
mc.plot(model.matrix(model.reg)[,-1],model.reg$model[1],vif=2.5)

También podría gustarte