Yanıtlar:
ecdf
Fonksiyon, bir veri örneği döner bir uygulanan fonksiyon ampirik kümülatif dağılım fonksiyonu temsil etmektedir. Örneğin:
> 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)
Ampirik CDF'yi temsil eden bir nesnenin belirli değerlerde (bir işlev nesnesi olarak değil) değerlendirilmesini istiyorsanız, o zaman
> 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
Not p
olarak en fazla bilgi aynı miktarda içerir P
sırayla gibi bilgiler, aynı miktarda içeren (ve muhtemelen daha az içerir) X
.
x
sadece yazın P(x)
. Not x
bir vektör olabilir (benim cevap cümlelerin son çift görüyorum.)
İhtiyacınız olan şey, birikmiş dağıtımı elde etmek için (örnekte bir x değerinden <= olması olasılığı), ecdf size bir işlev döndürür, ancak bu, işlemek için yapılmış gibi görünmektedir. Bir merdiven olsaydı, sırtın endeksi olurdu.
Bunu kullanabilirsiniz:
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.
Ne yazık ki bu fonksiyonun kullanımı çok hızlı değil. R'nin size bir işlev döndüren bir işlevi olup olmadığını bilmiyorum, bu daha verimli olur.
Her zaman ecdf()
biraz kafa karıştırıcı buldum . Artı, sadece tek değişkenli durumda işe yaradığını düşünüyorum. Bunun yerine kendi işlevimi yuvarlamayı bıraktım.
İlk önce data.table'ı kurun . Sonra benim paketi, mltools yükleyin (veya sadece empirical_cdf () yöntemini R ortamınıza kopyalayın .)
O zaman bu kadar kolay
# 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
arkadaşım, bu blogdaki kodu okuyabilirsin.
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
daha fazla ayrıntı aşağıdaki linkte bulunabilir: