Im folgenden werde ich nicht ecdf()
verwenden, da es einfach ist, empirische kumulative Dichtefunktion (ECDF) selbst zu erhalten.
Erstens haben wir Proben X
in aufsteigender Reihenfolge sortieren:
X <- sort(X)
ECDF bei diesen Proben nimmt Werte Funktion:
e_cdf <- 1:length(X)/length(X)
Wir könnten dann Skizze ECDF von:
plot(X, e_cdf, type = "s")
abline(h = 0.6, lty = 3)

Nun suchen wir den ersten Wert von X
, so dass P(X) >= 0.6
. Dies ist nur:
X[which(e_cdf >= 0.6)[1]]
# [1] 0.2290196
Da unsere Daten von der Standardnormalverteilung abgetastet werden, die theoretische Quantil ist
qnorm(0.6)
# [1] 0.2533471
So unser Ergebnis ganz in der Nähe ist.
Verlängerungs
Da die Inverse von CDF ist Quantil-Funktion (zum Beispiel das Inverse pnorm()
ist qnorm()
) kann man die Inverse von ECDF als Probe Quantil erraten, i, e, die Inverse ecdf()
ist quantile()
. Das ist nicht wahr!
ECDF ist eine Treppen-/Treppenfunktion und hat keine Inverse. Wenn wir ECDF um y = x
drehen, ist die resultierende Kurve keine mathematische Funktion. So Sample-Quantil hat nichts mit ECDF zu tun.
Für n
sortierten Proben Probe Quantil-Funktion ist in der Tat eine lineare Interpolationsfunktion von (x, y)
mit:
- x-Werten &
seq(0, 1, length = n)
;
- y-Werte sind sortierte Proben.
Wir können unsere eigene Version von Probe Quantilsfunktion durch definieren:
my_quantile <- function(x, prob) {
if (is.unsorted(x)) x <- sort(x)
n <- length(x)
approx(seq(0, 1, length = n), x, prob)$y
}
Werfen wir einen Test haben:
my_quantile(x, 0.6)
# [1] 0.2343171
quantile(x, prob = 0.6, names = FALSE)
# [1] 0.2343171
Beachten Sie, dass von unterscheidet sich führen, was wir bekommen von X[which(e_cdf >= 0.6)[1]]
.
Aus diesem Grund weigere ich mich, quantile()
in meiner Antwort zu verwenden.
Können Sie ein Beispiel angeben? Danke vielmals. –
StackOverflow ist nicht hier, um statistische Tutoring-Sitzungen zu geben. Wenn Sie über Ihre Statistiken HW verwirrt sind, sollten Sie auf CrossValidated.com veröffentlichen und das Selbstlern-Tag verwenden. –