
Non capisco davvero l'eteroscedasticità. Vorrei sapere se il mio modello è appropriato o meno secondo questa trama.

Non capisco davvero l'eteroscedasticità. Vorrei sapere se il mio modello è appropriato o meno secondo questa trama.
Risposte:
Come ha commentato @IrishStat, è necessario verificare i valori osservati rispetto agli errori per vedere se ci sono problemi con la variabilità. Tornerò su questo verso la fine.
. OK, bello finora, vediamo che nel codice:
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
così giusto, come si comporta il mio modello:
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");
che dovrebbe darti qualcosa del genere: il
che significa che i tuoi residui non sembrano avere una tendenza evidente basata sul tuo indice arbitrario (1 ° diagramma - il meno informativo in realtà), sembrano non avere una reale correlazione tra di loro (2 ° diagramma - abbastanza importante e probabilmente più importante dell'omoschedasticità) e che i valori adattati non hanno un'evidente tendenza al fallimento, vale a dire. i tuoi valori adattati rispetto ai tuoi residui appaiono abbastanza casuali. Sulla base di ciò, diremmo che non abbiamo problemi di eteroschedasticità poiché i nostri residui sembrano avere la stessa varianza ovunque.
OK, vuoi l'eteroschedasticità però. Considerati gli stessi presupposti di linearità e additività, definiamo un altro modello generativo con "evidenti" problemi di eteroschedasticità. Vale a dire dopo alcuni valori la nostra osservazione sarà molto più rumorosa.
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
dove i semplici grafici diagnostici del modello:
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");
dovrebbe dare qualcosa del tipo:
qui la prima trama sembra un po '"strana"; sembra che abbiamo alcuni residui che si raggruppano in piccole dimensioni ma che non è sempre un problema ... Il secondo diagramma è OK, significa che non abbiamo correlazione tra i tuoi residui in ritardi diversi, quindi potremmo respirare per un momento. E la terza trama rovescia i fagioli: è chiaro che quando arriviamo a valori più alti i nostri residui esplodono. Abbiamo sicuramente eteroschedasticità nei residui di questo modello e dobbiamo fare qualcosa al riguardo (ad es. IRLS , regressione di Theil-Sen , ecc.)
Qui il problema era davvero ovvio, ma in altri casi ci saremmo persi; per ridurre le nostre possibilità di perderlo, un'altra trama penetrante è stata quella menzionata da IrishStat: Residui contro valori osservati, o per il nostro problema con i giocattoli a portata di mano:
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")
che dovrebbe dare qualcosa del tipo:
In tutta onestà della tua situazione, la trama dei tuoi residui contro valori adattati sembra relativamente OK. Controllare i tuoi residui rispetto ai valori osservati sarebbe probabilmente utile per assicurarti di essere al sicuro. (Non ho menzionato trame QQ o cose del genere per non confondere di più le cose, ma potresti voler controllare brevemente anche quelle.) Spero che questo ti aiuti a capire l'eteroschedasticità e ciò che dovresti cercare.
La tua domanda sembra riguardare l'eteroscedasticità (perché l'hai menzionata per nome e hai aggiunto il tag), ma la tua domanda esplicita (ad esempio, nel titolo e) che termina il tuo post è più generale, "se il mio modello è appropriato o meno secondo questo tracciare". C'è di più nel determinare se un modello è inappropriato che valutare l'eteroscedasticità.
Ho cancellato i tuoi dati utilizzando questo sito Web (ht @Alexis). Si noti che i dati sono ordinati in ordine crescente di fitted. Sulla base della regressione e della trama in alto a sinistra, sembra essere sufficientemente fedele:
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

Non vedo alcuna prova di eteroscedasticità qui. Dall'angolo in alto a destra (qq-plot), non sembra esserci alcun problema con l'assunzione della normalità.
D'altra parte, la curva a "S" nell'adattamento lowess rosso (nella trama in alto a sinistra) e i grafici acf e pacf (in basso) sembrano problematici. All'estrema sinistra, la maggior parte dei residui si trova sopra la linea grigia 0. Mentre ti sposti a destra, la maggior parte dei residui scende sotto 0, quindi sopra e poi di nuovo sotto. Il risultato di questo è che se ti dicessi che stavo guardando un particolare residuo e che aveva un valore negativo (ma non ti ho detto quale stavo guardando), potresti indovinare con buona precisione che i residui nelle vicinanze inoltre sono stati valutati negativamente. In altre parole, i residui non lo sono indipendenti: sapere qualcosa su uno ti dà informazioni sugli altri.
Oltre ai grafici, questo può essere testato. Un approccio semplice consiste nell'utilizzare un test delle esecuzioni :
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
Ciò implica che il tuo modello non è specificato correttamente. Poiché ci sono due "curve" nella relazione, ti consigliamo di aggiungere e termini al tuo modello per tener conto di ciò.
Per rispondere a domande esplicite: la trama mostra autocorrelazioni seriali / non indipendenza dei residui. Significa che il tuo modello non è appropriato nella sua forma attuale.