繁体   English   中英

如何计算R中的经验CDF?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM