执行迭代重采样时使​​用分层方法

时间:2018-12-07 15:12:24

标签: resampling

我正在使用迭代重采样方法来估计从原始样本平均值获得小于25的相对标准误差所需的样本大小。这是数据(df)排列方式的可视化视图:

    SPP    Zone3    CPNN   Month   Year   
1   ALW    Upper     15     May    2016   
2   ALW    Upper     9      May    2016   
3   ALW    Lower     57     May    2017   
4   ALW    Middle    32    June    2016   
...
98  ALW    Lower     29    June    2017   
99  ALW    Lower     41    July    2016   
100 ALW    Middle    19    July    2017   

使用“月*年”组合按以下格式对收集的数据进行分组以进行分析:

simdat<- dcast(df, Year+Month~"count", value.var="CPNN", sum) 
simdat$id<- c(1:nrow(simdat))
df<- merge(df,simdat[,-4], by=c('Year','Month'))
df<- df[order(df$id),]

变量“ CPNN”的重采样从两个样本大小开始,创建2000次迭代,并且如果RSE <= 25在> = 80%的样本上,则过程结束。但是,如果未实现,则将进行下一次迭代,直到完成该过程或最多出现150个样本为止。此部分分析的代码如下:

     nreps_all<-2000 

     sim<- function(id_indx)
     { # FUNCTION TO GET 80% OF SAMPLES WITH AN RSE25
       nreps=nreps_all
       #print(id_indx)
       X<- data.frame()
       for(n in 2:150)
      {
        yy<- matrix(sample(df[df$id==id_indx,]$CPNN,n*nreps,replace=TRUE),nrow=n, 
                    ncol=nreps)
        vals<- sapply(c(1:nreps),function(x) ifelse(sum(yy[,x])==0, 1, 
                                                    sd(yy[,x])/sqrt(n)/mean(yy[,x])))   
        vals<- mean(ifelse(vals<=0.25, 1,0))
        X<- rbind(X,c(n,vals))  
        if(vals>=0.8) break
       }
       return(max(X[,1]))
      }

    ##Run
    (rse25<- sapply(simdat$id, sim))

我想知道是否有任何可能的方法(使用提供的代码)对样本进行分层,以便从“ Zone3”类别中按相等的比例选择样本。考虑到迭代过程选择的样本大小不是3的倍数,这会增加复杂性。理想情况下,这将随机发生而不进行替换,直到所有3个区域都被表示出来,然后重复进行,直到满足RSE <= 25。在上面的代码中创建“ yy”变量时,是否可以内置该变量?感谢您的帮助!

0 个答案:

没有答案