Se utilizaron las variables presentadas en el Foro 3 (link).
Variable Dependiente: Ingresos semanales (y)
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
\[\epsilon=(I-H)y\]
Se obtuvieron los residuales, de la siguiente manera:
lm(ingresos_semanales ~
+
publicidad_radio +
publicidad_periodico data = datos)->modelo
publicidad_tv,
= model.matrix(modelo) # Matriz del modelo
X = X%*%solve(t(X)%*%X)%*%t(X) # Matriz Hat
H = diag(25) # Creando matriz identidad 25x25
I = datos$ingresos_semanales # Vector de y observados
y = (I-H)%*%y
e 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
Verificamos:
|> residuals()->residuales
modelo 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
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.
Comprobando distribución normal de los errores, mediante un histograma:
library(ggplot2)
|> data.frame() |> ggplot(aes(x=residuales,))+
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)
|> skewness() # 0.02455844
residuales |> skewness.norm.test() # p-value = 0.951
residuales
|> kurtosis() # 2.966515
residuales |> kurtosis.norm.test() # p-value = 0.9735 residuales
Normal Q-Q: Debería sugerir que los errores se distribuyen normalmente.
|> plot(which=2) modelo
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%:
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.
Universidad Nacional Agraria La Molina, Departamento Académico de Estadística e Informática. Curso Análisis de Regresión↩︎