我认为您正在描述一个简单的引导程序。最终,您可能想要使用功能引导。但是在你理解机制之前,我觉得循环是要走的路。这应该让你开始:
test<-function(
seed=1234,
sample.size=500,
resample.number=1000,
alpha=0.05
)
{
#initialize original sample
original.sample<-runif(sample.size, min=0, max=1)
#initialize data.frame
resample.results<-data.frame("Run.Number"=NULL,"mean"=NULL)
for(counter in 1:resample.number){
temp<-sample(original.sample, size=length(original.sample), replace = TRUE)
temp.mean<-mean(temp)
temp.table.row<-data.frame("Run.Number"=counter,"mean"=temp.mean)
resample.results<-rbind(resample.results,temp.table.row)
}
resample.results<-resample.results[with(resample.results, order(mean)), ]
#for the mean information
lowerCI.row<-resample.number*alpha/2
upplerCI.row<-resample.number*(1-(alpha/2))
median.row<-resample.number/2
#for the mean information
median<-resample.results$mean[median.row]
lowerCI<-resample.results$mean[lowerCI.row]
upperCI<-resample.results$mean[upplerCI.row]
#for the position information
median.run<-resample.results$Run.Number[median.row]
lowerCI.run<-resample.results$Run.Number[lowerCI.row]
upperCI.run<-resample.results$Run.Number[upplerCI.row]
mc.table<-data.frame("median"=NULL,"lowerCI"=NULL,"upperCI"=NULL)
values<-data.frame(median,lowerCI,upperCI)
#as.numeric because R doesn't like to mix data types
runs<-as.numeric(data.frame(median.run,lowerCI.run,upperCI.run))
mc.table<-rbind(mc.table,values)
mc.table<-rbind(mc.table,runs)
print(mc.table)
}
重新采样数据后,您会找到均值。然后您订购所有重新采样的方法。该列表的中间是中位数。并且,例如,对于 10000 个重采样,第 250 个有序重采样均值将是您较低的 95% CI。虽然我在这里没有这样做,但最小值将在位置 1,最大值将在位置 10000。降低重采样数时要小心:我计算位置的方式可能会变成十进制值,这会混淆R。
顺便说一句,我把它放在函数形式中。如果您喜欢逐行处理,只需确保运行 function() 和以下 main {} 之间的所有行