回答:
単純な回帰モデルのシミュレーションが必要かどうかわかりません。たとえば、論文Portable Powerを参照してください。より複雑なモデル、特に混合効果の場合、R のpammパッケージはシミュレーションを通じて電力解析を実行します。シミュレーション用のRコードがあるTodd Jobeの投稿も参照してください。
Rのシミュレーションコードのいくつかのソースを以下に示します。線形モデルを具体的に扱っているかどうかはわかりませんが、要点を理解するには十分な例が提供されている可能性があります。
次のサイトには、シミュレーションの別の例がいくつかあります。
RのBolker 2009 Ecological Models and Dataからの適応。テストする傾向の強さ(勾配)を宣言する必要があります。直観的に、強い傾向と低い変動性には小さなサンプルサイズが必要であり、弱い傾向と大きな変動性には大きなサンプルサイズが必要です。
a = 2 #desired slope
b = 1 #estimated intercept
sd = 20 #estimated variability defined by standard deviation
nsim = 400 #400 simulations
pval = numeric(nsim) #placeholder for the second for loop output
Nvec = seq(25, 100, by = 1) #vector for the range of sample sizes to be tested
power.N = numeric(length(Nvec)) #create placeholder for first for loop output
for (j in 1:length(Nvec)) {
N = Nvec[j]
x = seq(1, 20, length = Nvec[j]) #x value length needs to match sample size (Nvec) length
for (i in 1:nsim) { #for this value of N, create random error 400 times
y_det = a + b * x
y = rnorm(N, mean = y_det, sd = sd)
m = lm(y ~ x)
pval[i] = coef(summary(m))["x", "Pr(>|t|)"] #all the p values for 400 sims
} #cycle through all N values
power.N[j] = sum(pval < 0.05)/nsim #the proportion of correct p-values (i.e the power)
}
power.N
plot(Nvec, power.N) #need about 90 - 100 samples for 80% power
また、本に示されているように、特定のサンプルサイズに対してテストできる最小の傾向をシミュレートすることもできます。
bvec = seq(-2, 2, by = 0.1)
power.b = numeric(length(bvec))
for (j in 1:length(bvec)) {
b = bvec[j]
for (i in 1:nsim) {
y_det = a + b * x
y = rnorm(N, mean = y_det, sd = sd)
m = lm(y ~ x)
pval[i] = coef(summary(m))["x", "Pr(>|t|)"]
}
power.b[j] = sum(pval < 0.05)/nsim
}
power.b
plot(bvec, power.b)