我需要计算数据样本的累积分布函数。
R中是否有类似于 hist() 的东西来测量累积密度函数?
我尝试过 ecdf() 但我无法理解逻辑。
我需要计算数据样本的累积分布函数。
R中是否有类似于 hist() 的东西来测量累积密度函数?
我尝试过 ecdf() 但我无法理解逻辑。
ecdf
应用于数据样本的函数返回一个表示经验累积分布函数的函数。例如:
> 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)
如果您想让一个表示经验 CDF 的对象以特定值(而不是作为函数对象)进行评估,那么您可以这样做
> 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
请注意,p
它最多包含与 相同数量的信息P
(并且可能包含更少),而后者又包含与 相同数量的信息X
。
您似乎需要的是获得累积分布(在样本上获得值 <= 比 x 的概率), ecdf 返回您一个函数,但它似乎是为绘图而制作的,因此,该函数的参数,如果它是一个楼梯,将是胎面的索引。
你可以使用这个:
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.
遗憾的是,这个功能的使用速度不是很快。我不知道 R 是否有一个函数可以返回一个函数,这样会更有效率。
我总觉得ecdf()
有点混乱。另外,我认为它仅适用于单变量情况。最终为此滚动了我自己的函数。
首先安装data.table。然后安装我的包mltools(或者只是将empirical_cdf()方法复制到你的R环境中。)
然后就很简单了
# 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
朋友,你可以阅读这个博客上的代码。
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
更多详细信息可以在以下链接中找到: