lmモデルのカスタム消費電力解析をシミュレートする方法(Rを使用)


13

ここにあった最近の質問に従って。

線形モデルのシミュレーションに基づいてカスタム消費電力解析を実行するために、誰かがRコードを見つけた、または共有できるかどうかを知りたいと思いましたか?

後で、より複雑なモデルに拡張したいのは明らかですが、lmは開始するのに適した場所のようです。ありがとう。

回答:


4

単純な回帰モデルのシミュレーションが必要かどうかわかりません。たとえば、論文Portable Powerを参照してください。より複雑なモデル、特に混合効果の場合、R のpammパッケージはシミュレーションを通じて電力解析を実行します。シミュレーション用のRコードがあるTodd Jobeの投稿も参照してください。


1
ポータブル電源リンクが壊れています。誰かがリンクを更新できるなら、それは素晴らしいことです。THX。
ブライアンP 14

3

Rのシミュレーションコードのいくつかのソースを以下に示します。線形モデルを具体的に扱っているかどうかはわかりませんが、要点を理解するには十分な例が提供されている可能性があります。

  • Benjamin Bolkerは、Rを使用したEcological Data and Modelsという素晴らしい本を執筆しました。Sweaveコードと一緒に本全体の初期ドラフトがオンラインで入手できます。第5章では、電力解析とシミュレーションについて説明します。

次のサイトには、シミュレーションの別の例がいくつかあります。


0

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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.