Je ne comprends pas vraiment l'hétéroscédasticité. Je voudrais savoir si mon modèle est approprié ou non selon ce tracé.
Je ne comprends pas vraiment l'hétéroscédasticité. Je voudrais savoir si mon modèle est approprié ou non selon ce tracé.
Réponses:
Comme l'a commenté @IrishStat, vous devez vérifier vos valeurs observées par rapport à vos erreurs pour voir s'il y a des problèmes de variabilité. J'y reviendrai vers la fin.
Juste pour avoir une idée de ce que nous entendons par hétéroskédasticité: lorsque vous ajustez un modèle linéaire sur une variable vous dites essentiellement que vous faites l'hypothèse que votre y ∼ N ( X β , σ 2 ) ou en termes simples que votre y devrait égaler X β plus quelques erreurs de variance σ 2 . C'est pratiquement votre modèle linéaire y = X β + ϵ , où les erreurs ϵ ∼ N ( 0 , σ 2 ). OK, cool jusqu'à présent, voyons cela dans le code:
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
si bien, comment se comporte mon modèle:
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");
ce qui devrait vous donner quelque chose comme ça: ce qui signifie que vos résidus ne semblent pas avoir une tendance évidente basée sur votre index arbitraire (1er graphique - le moins informatif vraiment), semblent ne pas avoir de réelle corrélation entre eux (2ème graphique - assez important et probablement plus important que l'homoscédasticité) et que les valeurs ajustées n'ont pas une tendance évidente à l'échec, c'est-à-dire. vos valeurs ajustées par rapport à vos résidus semblent assez aléatoires. Sur cette base, nous dirions que nous n'avons pas de problèmes d'hétéroskédasticité car nos résidus semblent avoir partout la même variance.
OK, vous voulez une hétéroskédasticité. Étant donné les mêmes hypothèses de linéarité et d'additivité, définissons un autre modèle génératif avec des problèmes d'hétéroskédasticité "évidents". À savoir après certaines valeurs, notre observation sera beaucoup plus bruyante.
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
où les simples diagrammes de diagnostic du modèle:
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");
devrait donner quelque chose comme: Ici, la première intrigue semble un peu "bizarre"; il semble que nous ayons quelques résidus qui se regroupent en petites magnitudes, mais ce n'est pas toujours un problème ... Le deuxième graphique est OK, signifie que nous n'avons pas de corrélation entre vos résidus dans différents décalages afin que nous puissions respirer un instant. Et le troisième graphique renverse les grains: il est clair que lorsque nous sommes arrivés à des valeurs plus élevées, nos résidus explosent. Nous avons certainement une hétéroskédasticité dans les résidus de ce modèle et nous devons faire quelque chose (par exemple , IRLS , régression de Theil-Sen , etc.)
Ici, le problème était vraiment évident, mais dans d'autres cas, nous aurions pu le manquer; pour réduire nos chances de le manquer, une autre intrigue intéressante a été celle mentionnée par IrishStat: valeurs résiduelles par rapport aux valeurs observées, ou pour notre problème de jouet à portée de main:
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")
ce qui devrait donner quelque chose comme:
Par souci d'équité, votre graphique des valeurs résiduelles par rapport aux valeurs ajustées semble relativement correct. Vérifier vos résidus par rapport à vos valeurs observées serait probablement utile pour vous assurer que vous êtes du bon côté. (Je n'ai pas mentionné les parcelles QQ ou quelque chose comme ça pour ne pas compliquer davantage les choses, mais vous voudrez peut-être aussi les vérifier brièvement.) J'espère que cela vous aidera à comprendre l'hétéroskédasticité et ce que vous devez rechercher.
Votre question semble concerner l'hétéroscédasticité (parce que vous l'avez mentionnée par son nom et ajouté la balise), mais votre question explicite (par exemple, dans le titre et) la fin de votre message est plus générale, "si mon modèle est approprié ou non selon cette terrain". Il ne suffit pas de déterminer si un modèle est inapproprié que d'évaluer l'hétéroscédasticité.
J'ai gratté vos données en utilisant ce site Web (ht @Alexis). Notez que les données sont triées par ordre croissant de fitted
. Sur la base de la régression et du graphique supérieur gauche, il semble être suffisamment fidèle:
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
Je ne vois aucune preuve d'hétéroscédasticité ici. En haut à droite (qq-plot), il ne semble pas non plus y avoir de problème avec l'hypothèse de normalité.
D'un autre côté, la courbe "S" dans l'ajustement lowess rouge (dans le graphique supérieur gauche), et les graphiques acf et pacf (dans le bas) semblent problématiques. À l'extrême gauche, la plupart des résidus sont au-dessus de la ligne grise 0. Lorsque vous vous déplacez vers la droite, la majeure partie des résidus chute en dessous de 0, puis au-dessus, puis à nouveau en dessous. Le résultat est que si je vous disais que je regardais un résidu particulier et qu'il avait une valeur négative (mais je ne vous ai pas dit lequel je regardais), vous pourriez deviner avec une bonne précision que les résidus à proximité ont également été négativement évalués. En d'autres termes, les résidus ne sont pas indépendants - savoir quelque chose à propos de l'un vous donne des informations sur les autres.
En plus des tracés, cela peut être testé. Une approche simple consiste à utiliser un test d'exécution :
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
Pour répondre à vos questions explicites: Votre graphique montre des autocorrélations en série / non indépendance de vos résidus. Cela signifie que votre modèle n'est pas approprié dans sa forme actuelle.