Un modo per affrontare questa domanda è di guardarla al contrario: come possiamo iniziare con i residui normalmente distribuiti e sistemarli come eteroscedastici? Da questo punto di vista la risposta diventa ovvia: associa i residui più piccoli ai valori previsti più piccoli.
Per illustrare, ecco una costruzione esplicita.
I dati a sinistra sono chiaramente eteroscedastici rispetto all'adattamento lineare (mostrato in rosso). Questo è portato a casa dal residuo rispetto alla trama prevista sulla destra. Ma - per costruzione - l' insieme non ordinato di residui è vicino alla distribuzione normale, come mostra il loro istogramma nel mezzo. (Il valore p nel test di normalità di Shapiro-Wilk è 0,60, ottenuto con il R
comando shapiro.test(residuals(fit))
emesso dopo aver eseguito il codice seguente.)
Anche i dati reali possono apparire così. La morale è che l' eteroscedasticità caratterizza una relazione tra dimensione residua e previsioni mentre la normalità non ci dice nulla su come i residui si relazionano con qualsiasi altra cosa.
Ecco il R
codice per questa costruzione.
set.seed(17)
n <- 256
x <- (1:n)/n # The set of x values
e <- rnorm(n, sd=1) # A set of *normally distributed* values
i <- order(runif(n, max=dnorm(e))) # Put the larger ones towards the end on average
y <- 1 + 5 * x + e[rev(i)] # Generate some y values plus "error" `e`.
fit <- lm(y ~ x) # Regress `y` against `x`.
par(mfrow=c(1,3)) # Set up the plots ...
plot(x,y, main="Data", cex=0.8)
abline(coef(fit), col="Red")
hist(residuals(fit), main="Residuals")
plot(predict(fit), residuals(fit), cex=0.8, main="Residuals vs. Predicted")
ncvTest
funzione del pacchetto auto perR
condurre un test formale per l'eteroscedasticità. Nell'esempio di whuber, il comandoncvTest(fit)
produce un valore che è quasi zero e fornisce prove evidenti contro la costante variazione dell'errore (che era prevedibile, ovviamente).