Câu trả lời:
Các ecdf
chức năng áp dụng cho một lợi nhuận mẫu dữ liệu một chức năng đại diện cho hàm phân phối tích lũy kinh nghiệm. Ví dụ:
> 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)
Nếu bạn muốn có một đối tượng đại diện cho CDF theo kinh nghiệm được đánh giá ở các giá trị cụ thể (chứ không phải là một đối tượng chức năng) thì bạn có thể làm
> 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
Lưu ý rằng p
có chứa nhiều nhất cùng một lượng thông tin như P
(và có thể nó chứa ít hơn) mà lần lượt chứa cùng một lượng thông tin như X
.
x
bạn chỉ cần viết P(x)
. Lưu ý rằng đó x
có thể là một vectơ (xem vài câu cuối cùng trong câu trả lời của tôi.)
Những gì bạn dường như cần là để có được phân phối được tính toán (xác suất nhận được giá trị <= x trên một mẫu), ecdf trả về cho bạn một hàm, nhưng dường như nó được tạo ra để vẽ đồ thị, và do đó, đối số của hàm đó , nếu đó là một cầu thang, sẽ là chỉ số của guồng.
Bạn có thể sử dụng điều này:
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.
Đáng buồn là việc sử dụng chức năng này không nhanh lắm. Tôi không biết nếu R có chức năng này sẽ trả lại cho bạn một chức năng, điều đó sẽ hiệu quả hơn.
Tôi luôn luôn thấy ecdf()
có một chút khó hiểu. Thêm vào đó tôi nghĩ rằng nó chỉ hoạt động trong trường hợp đơn biến. Thay vào đó, tôi đã tự mình thực hiện chức năng này.
Đầu tiên cài đặt data.table . Sau đó cài đặt gói của tôi, mltools (hoặc chỉ sao chép phương thức empirical_cdf () vào môi trường R của bạn.)
Sau đó, nó dễ dàng như
# 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
bạn, bạn có thể đọc mã trên blog này.
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
biết thêm chi tiết có thể được tìm thấy trên liên kết sau: