R で for ループの中に for ループを入れ子にした次のコードを作成しました。 Power を計算するシミュレーションです。R は for ループを実行するのに適していないことを読みましたが、これを少し速く実行するために適用できる効率があるかどうか疑問に思っていました。私はRだけでなく、あらゆる種類のプログラミングにもかなり慣れていません。現在、私が見ている実行時間は次のとおりです。
m=10 0.17 秒
m=100 3.95 秒
m=1000 246.26 秒
m=2000 私は 1003.55 秒を取得します
サンプリングする回数 m を 100K 以上に設定したいと思っていましたが、これを 10K に設定することさえ恐れています
コードは次のとおりです。
m = 1000 # number of times we are going to take samples
popmean=120 # set population mean at 120
popvar=225 # set known/established population
variance at 225
newvar=144 # variance of new methodology
alpha=.01 # set alpha
teststatvect = matrix(nrow=m,ncol=1) # empty vector to populate with test statistics
power = matrix(nrow=200,ncol=1) # empty vector to populate with power
system.time( # not needed - using to gauge how long this takes
for (n in 1:length(power)) # begin for loop for different sample sizes
for(i in 1:m){ # begin for loop to take "m" samples
y=rnorm(n,popmean,sqrt(newvar)) # sample of size n with mean 120 and var=144
ts=sum((y-popmean)^2/popvar) # calculate test statistic for each sample
teststatvect[i]=ts # loop and populate the vector to hold test statistics
vecpvals=pchisq(teststatvect,n) # calculate the pval of each statistic
power[n]=length(which(vecpvals<=alpha))/length(vecpvals) # loop to populate power vector. Power is the proportion lessthan ot equal to alpha
}
}
)