Comprobación de la adecuación del modelo

  1. Para un modelo de regresión lineal, obtener los residuales según fórmula usando matrices y verificar con el comando residuals.

  1. Verificar si se distribuyen normalmente usando el histograma, el gráfico de probabilidad normal y una hipótesis.

Variables

Se utilizaron las variables presentadas en el Foro 3 (link).

Variable Dependiente: Ingresos semanales (y)

  • Ingresos semanales - unidades: miles de soles

Variables Independientes: Gastos en publicidad (x)

  • Publicidad en radio - unidades: miles de soles

  • Publicidad en periódico - unidades: miles de soles

  • Publicidad en televisión - unidades: miles de soles


1. Obtención de Residuales

1.1 Residuales usando matrices

\[\epsilon=(I-H)y\]

Se obtuvieron los residuales, de la siguiente manera:

lm(ingresos_semanales ~
     publicidad_radio +
     publicidad_periodico + 
     publicidad_tv, data = datos)->modelo

X = model.matrix(modelo)        # Matriz del modelo
H = X%*%solve(t(X)%*%X)%*%t(X)  # Matriz Hat
I = diag(25)                    # Creando matriz identidad 25x25
y = datos$ingresos_semanales    # Vector de y observados
e = (I-H)%*%y   
as.vector(e)
##  [1] -0.52239293  0.03575347  0.95622841  0.19079395  0.44273557  0.64876931
##  [7]  1.08070970 -2.83153308  0.68541065  0.85381474 -1.27450466  2.11027681
## [13] -0.47239460 -0.87687795 -1.13536883 -1.08993844 -1.09347342 -1.38209349
## [19] -0.42593218  2.52273292 -0.28985385  1.62393976 -0.59838727  0.01829373
## [25]  0.82329167

1.2 Verificando con el comando residuals

Verificamos:

modelo |> residuals()->residuales
as.vector(residuales)
##  [1] -0.52239293  0.03575347  0.95622841  0.19079395  0.44273557  0.64876931
##  [7]  1.08070970 -2.83153308  0.68541065  0.85381474 -1.27450466  2.11027681
## [13] -0.47239460 -0.87687795 -1.13536883 -1.08993844 -1.09347342 -1.38209349
## [19] -0.42593218  2.52273292 -0.28985385  1.62393976 -0.59838727  0.01829373
## [25]  0.82329167

2. ¿Los errores se distribuyen normalmente?

Los errores se deben distribuir de forma normal con media cero. Para comprobar esto, se requiere de histogramas, gráfico de probabilidad normal (cuantiles normales) y test de hipótesis de normalidad.

2.1 Histograma

Comprobando distribución normal de los errores, mediante un histograma:

library(ggplot2)

residuales |> data.frame() |> ggplot(aes(x=residuales,))+
  geom_histogram(aes(y =..density..),
                 bins = 1+3.3*log10(nrow(datos)),
                 fill = "#ed857e",
                 alpha = 0.6)+
  geom_density(col="red4", size=1.2, alpha=1.5) +
  labs(x="Residuales",y="Densidad")+
  theme_minimal()

En principio podemos decir que los residuales forman una distribución normal. Esto implicaría que el coeficiente de asimetría=0 y la curtosis=3.

library(moments)
library(normtest)
residuales |> skewness()           # 0.02455844
residuales |> skewness.norm.test() # p-value = 0.951

residuales |> kurtosis()           # 2.966515
residuales |> kurtosis.norm.test() # p-value = 0.9735

2.2 Gráfico de probabilidad normal

Normal Q-Q: Debería sugerir que los errores se distribuyen normalmente.

Paquete base

modelo |> plot(which=2)

Paquete olsrr

library(olsrr)
ols_plot_resid_qq(modelo)


Dado que la mayoría de los puntos están bastante próximos a la linea de tendencia, la normalidad parece aceptable. Ahora para comprobar la normalidad, aplicaremos a los errores residuales el test de Shapiro-Wilk con un nivel de significancia del 5%:

2.3 Test de normalidad - Shapiro Wilk

  • H0: Los errores siguen una distribución Normal \(\epsilon_i ∼N(μ,σ^2)\)

  • H1: Los errores no siguen una distribución Normal \(\epsilon_i ≁N(μ,σ^2)\)

  • α = 0.05

shapiro.test(modelo$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo$residuals
## W = 0.98147, p-value = 0.9126

Observamos que el pvalor=0.9126 es mayor al nivel de significancia=0.05, no se rechaza la H0. A un nivel de significancia del 5%, se confirma que los errores residuales siguen una distribución Normal.


  1. Universidad Nacional Agraria La Molina, Departamento Académico de Estadística e Informática. Curso Análisis de Regresión↩︎