Comment interpréter ce graphique ajusté par rapport aux résidus?

17

entrez la description de l'image ici

Je ne comprends pas vraiment l'hétéroscédasticité. Je voudrais savoir si mon modèle est approprié ou non selon ce tracé.

kanbhold
la source
Veuillez préparer un graphique des résidus par rapport aux valeurs observées. Si la variabilité des erreurs peut être liée à la valeur observée, cela pourrait suggérer un problème d'hétérogénéité
IrishStat
1
Les résidus @IrishState vs observés montreront une corrélation. Ils sont plus difficiles à interpréter à cause de cela. Résidus vs ajustés montre la meilleure approximation que nous avons de la façon dont les erreurs se rapportent à la moyenne de la population, et est quelque peu utile pour examiner la considération plus habituelle dans la régression de savoir si la variance est liée à la moyenne.
Glen_b -Reinstate Monica

Réponses:

18

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 )yyN(Xβ,σ2)yXβσ2y=Xβ+ϵϵ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 entrez la description de l'image ici 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: entrez la description de l'image ici 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:

entrez la description de l'image iciR2R20,59890,03919

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.

usεr11852 dit Reinstate Monic
la source
4
Vous ne devriez pas être surpris ou inquiet de voir une relation entre les résidus et les valeurs observées . Essayez de calculer le résultat théorique pour un modèle correctement spécifié.
Scortchi - Réintégrer Monica
4
Ou voyez ici .
Scortchi - Réintégrer Monica
+1 à vos deux commentaires. Merci d'avoir signalé ce problème; votre commentaire est / était sur place. J'ai édité ce passage pour qu'il se lise correctement maintenant.
usεr11852 dit Réintégrer Monic le
1
Je vous en prie. Je ne sais toujours pas quelle valeur vous pensez que le tracé des résidus par rapport aux valeurs de réponse observées ajoute; l'existence et la nature de l'hétéroscédasticité sont moins évidentes que dans le graphique des valeurs résiduelles en fonction des réponses ajustées.
Scortchi - Réintégrer Monica
Je suis (surtout) d'accord. Comme vous l'avez vu, ce n'était pas non plus mon premier complot de diagnostic. Cela a été suggéré par IrishStat et j'ai pensé que c'était nécessaire pour une réponse complète au PO.
usεr11852 dit Réintégrer Monic le
9

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

entrez la description de l'image ici

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

X2X3

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.

gung - Réintégrer Monica
la source