编辑:我编辑了下面的代码以回应你的一些建议(我摆脱了prop.test功能并爬出了第二个地狱圈)。我很好奇接下来的步骤是什么才能让它更快。我应该开始使用应用或并行处理还是别的什么?
我的主要目标是让这个跑得更快。正如我所说的,我对此很陌生,所以我很感激任何建议。谢谢你的帮助!
number.of.trials<-500
n.limit<-1000
final.n.list<-numeric(number.of.trials)
for (trials in 1:number.of.trials){
p.value<-2
n<-1
a<-0
b<-0
#this while loop stops once test shows significance or when n reaches the limit
while ((p.value > .05 | p.value==0) & n<=n.limit) {
##add new data points to a and b
a<-a+rbinom(1, 1, .5)
b<-b+rbinom(1, 1, .5)
##calculate chi-square test statistic with continuity correction
yates.stat<-2*n*(abs(a*(n-b)-b*(n-a))-n)^2/(n*n*(a+b)*(2*n-a-b))
##calculate p-value
p.value<-pchisq(q=yates.stat, df=1, lower.tail=FALSE)
n<-n+1
}
final.n.list[trials]<-n-1
}
解释我尝试使用此代码的内容: 这是对实验的模拟,其中测试两组(a和b)以在整个实验期间连续地观察它们是否显着不同。我想说明传统的p值在这种情况下是如何起作用的。当两组样本量均为1000时(或者实验过程中任何时候组似乎显着不同),实验结束,我重复整个实验500次。
答案 0 :(得分:2)
您已经获得了一些建议,指出您的循环内容编码的有效性。您是否应该致电rbinom()
多次生成单个值?为什么不生成一个大数字,一次说1000个,每个500个,然后通过它们来处理,可能是mapply
?您阅读的那些声称效率apply()
的人确实非常错误。循环是循环,无论生成为while()
或for()
还是apply()
循环。关键是学习使用矢量化策略。