[英]How to estimate the density (empirical pdf) from quantiles (the empirical CDF) in R
[英]How can I calculate an empirical CDF in R?
我正在从一个看起来像这样的文件中读取一个稀疏表:
1 0 7 0 0 1 0 0 0 5 0 0 0 0 2 0 0 0 0 1 0 0 0 1
1 0 0 1 0 0 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1
1 0 0 1 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 2 1 0 1 0 1
注意行长不同。
每行代表一个模拟。 每行第i列中的值表示在此模拟中观察到i-1值的次数。 例如,在第一个模拟中(第一行),我们得到一个值为'0'的单一结果(第一列),有七个结果为'2'的结果(第三列),依此类推。
我希望为所有模拟结果创建一个平均累积分布函数(CDF),以便以后可以使用它来为真实结果计算经验p值。
为此,我可以首先对每一列求和,但是对于undef列,我需要取零。
如何读取具有不同行长的此类表? 如何汇总用0'替换'undef'值的列? 最后,我如何创建CDF? (我可以手动执行此操作,但我想有些软件包可以执行此操作)。
这将读取以下数据:
dat <- textConnection("1 0 7 0 0 1 0 0 0 5 0 0 0 0 2 0 0 0 0 1 0 0 0 1
1 0 0 1 0 0 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1
1 0 0 1 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 2 1 0 1 0 1")
df <- data.frame(scan(dat, fill = TRUE, what = as.list(rep(1, 29))))
names(df) <- paste("Val", 1:29)
close(dat)
导致:
> head(df)
Val 1 Val 2 Val 3 Val 4 Val 5 Val 6 Val 7 Val 8 Val 9 Val 10 Val 11 Val 12
1 1 0 7 0 0 1 0 0 0 5 0 0
2 1 0 0 1 0 0 0 3 0 0 0 0
3 0 0 0 1 0 0 0 2 0 0 0 0
4 1 0 0 1 0 3 0 0 0 0 1 0
5 0 0 0 1 0 0 0 2 0 0 0 0
....
如果数据在文件中,请提供文件名而不是dat
。 根据您提供的数据,此代码假定最多有29列。 更改29
以适合实际数据。
我们使用
df.csum <- colSums(df, na.rm = TRUE)
ecdf()
函数生成所需的ECDF,
df.ecdf <- ecdf(df.csum)
我们可以使用plot()
方法绘制它:
plot(df.ecdf, verticals = TRUE)
您可以使用ecdf()
(在R中)或Ecdf()
(从Hmisc包中)函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.