Antworten:
Die ecdf
auf eine Datenprobe angewendete Funktion gibt eine Funktion zurück, die die empirische kumulative Verteilungsfunktion darstellt. Beispielsweise:
> X = rnorm(100) # X is a sample of 100 normally distributed random variables
> P = ecdf(X) # P is a function giving the empirical CDF of X
> P(0.0) # This returns the empirical CDF at zero (should be close to 0.5)
[1] 0.52
> plot(P) # Draws a plot of the empirical CDF (see below)
Wenn Sie ein Objekt haben möchten, das die empirische CDF darstellt, die bei bestimmten Werten ausgewertet wird (und nicht als Funktionsobjekt), können Sie dies tun
> z = seq(-3, 3, by=0.01) # The values at which we want to evaluate the empirical CDF
> p = P(z) # p now stores the empirical CDF evaluated at the values in z
Beachten Sie, dass p
höchstens die gleiche Menge an Informationen wie P
(und möglicherweise weniger) enthält, die wiederum die gleiche Menge an Informationen wie enthalten X
.
x
schreiben Sie einfach P(x)
. Beachten Sie, dass x
dies ein Vektor sein kann (siehe die letzten paar Sätze meiner Antwort.)
Was Sie anscheinend brauchen, ist dies, um die akkumulierte Verteilung zu erhalten (Wahrscheinlichkeit, einen Wert <= als x für eine Stichprobe zu erhalten), ecdf gibt Ihnen eine Funktion zurück, die jedoch zum Zeichnen gedacht zu sein scheint, und somit das Argument dieser Funktion Wenn es eine Treppe wäre, wäre das der Index des Schrittes.
Sie können dies verwenden:
acumulated.distrib= function(sample,x){
minors= 0
for(n in sample){
if(n<=x){
minors= minors+1
}
}
return (minors/length(sample))
}
mysample = rnorm(100)
acumulated.distrib(mysample,1.21) #1.21 or any other value you want.
Leider ist die Verwendung dieser Funktion nicht sehr schnell. Ich weiß nicht, ob R eine Funktion hat, die Ihnen eine Funktion zurückgibt, die effizienter wäre.
R
berechnet tatsächlich den ECDF: sein Argument ist ein potentieller Wert der Zufallsvariablen und gibt Werte im Intervall . Dies ist leicht zu überprüfen. Zum Beispiel kehrt zurück . Eine verallgemeinerte Inverse des ECDF ist die von in implementierte Quantilfunktion . ecdf(c(-1,0,3,9))(8)
0.75
quantile
R
Ich fand ecdf()
es immer etwas verwirrend. Außerdem denke ich, dass es nur im univariaten Fall funktioniert. Ich habe dafür meine eigene Funktion übernommen.
Installieren Sie zuerst data.table . Dann installiere mein Paket, mltools (oder kopiere einfach die Methode empirical_cdf () in deine R-Umgebung.)
Dann ist es so einfach wie
# load packages
library(data.table)
library(mltools)
# Make some data
dt <- data.table(x=c(0.3, 1.3, 1.4, 3.6), y=c(1.2, 1.2, 3.8, 3.9))
dt
x y
1: 0.3 1.2
2: 1.3 1.2
3: 1.4 3.8
4: 3.6 3.9
empirical_cdf(dt$x, ubounds=seq(1, 4, by=1.0))
UpperBound N.cum CDF
1: 1 1 0.25
2: 2 3 0.75
3: 3 3 0.75
4: 4 4 1.00
empirical_cdf(dt, ubounds=list(x=seq(1, 4, by=1.0)))
x N.cum CDF
1: 1 1 0.25
2: 2 3 0.75
3: 3 3 0.75
4: 4 4 1.00
empirical_cdf(dt, ubounds=list(x=seq(1, 4, by=1.0), y=seq(1, 4, by=1.0)))
x y N.cum CDF
1: 1 1 0 0.00
2: 1 2 1 0.25
3: 1 3 1 0.25
4: 1 4 1 0.25
5: 2 1 0 0.00
6: 2 2 2 0.50
7: 2 3 2 0.50
8: 2 4 3 0.75
9: 3 1 0 0.00
10: 3 2 2 0.50
11: 3 3 2 0.50
12: 3 4 3 0.75
13: 4 1 0 0.00
14: 4 2 2 0.50
15: 4 3 2 0.50
16: 4 4 4 1.00
Freund, Sie können den Code auf diesem Blog lesen.
sample.data = read.table ('data.txt', header = TRUE, sep = "\t")
cdf <- ggplot (data=sample.data, aes(x=Delay, group =Type, color = Type)) + stat_ecdf()
cdf
Weitere Details finden Sie unter folgendem Link: