【发布时间】:2014-05-20 22:01:53
【问题描述】:
已编辑:我根据您的一些建议编辑了下面的代码(我摆脱了 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 次。
【问题讨论】:
-
你运行的是什么操作系统? Windows、OSX 还是 Linux?如果您的一次性设备中有多个内核,则可以使用
parallel包中的apply系列。 -
并行化非常为时过早。首先你必须爬出Second Circle of Hell。
-
...下一步可能是编写自己的、极其精简的
prop.test版本。里面有很多你可能不需要的东西。 -
乔兰完全正确
-
感谢@joran 的建议。摆脱不断增长的向量会稍微提高速度,并且编写方程(而不是使用 prop.test 函数)会产生巨大的差异。我在原帖中添加了更新版本。
标签: r performance for-loop apply