Создание стратифицированной выборки в методе итеративной выборки - PullRequest
0 голосов
/ 07 июля 2019

Я использую подход итеративной передискретизации для оценки размера выборки, необходимого для достижения относительной стандартной ошибки менее 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 on> = 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". В идеале это должно происходить случайным образом с заменой и в равной степени в каждой из трех зон. Можно ли было это встроить при создании переменной "yy" в приведенном выше коде? Спасибо за любую помощь!

...