Una forma de abordar esta pregunta es mirarla al revés: ¿cómo podríamos comenzar con los residuos distribuidos normalmente y organizarlos para que sean heterocedásticos? Desde este punto de vista, la respuesta se vuelve obvia: asocie los residuos más pequeños con los valores pronosticados más pequeños.
Para ilustrar, aquí hay una construcción explícita.

Los datos a la izquierda son claramente heteroscedastic en relación con el ajuste lineal (se muestra en rojo). Esto es conducido a casa por los residuos frente a la gráfica prevista a la derecha. Pero, por construcción, el conjunto desordenado de residuos está cerca de la distribución normal, como muestra su histograma en el medio. (El valor p en la prueba de normalidad de Shapiro-Wilk es 0.60, obtenido con el Rcomando shapiro.test(residuals(fit))emitido después de ejecutar el siguiente código).
Los datos reales también pueden verse así. La moraleja es que la heterocedasticidad caracteriza una relación entre el tamaño residual y las predicciones, mientras que la normalidad no nos dice nada acerca de cómo los residuos se relacionan con otra cosa.
Aquí está el Rcódigo para esta construcción.
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")
ncvTestfunción del paquete del automóvil paraRrealizar una prueba formal de heterocedasticidad. En el ejemplo de whuber, el comandoncvTest(fit)produce un valor que es casi cero y proporciona una fuerte evidencia contra la variación constante del error (que se esperaba, por supuesto).