Być może skorzystałbyś z narzędzia eksploracyjnego. Wydaje się, że podział danych na decile współrzędnej x został dokonany w tym duchu. Dzięki modyfikacjom opisanym poniżej jest to bardzo dobre podejście.
Wynaleziono wiele dwuwymiarowych metod badawczych. Prostym zaproponowanym przez Johna Tukeya ( EDA , Addison-Wesley 1977) jest jego „wędrowny schemat”. Kroisz współrzędną x na przedziały, ustawiasz pionowy wykres odpowiadających danych y w środkowej części każdego przedziału i łączysz kluczowe części wykresów (mediany, zawiasy itp.) W krzywe (opcjonalnie wygładzając je). Te „wędrujące ślady” zapewniają obraz dwuwymiarowego rozkładu danych i umożliwiają natychmiastową wizualną ocenę korelacji, liniowości relacji, wartości odstających i rozkładów brzeżnych, a także solidne oszacowanie i ocenę dopasowania każdej nieliniowej funkcji regresji .
Do tego pomysłu Tukey dodał myśl, zgodną z ideą boxplot, że dobrym sposobem na zbadanie dystrybucji danych jest rozpoczęcie od środka i praca na zewnątrz, zmniejszenie o połowę ilości danych w miarę przemieszczania się. Oznacza to, że używane pojemniki nie muszą być cięte w równo rozmieszczonych kwantylach, ale powinny odzwierciedlać kwantyle w punktach i dla .2)- k1 -2)- kk = 1 , 2 , 3 , …
Aby wyświetlić różne populacje bin, możemy ustawić szerokość każdego wykresu pudełkowego proporcjonalnie do ilości danych, które reprezentuje.
Powstały schemat wędrówki wyglądałby mniej więcej tak. Dane opracowane na podstawie podsumowania danych są wyświetlane jako szare kropki w tle. Nad tym narysowano schemat wędrówki, z pięcioma śladami w kolorze, a wykresy pudełkowe (w tym wszelkie pokazane wartości odstające) w czerni i bieli.
Charakter niemal zerowej korelacji staje się natychmiast jasny: dane się zmieniają. W pobliżu ich środka, od do , mają silną korelację dodatnią. Przy ekstremalnych wartościach dane te wykazują relacje krzywoliniowe, które ogólnie są negatywne. Współczynnik korelacji netto (który dla tych danych wynosi ) jest bliski zeru. Jednak naleganie na interpretację tego jako „prawie brak korelacji” lub „znacząca, ale niska korelacja” byłoby tym samym błędem, który został sfałszowany w starym żartu o statystyce, który był zadowolony z głową w piekarniku i stopami w lodówce, ponieważ średnio temperatura była komfortowa. Czasami pojedynczy numer nie wystarczy, aby opisać sytuację.x = - 4x = 4- 0,074
Alternatywne narzędzia eksploracyjne o podobnych celach obejmują solidne wygładzanie okienkowanych kwantyli danych oraz dopasowanie regresji kwantyli przy użyciu szeregu kwantyli. Dzięki dostępności oprogramowania do wykonywania tych obliczeń być może stało się łatwiejsze do wykonania niż wędrujący schematyczny ślad, ale nie cieszą się taką samą prostotą budowy, łatwością interpretacji i szerokim zastosowaniem.
Poniższy R
kod utworzył rysunek i można go zastosować do oryginalnych danych z niewielką lub żadną zmianą. (Zignoruj ostrzeżenia wywołane przez bplt
(wywoływany przez bxp
): narzeka, gdy nie ma żadnych wartości odstających.)
#
# 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))