Jawaban:
The ecdffungsi diterapkan pada data sampel kembali sebuah fungsi yang mewakili fungsi distribusi kumulatif empiris. Sebagai contoh:
> 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)

Jika Anda ingin memiliki objek yang mewakili CDF empiris dievaluasi pada nilai-nilai tertentu (bukan sebagai objek fungsi) maka Anda dapat melakukan
> 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
Catatan yang pberisi paling banyak jumlah informasi yang sama P(dan mungkin mengandung lebih sedikit) yang pada gilirannya mengandung jumlah informasi yang sama X.
xtulis saja P(x). Catatan yang xbisa menjadi vektor (lihat beberapa kalimat terakhir dari jawaban saya.)
Apa yang Anda tampaknya perlu adalah ini untuk mendapatkan distribusi terakumulasi (probabilitas mendapatkan nilai <= daripada x pada sampel), ecdf mengembalikan Anda fungsi, tetapi tampaknya dibuat untuk memplot, dan argumen dari fungsi itu , jika itu adalah tangga, akan menjadi indeks tapak.
Anda bisa menggunakan ini:
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.
Sayangnya penggunaan fungsi ini tidak terlalu cepat. Saya tidak tahu jika R memiliki fungsi yang mengembalikan fungsi Anda, itu akan lebih efisien.
Rmemang, menghitung ECDF: argumennya adalah nilai potensial dari variabel acak dan mengembalikan nilai dalam interval . Ini sudah diperiksa. Misalnya, kembali . Kebalikan umum dari ECDF adalah fungsi kuantil, diimplementasikan oleh dalam . ecdf(c(-1,0,3,9))(8)0.75quantileR
Saya selalu merasa ecdf()sedikit membingungkan. Ditambah lagi, saya pikir itu hanya berfungsi dalam kasus univariat. Akhirnya menggulung fungsi saya sendiri untuk ini sebagai gantinya.
Pertama instal data.table . Kemudian instal paket saya, mltools (atau salin saja metode empirical_cdf () ke lingkungan R. Anda.)
Maka semudah itu
# 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
teman, Anda dapat membaca kode di blog ini.
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
lebih detail dapat ditemukan di tautan berikut: