首页 > 解决方案 > R:我该如何进行数据[[k]]计算

问题描述

我有一个来自样本的数据集,没有替换,如下所示:

数据.c 数据.c 数据.c 图为每个物种出现的频率,有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")
      }
    }
  }

标签: rfrequencysample

解决方案


推荐阅读