事前準備:
G * Powerマニュアルで説明されているように、解決する対象に応じて、いくつかの異なるタイプの電力分析があります。(つまり、、エフェクトサイズ、、およびpowerは相互に関連して存在します。これらの3つを指定すると、4番目の問題を解くことができます。) E S αNESα
- 説明では、およびpower = 80%で指定した応答率をキャプチャする適切なを知りたいと考えています。これはアプリオリの力です。 α = 0.05Nα=.05
- これは概念的に単純なので、事後の電力(、応答率、およびアルファが与えられた電力を決定)から始めてから、上に移動できます。N
@GregSnowの優れた投稿に加えて、CVでのシミュレーションベースの消費電力解析に関する非常に優れたガイドがここにあります:統計的検出力の計算。基本的なアイデアを要約するには:
- 検出できるようにしたい効果を把握する
- その可能性のある世界からN個のデータを生成する
- これらの偽データに対して実施する予定の分析を実行する
- 選択したアルファに従って、結果が「有意」であるかどうかを保存します
- 何回も()繰り返し、そので(事後)パワーの推定値として% 'significant'を使用しますNBN
- 事前の検出力を決定するには、可能な検索して、必要な検出力をもたらす値を見つけます。 N
特定の反復で有意性を見つけるかどうかは、確率(はベキ乗)のベルヌーイ試行の結果として理解できます。回の反復で見つかった割合により、真のを近似できます。より良い近似を得るために、を増やすことができますが、これによりシミュレーションに時間がかかります。 p B p BppBpB
Rでは、「成功」の確率でバイナリデータを生成する主な方法は?rbinomです。
- たとえば、確率pで10回のベルヌーイ試行から成功数を取得するには、コードはになります
rbinom(n=10, size=1, prob=p)
(おそらく、結果を変数に割り当てて保存する必要があります)。
- また、?runifを使用して、このようなデータをよりエレガントに生成することもできます。たとえば、
ifelse(runif(1)<=p, 1, 0)
- 結果が潜在的なガウス変数によって媒介されていると思われる場合、?rnormを使用して共変量の関数として潜在変数を生成し、それらをコード
pnorm()
で確率に変換して使用できrbinom()
ます。
「曲率を考慮して、多項式項Var1 * Var1)を含める」と述べています。ここには混乱があります。多項式の項は曲率の説明に役立ちますが、これは相互作用の項です。この方法では役に立ちません。それにもかかわらず、あなたの応答率では、モデルに二乗項と交互作用項の両方を含める必要があります。具体的には、基本的な用語を超えて、モデルに、、およびを含める必要があります。 、V 、R 1 * 、V 、A 、R 2 、V 、R 1 2 * V R 2var12var1∗var2var12∗var2
- 別の質問のコンテキストで書かれていますが、ここでの私の答え:ロジットモデルとプロビットモデルの違いには、これらのタイプのモデルに関する多くの基本情報があります。
さまざまな種類があるようにタイプIエラー率は、複数の仮説(例えば、そこにいるときごとのコントラスト誤り率、ファミリーワイズエラー率、およびごとの家族エラー率が)、そのパワーの異なる種類のために、例えば(*があるA単一の事前に指定された効果、任意の効果、およびすべての効果)。また、効果の特定の組み合わせを検出するパワー、またはモデル全体の同時テストのパワーを求めることもできます。SASコードの説明からの私の推測は、後者を探しているということです。ただし、状況の説明から、相互作用の影響を最小限に検出したいと考えています。
パワーに関連する問題について考える別の方法については、ここでの私の回答を参照してください:サンプルサイズを正当化するコンテキスト内で相関を推定する際の一般的な精度を報告する方法。
Rのロジスティック回帰の単純な事後の力:
想定される回答率が世界の真の状況を表し、10,000通の手紙を送ったとしましょう。それらの影響を検出する力は何ですか?(私は「コミカルに非効率的な」コードを書くことで有名ですが、以下は効率のために最適化されるのではなく、簡単に理解できるように意図されていることに注意してください。実際、非常に遅いです。)
set.seed(1)
repetitions = 1000
N = 10000
n = N/8
var1 = c( .03, .03, .03, .03, .06, .06, .09, .09)
var2 = c( 0, 0, 0, 1, 0, 1, 0, 1)
rates = c(0.0025, 0.0025, 0.0025, 0.00395, 0.003, 0.0042, 0.0035, 0.002)
var1 = rep(var1, times=n)
var2 = rep(var2, times=n)
var12 = var1**2
var1x2 = var1 *var2
var12x2 = var12*var2
significant = matrix(nrow=repetitions, ncol=7)
startT = proc.time()[3]
for(i in 1:repetitions){
responses = rbinom(n=N, size=1, prob=rates)
model = glm(responses~var1+var2+var12+var1x2+var12x2,
family=binomial(link="logit"))
significant[i,1:5] = (summary(model)$coefficients[2:6,4]<.05)
significant[i,6] = sum(significant[i,1:5])
modelDev = model$null.deviance-model$deviance
significant[i,7] = (1-pchisq(modelDev, 5))<.05
}
endT = proc.time()[3]
endT-startT
sum(significant[,1])/repetitions # pre-specified effect power for var1
[1] 0.042
sum(significant[,2])/repetitions # pre-specified effect power for var2
[1] 0.017
sum(significant[,3])/repetitions # pre-specified effect power for var12
[1] 0.035
sum(significant[,4])/repetitions # pre-specified effect power for var1X2
[1] 0.019
sum(significant[,5])/repetitions # pre-specified effect power for var12X2
[1] 0.022
sum(significant[,7])/repetitions # power for likelihood ratio test of model
[1] 0.168
sum(significant[,6]==5)/repetitions # all effects power
[1] 0.001
sum(significant[,6]>0)/repetitions # any effect power
[1] 0.065
sum(significant[,4]&significant[,5])/repetitions # power for interaction terms
[1] 0.017
したがって、10,000文字では、これらの応答率を検出するための(あらゆる種類の)80%の力は実際には得られないことがわかります。(SASコードがこれらのアプローチ間の厳しい矛盾を説明できるかどうかについては十分に確信が持てませんが、このコードは概念的に簡単です-遅い場合-そして私はそれをチェックするのに少し時間を費やし、これらを考える結果は合理的です。)
ロジスティック回帰のシミュレーションベースのアプリオリパワー:
ここから、考えているパワーのタイプの望ましいレベルをもたらす値を見つけるまで、考えられる単純に検索するという考え方です。理論)。このような小さな効果をキャプチャするために必要な考えると、これをより効率的に行う方法について考える価値があります。私の典型的なアプローチは、単純に総当たりです。つまり、合理的に考慮できる各を評価することです。(ただし、私は通常、狭い範囲のみを考慮し、通常これと比較して非常に小さな作業していることに注意してください。) N N NNNNN
代わりに、ここでの私の戦略は、可能性のあるをまとめて、力の範囲がどのようなものかを把握することでした。したがって、私は500,000のを選択し、コードを再実行しました(同じシードを開始しますが、実行に1時間半かかりました)。結果は次のとおりです。 NNN
sum(significant[,1])/repetitions # pre-specified effect power for var1
[1] 0.115
sum(significant[,2])/repetitions # pre-specified effect power for var2
[1] 0.091
sum(significant[,3])/repetitions # pre-specified effect power for var12
[1] 0.059
sum(significant[,4])/repetitions # pre-specified effect power for var1X2
[1] 0.606
sum(significant[,5])/repetitions # pre-specified effect power for var12X2
[1] 0.913
sum(significant[,7])/repetitions # power for likelihood ratio test of model
[1] 1
sum(significant[,6]==5)/repetitions # all effects power
[1] 0.005
sum(significant[,6]>0)/repetitions # any effect power
[1] 0.96
sum(significant[,4]&significant[,5])/repetitions # power for interaction terms
[1] 0.606
このことから、効果の大きさはかなり異なるため、それらを検出する能力は異なることがわかります。たとえば、効果は特に検出が難しく、50万文字の場合でも時間の6%しか意味がありません。一方、モデル全体は常にヌルモデルよりも大幅に優れていました。他の可能性はその間に配置されます。ほとんどの「データ」は各反復で破棄されますが、十分な調査がまだ可能です。たとえば、マトリックスを使用して、重要な異なる変数の確率間の相関を評価できます。 var12significant
結論として、あなたの状況に伴う複雑さと大きなために、これは私の最初のコメントで疑った/主張したほど単純ではなかったことに注意してください。ただし、ここで述べたことから、これを一般的にどのように行うことができるか、および電力解析に関連する問題については、確かにアイデアを得ることができます。HTH。 N