R:如何进行数据[[k]]计算
我有一个不需要替换的样本数据集,如下所示: 图中显示了每个物种的频率,共有50个数据。c[[k]]如下。 现在我正在尝试Jackknife重采样(不替换)来估计覆盖率,代码如下:R:如何进行数据[[k]]计算,r,frequency,sample,R,Frequency,Sample,我有一个不需要替换的样本数据集,如下所示: 图中显示了每个物种的频率,共有50个数据。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-dat
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##
data.c您需要(至少)共享错误消息。一个可复制的例子(例如,dput(data.c[1:3])
)的输出会更好。@Roland我编辑了我的描述,谢谢你的建议。data.c
是一个列表。可以从数值中减去列表(如N-data.c
)。不清楚您想要实现什么,但您可能需要另一个sapply
循环。
### 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")
}
}
}