2016-07-23 13 views
1

I ecdf() Funktion verwenden finden empirische kumulative Dichtefunktion (ECDF) von einigen Stichproben zu berechnen:Wie Quantile einer empirischen kumulativen Dichtefunktion (ECDF)

set.seed(0) 
X = rnorm(100) 
P = ecdf(X) 

Jetzt P gibt ECDF und wir konnten plotten es:

plot(P) 
abline(h = 0.6, lty = 3) 

ecdf

Meine Frage ist: Wie kann ich den Beispielwert x finden, so dass P(x) = 0.6, d. H. Das 0,6-Quantil von ECDF oder die x-Koordinate des Schnittpunkts von ECDF und h = 0.6?

+0

Können Sie ein Beispiel angeben? Danke vielmals. –

+0

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. –

Antwort

1

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) 

enter image description here

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.

Verwandte Themen