私がやっていることの一般的なバージョンは、いくつかの変数を操作して結果にどのような影響があるかを見るシミュレーション研究を行うことです。私はRでいくつかのスピードの問題を抱えています。最新のシミュレーションは、いくつかの反復(実験ごとに10回)で動作しました。しかし、私が大規模(実験あたり10k)バージョンに移行したとき、シミュレーションは14時間実行されています(まだ実行中です)。コード最適化を使用したRでのシミュレーションの高速化
以下は、私が実行しているコードです(コメントあり)。 Rとのルーキーであり、効率的にシミュレーションを最適化しようとしています。このコードを最適化し、これらのコメントを将来のシミュレーション研究に使用するために、ここで提供されたコメントと提案から学ぶことが、私の希望です。
このコードの動作について、いくつかご説明します。私は2つの変数を操作しています:エフェクトサイズとサンプルサイズ。各組み合わせは10k回実行されます(条件ごとに10k回の実験)。データフレームを初期化して結果(結果)を保存します。エフェクトサイズ、サンプルサイズ、および繰り返し(10k)の3つの変数にループします。
ループ内では、p.test、p.rep、d.test、およびd.repの4つのNULLコンポーネントを初期化します。前者の2つは、最初のt検定のp値と複製のp値(同様の条件で複製)を取得します。後者の2つはエフェクトのサイズを計算します(コーエンのd)。
コントロール条件(DVcontrol)の標準標準からランダムデータを生成し、実験条件(DVexperiment)の平均値として自分のエフェクトサイズを使用します。私は値の差を取って、その結果をRのt検定関数に投げます(paired-samples t-test)。私はTrialsと呼ばれるリストに結果を格納し、結果データフレームにこれをバインドします。このプロセスは完了まで10k回繰り返されます。ご意見やご提案を事前に
# Set Simulation Parameters
## Effect Sizes (ES is equal to mean difference when SD equals Variance equals 1)
effect_size_range <- seq(0, 2, .1) ## ES
## Sample Sizes
sample_size_range <- seq(10, 1000, 10) ## SS
## Iterations for each ES-SS Combination
iter <- 10000
# Initialize the Vector of Results
Results <- data.frame()
# Set Random Seed
set.seed(12)
# Loop over the Different ESs
for(ES in effect_size_range) {
# Loop over the Different Sample Sizes
for(SS in sample_size_range) {
# Create p-value Vectors
p.test <- NULL
p.rep <- NULL
d.test <- NULL
d.rep <- NULL
# Loop over the iterations
for(i in 1:iter) {
# Generate Test Data
DVcontrol <- rnorm(SS, mean=0, sd=1)
DVexperiment <- rnorm(SS, mean=ES, sd=1)
DVdiff <- DVexperiment - DVcontrol
p.test[i] <- t.test(DVdiff, alternative="greater")$p.value
d.test[i] <- mean(DVdiff)/sd(DVdiff)
# Generate Replication Data
DVcontrol <- rnorm(iter, mean=0, sd=1)
DVexperiment <- rnorm(iter, mean=ES, sd=1)
DVdiff <- DVexperiment - DVcontrol
p.rep[i] <- t.test(DVdiff, alternative="greater")$p.value
d.rep[i] <- mean(DVdiff)/sd(DVdiff)
}
# Results
Trial <- list(ES=ES, SS=SS,
d.test=mean(d.test), d.rep=mean(d.rep),
p.test=mean(p.test), p.rep=mean(p.rep),
r=cor(p.test, p.rep, method="kendall"),
r.log=cor(log2(p.test)*(-1), log2(p.rep)*(-1), method= "kendall"))
Results <- rbind(Results, Trial)
}
}
おかげで、 ジョシュ
これは、ここではなく[codereview.se]に属しているようです。 –
@JohnColeman私は両方のサイトで話題になっていると思います。具体的な質問です(「このコードの速度を上げるにはどうすればいいですか?それは1日かかる」)とコードレビューのリクエストです。 – Zeta
この投稿を削除し、必要に応じてコードレビューに移動することができます。 – Josh