Realmente no entiendo la heterocedasticidad. Me gustaría saber si mi modelo es apropiado o no de acuerdo con este argumento.
Realmente no entiendo la heterocedasticidad. Me gustaría saber si mi modelo es apropiado o no de acuerdo con este argumento.
Respuestas:
Como comentó @IrishStat, debe verificar sus valores observados con sus errores para ver si hay problemas con la variabilidad. Volveré a esto hacia el final.
Solo para tener una idea de lo que entendemos por heterocedasticidad: cuando ajusta un modelo lineal en una variable , esencialmente está diciendo que asume que su o en los términos simples de que se espera que su equivalga a más algunos errores que tienen varianza . Este es prácticamente su modelo lineal , donde se encuentran los errores . OK, genial hasta ahora, veamos eso en el código:y ∼ N ( X β , σ 2 ) y X β σ 2 y = X β + ϵ
set.seed(1); #set the seed for reproducability
N = 100; #Sample size
x = runif(N) #Independant variable
beta = 4; #Regression coefficient
epsilon = rnorm(N); #Error with variance 1 and mean 0
y = x * beta + epsilon #Your generative model
lin_mod <- lm(y ~x) #Your linear model
así que, cómo se comporta mi modelo:
x11(); par(mfrow=c(1,3)); #Make a new 1-by-3 plot
plot(residuals(lin_mod));
title("Simple Residual Plot - OK model")
acf(residuals(lin_mod), main = "");
title("Residual Autocorrelation Plot - OK model");
plot(fitted(lin_mod), residuals(lin_mod));
title("Residual vs Fit. value - OK model");
lo que debería darle algo como esto: lo que significa que sus residuos no parecen tener una tendencia obvia basada en su índice arbitrario (1er gráfico - realmente menos informativo), parecen no tener una correlación real entre ellos (2º gráfico - bastante importante y probablemente más importante que la homocedasticidad) y que los valores ajustados no tienen una tendencia obvia de falla, es decir. sus valores ajustados frente a sus residuos parecen bastante aleatorios. En base a esto, diríamos que no tenemos problemas de heterocedasticidad ya que nuestros residuos parecen tener la misma variación en todas partes.
De acuerdo, sin embargo, quieres heterocedasticidad. Dados los mismos supuestos de linealidad y aditividad, definamos otro modelo generativo con problemas de heteroscedasticidad "obvios". Es decir, después de algunos valores, nuestra observación será mucho más ruidosa.
epsilon_HS = epsilon;
epsilon_HS[ x>.55 ] = epsilon_HS[x>.55 ] * 9 #Heteroskedastic errors
y2 = x * beta + epsilon_HS #Your generative model
lin_mod2 <- lm(y2 ~x) #Your unfortunate LM
donde las gráficas de diagnóstico simples del modelo:
par(mfrow=c(1,3)); #Make a new 1-by-3 plot
plot(residuals(lin_mod2));
title("Simple Residual Plot - Fishy model")
acf(residuals(lin_mod2), main = "");
title("Residual Autocorrelation Plot - Fishy model");
plot(fitted(lin_mod2), residuals(lin_mod2));
title("Residual vs Fit. value - Fishy model");
debería dar algo como: Aquí la primera trama parece un poco "extraña"; parece que tenemos algunos residuos que se agrupan en pequeñas magnitudes, pero eso no siempre es un problema ... El segundo gráfico está bien, significa que no tenemos correlación entre sus residuos en diferentes rezagos, por lo que podríamos respirar por un momento. Y la tercera trama derrama los granos: está claro que a medida que alcanzamos valores más altos, nuestros residuos explotan. Definitivamente tenemos heteroscedasticidad en los residuos de este modelo y necesitamos hacer algo al respecto (p. Ej. , IRLS , regresión de Theil-Sen , etc.)
Aquí el problema era realmente obvio, pero en otros casos podríamos haber pasado por alto; Para reducir nuestras posibilidades de perderlo, otra trama perspicaz fue la mencionada por IrishStat: Residuals versus valores observados, o para nuestro problema de juguete en cuestión:
par(mfrow=c(1,2))
plot(y, residuals(lin_mod) );
title( "Residual vs Obs. value - OK model")
plot(y2, residuals(lin_mod2) );
title( "Residual vs Obs. value - Fishy model")
que debería dar algo como:
. Por lo tanto, tenemos razones para creer que la especificación errónea del modelo podría ser un problema. (Gracias a Scortchi por señalar la declaración engañosa en mi respuesta original).
Para ser justos con su situación, su gráfico de residuos versus valores ajustados parece relativamente correcto. Probablemente sería útil verificar sus residuos frente a sus valores observados para asegurarse de que está en el lado seguro. (No mencioné las parcelas QQ ni nada de eso para no dejar más perplejas las cosas, pero es posible que también desee verificarlas brevemente). Espero que esto ayude a comprender la heterocedasticidad y lo que debe tener en cuenta.
Su pregunta parece ser sobre la heterocedasticidad (porque lo mencionó por su nombre y agregó la etiqueta), pero su pregunta explícita (por ejemplo, en el título y) al finalizar su publicación es más general, "si mi modelo es apropiado o no de acuerdo con esto trama". Hay más para determinar si un modelo es inapropiado que evaluar la heterocedasticidad.
Raspé sus datos usando este sitio web (ht @Alexis). Tenga en cuenta que los datos se ordenan en orden ascendente de fitted
. Basado en la regresión y la gráfica superior izquierda, parece ser lo suficientemente fiel:
mod = lm(residuals~fitted)
summary(mod)
# ...
# Residuals:
# Min 1Q Median 3Q Max
# -0.78374 -0.13559 0.00928 0.19525 0.48107
#
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 0.06406 0.35123 0.182 0.856
# fitted -0.01178 0.05675 -0.208 0.836
#
# Residual standard error: 0.2349 on 53 degrees of freedom
# Multiple R-squared: 0.0008118, Adjusted R-squared: -0.01804
# F-statistic: 0.04306 on 1 and 53 DF, p-value: 0.8364
No veo ninguna evidencia de heterocedasticidad aquí. Desde la esquina superior derecha (qq-plot), tampoco parece haber ningún problema con el supuesto de normalidad.
Por otro lado, la curva "S" en el ajuste de lowess rojo (en la gráfica superior izquierda), y las gráficas acf y pacf (en la parte inferior) parecen problemáticas. En el extremo izquierdo, la mayoría de los residuos están por encima de la línea gris 0. A medida que se mueve hacia la derecha, la mayor parte de los residuos caen por debajo de 0, luego arriba y luego nuevamente debajo. El resultado de esto es que si te dijera que estaba mirando un residuo en particular y que tenía un valor negativo (pero no te dije cuál estaba mirando), podrías adivinar con buena precisión que los residuos cercanos También fueron valorados negativamente. En otras palabras, los residuos no son independientes. saber algo sobre uno le brinda información sobre los demás.
Además de las parcelas, esto se puede probar. Un enfoque simple es utilizar una prueba de ejecución :
library(randtests)
runs.test(residuals)
# Runs Test
#
# data: residuals
# statistic = -3.2972, runs = 16, n1 = 27, n2 = 27, n = 54, p-value = 0.0009764
# alternative hypothesis: nonrandomness
Para responder a sus preguntas explícitas: Su gráfica muestra autocorrelaciones en serie / no independencia de sus residuos. Significa que su modelo no es apropiado en su forma actual.