r - R:我该如何进行数据[[k]]计算
问题描述
我有一个来自样本的数据集,没有替换,如下所示:
图为每个物种出现的频率,有50个data.c[[k]]这样的。现在我正在尝试使用 Jackknife 重采样(无需替换)来估计覆盖率,代码如下:
data.c <- sapply(1:50, function(k)table(data[,k])) #freq
mdata <- sapply(1:50, function(k)sum(data.c[[k]]==1))
True_c <- 1- sum(np*(exp(lchoose(N-data.c[[k]], i))/exp(lchoose(N,i))))
##True_c function shows error message##
我的结果显示“N - data.c 中的错误:二进制运算符的非数字参数”我想用 N(种群大小)减去物种的频率来做 True_c 并执行“lchoose”函数,我该如何做或调整我的代码?
我的整个代码如下所示:
### without replacement
for (seed in c(99,100)){
set.seed(seed)
for (s in c(100,1000)){
sdata <- rlnorm(s,0,1)
p <- sdata/sum(sdata)
gn <- p*s*10
gn <- round(gn)
M <-replace(gn, gn==0,1) #or M=gn[gn==0]=1
N <- sum(M); N
np <- M/N #new prob
pop_index = rep(1:s, time=M)
for (i in c(100,500,1000,5000,N))
{
data=replicate(50, sample(pop_index, i,
replace = FALSE, prob = NULL))
data.c=sapply(1:50, function(k)table(data[,k])) #freq
mdata=sapply(1:50, function(k)sum(data.c[[k]]==1)) #each group, total freq=1
True_c <- 1- sum(np*(exp(lchoose(N-data.c, i))/exp(lchoose(N,i))))
c.hat <- (1-(1-(i/N))*(mdata/i)) #geo
bias=mean(c.hat)-True_c
var=var(c.hat)
cat("sample_size",i,"\n",
"True_C=",True_c,"\n",
"bias =",bias,"\n",
"variance=",var,"\n","\n")
}
}
}
解决方案
推荐阅读
- ios - iOS 上的 Firefox 是否支持 Webassembly?
- python - teradataml:如何使用 teradataml 生成 xgboost 模型?
- sql - 删除日期范围重叠的行
- reactjs - 使用 Webpack 代理创建 React App 中的 WebSockets
- excel - 运行时错误 1004 - 其他用户运行宏时出错
- spring - 在 Spring Boot 应用程序中显示使用 thymeleaf 片段标头登录的用户名
- python - 如果我对对象的 3D 框进行了注释,如何标记点云?
- swiftui - 每次将画布与 Hello World 项目一起使用时,Xcode 11 都会崩溃
- c++ - 为双向链表实现复制构造函数时遇到问题
- python-3.x - 不和谐机器人——IndexError:列表索引超出范围