Forse trarrai beneficio da uno strumento esplorativo. La suddivisione dei dati in decili della coordinata x sembra essere stata eseguita in questo spirito. Con le modifiche descritte di seguito, è un approccio perfettamente perfetto.
Sono stati inventati molti metodi esplorativi bivariati. Un semplice proposto da John Tukey ( EDA , Addison-Wesley 1977) è la sua "trama schematica errante". Sezionate la coordinata x in bin, erigete un diagramma a riquadri verticale dei corrispondenti dati y alla mediana di ciascun contenitore e collegate le parti chiave dei grafici a scatole (mediane, cerniere, ecc.) In curve (opzionalmente levigandole). Queste "tracce erranti" forniscono un quadro della distribuzione bivariata dei dati e consentono una valutazione visiva immediata di correlazione, linearità della relazione, valori anomali e distribuzioni marginali, nonché una solida stima e valutazione della bontà di adattamento di qualsiasi funzione di regressione non lineare .
A questa idea, Tukey ha aggiunto l'idea, in linea con l'idea del boxplot, che un buon modo per sondare la distribuzione dei dati è iniziare a metà e lavorare verso l'esterno, dimezzando la quantità di dati mentre procedi. Cioè, i bin da usare non devono essere tagliati su quantili equidistanti, ma dovrebbero invece riflettere i quantili nei punti e per . 1 - 2 - k k = 1 , 2 , 3 , ...2−k1−2−kk=1,2,3,…
Per visualizzare le diverse popolazioni di bin, possiamo rendere la larghezza di ciascun boxplot proporzionale alla quantità di dati che rappresenta.
La trama schematica errante risultante sarebbe simile a questa. I dati, sviluppati dal riepilogo dei dati, vengono visualizzati come punti grigi sullo sfondo. Su questo è stato disegnato il diagramma schematico errante, con le cinque tracce di colore e le trame di box (inclusi eventuali valori anomali mostrati) in bianco e nero.
La natura della correlazione vicina allo zero diventa immediatamente chiara: i dati si contorcono. Vicino al loro centro, che vanno da a , hanno una forte correlazione positiva. A valori estremi, questi dati mostrano relazioni curvilinee che nel complesso tendono ad essere negative. Il coefficiente di correlazione netto (che essere per questi dati) è vicino a zero. Tuttavia, insistere nell'interpretare che come "quasi nessuna correlazione" o "significativa ma bassa correlazione" sarebbe lo stesso errore falsificato nella vecchia battuta sullo statistico che era felice con la sua testa nel forno e i piedi nella ghiacciaia perché in media il la temperatura era confortevole. A volte un singolo numero non è sufficiente per descrivere la situazione.x = 4 - 0,074x=−4x=4−0.074
Strumenti esplorativi alternativi con scopi simili includono solidi levigati di quantili con finestre dei dati e adattamenti di regressioni quantili usando una gamma di quantili. Con la pronta disponibilità del software per eseguire questi calcoli sono forse diventati più facili da eseguire rispetto a una traccia schematica errante, ma non godono della stessa semplicità di costruzione, facilità di interpretazione e ampia applicabilità.
Il R
codice seguente ha prodotto la figura e può essere applicato ai dati originali con modifiche minime o nulle. (Ignora le avvertenze prodotte da bplt
(chiamato da bxp
): si lamenta quando non ha valori anomali da disegnare.)
#
# Data
#
set.seed(17)
n <- 1449
x <- sort(rnorm(n, 0, 4))
s <- spline(quantile(x, seq(0,1,1/10)), c(0,.03,-.6,.5,-.1,.6,1.2,.7,1.4,.1,.6),
xout=x, method="natural")
#plot(s, type="l")
e <- rnorm(length(x), sd=1)
y <- s$y + e # ($ interferes with MathJax processing on SE)
#
# Calculations
#
q <- 2^(-(2:floor(log(n/10, 2))))
q <- c(rev(q), 1/2, 1-q)
n.bins <- length(q)+1
bins <- cut(x, quantile(x, probs = c(0,q,1)))
x.binmed <- by(x, bins, median)
x.bincount <- by(x, bins, length)
x.bincount.max <- max(x.bincount)
x.delta <- diff(range(x))
cor(x,y)
#
# Plot
#
par(mfrow=c(1,1))
b <- boxplot(y ~ bins, varwidth=TRUE, plot=FALSE)
plot(x,y, pch=19, col="#00000010",
main="Wandering schematic plot", xlab="X", ylab="Y")
for (i in 1:n.bins) {
invisible(bxp(list(stats=b$stats[,i, drop=FALSE],
n=b$n[i],
conf=b$conf[,i, drop=FALSE],
out=b$out[b$group==i],
group=1,
names=b$names[i]), add=TRUE,
boxwex=2*x.delta*x.bincount[i]/x.bincount.max/n.bins,
at=x.binmed[i]))
}
colors <- hsv(seq(2/6, 1, 1/6), 3/4, 5/6)
temp <- sapply(1:5, function(i) lines(spline(x.binmed, b$stats[i,],
method="natural"), col=colors[i], lwd=2))