ロジスティック回帰の検出力分析
ロジスティック回帰における検出力・サンプルサイズ・効果量の計算に対応し、以下のような場面で利用できます。
- 二値共変量が一つの場合
- 二値共変量が二つの場合
- 二値共変量と連続共変量の組み合わせの場合
- 複数のパラメータ値を一度に指定可能
- カスタマイズ可能な表の自動生成
- カスタマイズ可能なグラフの自動生成
調査設計を効率よく行うには、検出力・サンプルサイズ・コストのバランスを取る必要があります。
例えば、顧客コンバージョン率(Webサイト訪問者のうち購入に至った割合)、患者の予後(回復したか否か)、
ユーザーエンゲージメント(購読したか否か)などを分析する場合、Stata の新しい power logistic コマンドを使って、
ロジスティック回帰モデルを用いた効果の有意性検定に必要なサンプルサイズを事前に把握することで、
無駄なコストやリソース消費を抑え、効率的な実験設計が可能になります。
power logistic コマンドは、ロジスティック回帰モデルにおける興味ある単一の係数の有意性検定について、
検出力・サンプルサイズ・効果量を計算します。他の検出力分析コマンドと同様に、power logistic では
複数のパラメータ値を指定して、自動的に表形式およびグラフ形式の結果を生成することが可能です。
ワンポイント
広告効果や投薬効果といった介入の効果を評価するためのサンプルサイズ設計において、
「ロジスティック回帰に基づく検定の検出力」を活用する手法は、シンプルでありながら非常に強力です。
power logistic コマンドでは、関心のある共変量と結果変数の関係に加えて、
局外共変量(興味の対象ではない共変量)をモデルに含めることができる点も、大きな特徴です。
操作例
power logistic コマンドでは、二値共変量が一つの場合、二値共変量が二つある場合、
あるいは二値と連続共変量の組み合わせで与えられる場合に対して、検出力・サンプルサイズ・効果量を計算できます。
- 二値共変量が一つの場合
- 二値共変量が二つの場合
- 二値共変量と連続共変量の組合せの場合
操作例:二値共変量が一つの場合
例として、ある電動工具小売店のためにソーシャルメディア上でオンライン広告キャンペーンを企画しています。 この広告の全体のクリック率は2%です。あなたの関心は、電気自動車(EV)所有者のクリック率が、従来型車両所有者と異なるかどうかです。 対象となるユーザーの90%は従来型車両の所有者であり、従来型車両所有者のクリック率は1.8%です(全体平均の2%よりわずかに低い)。 この差は単なる偶然なのか? それともEV所有者は広告に対してより反応しやすいのか? これらに答えるための調査設計を行いましょう。
EV所有者と従来型車両所有者の間でクリック率に差があるかどうかを検定するために、あなたはマーケティング調査を計画します。
このとき、
- 二値の結果変数(Y) は、ユーザーが広告をクリックしたかどうか
- 二値の共変量(X)は、ユーザーが EVを所有しているかどうか
を表します。
X がYに影響を与えるかどうかを検証するために、ロジスティック回帰モデルを適用します。
power logistic コマンド(一つの二値共変量を用いる設定)を使うことで、「X がYに影響を与えるかどうか」の係数の検定において
検出力80%かつ有意水準 𝛼=0.05(第I種の過誤5%)を達成するに必要なサンプルサイズを求めることができます。
power logistic コマンドでは、以下のようにオプションを指定します。
- px(0.1):EV所有率が10%であることに対応します。
- py(0.02):全体のクリック率が2%であることに対応します。
- pycondx0(0.018):従来型車両所有者におけるクリック率Pr(Y=1 | X=0)が1.8%であることに対応します。
なお、デフォルトの検出力は80%、有意水準𝛼は0.05に設定されているため、
今回はpower()やalpha()オプションを明示的に指定する必要はありません。
. power logistic, px(0.1) py(0.02) pycondx0(0.018)
この状況で検出力80%を達成するのに必要なサンプルサイズは5,166件となります。
なお、上記の計算はpy()オプションを使わずに、Xのオッズ比(上の出力で 2.155)を指定する方法でも実行できます。
また、pycondx0()オプションの代わりにintercept()オプションを指定することも可能です。
このとき、切片(intercept)は出力には表示されませんが、r(intercept) に保存されています。これをローカルマクロb0として保存し、
intercept()オプションで `b0’ を指定することで、同じ切片の値を再利用できます。
. local b0 = r(intercept). power logistic 2.155, px(0.1) intercept(`b0')
操作例:二値共変量が二つの場合
次に、コストを抑えるために、検出力や第I種の過誤を損なわずにサンプルサイズを削減できないか検討します。 過去の広告キャンペーンのデータを調べると、デスクトップで広告を見たユーザーの方が、モバイルで見たユーザーよりも クリック率が高いことに気づきました。全体のうち30%のユーザーはデスクトップで広告を閲覧し、残り70%はモバイル端末を使用しています。 従来型車両の所有者に限ると、クリック率はデスクトップで 2.2%、モバイルでは1.6%です。
この追加情報を活用するために、ロジスティック回帰モデルに二つ目の二値共変量を追加することにします。 これは局外共変量𝑍 (*訳者注:局外曲変量nuisance covariateとは、結果変数との関係を直接知りたいわけではない共変量)であり、 「モバイル端末を使用して広告を閲覧したかどうか」を示す二値変数です。
検出力80%・有意水準𝛼=5%の検定に必要なサンプルサイズを計算するため、power logisticコマンドを2つの二値共変量の設定で使用します。
- px(0.1) と py(0.02) :前回と同様です。
- pz(0.7) :モバイル端末利用率70%に対応します。
- pycondx0z0(0.022) :Pr(Y=1∣X=0,Z=0)=2.2%に対応します。
- pycondx0z1(0.016) :Pr(Y=1∣X=0,Z=1)=1.6%に対応します。
. power logistic, px(0.1) py(0.02) pz(0.7) pycondx0z0(0.022) pycondx0z1(0.016)
モデルにモバイル端末の利用状況を共変量として追加した結果、検出力や第I種の過誤を損なうことなく、 必要なサンプルサイズは4,326件に減少しました。
操作例:二値共変量と連続共変量の組合せの場合
二つ目の二値共変量を追加することで必要なサンプルサイズが減少し、大いに満足していましたが、さらに最適化できることはないかと考えてみましょう。
過去の類似した広告キャンペーンをさらに詳しく調べると、広告の閲覧時間(Z2)がもうひとつの重要な要因であることに気づきます。 調査によれば、広告の表示時間が長いユーザーほどクリックする可能性が高いことがわかっています。 ここで、閲覧時間を「短い・長い」という2群に分けるのではなく、連続変数としてロジスティック回帰モデルに組み込むことにしました。
これまでの2つのpower logisticの例では、「二値共変量が一つまたは二つ」という特殊なケースに対応した専用のコマンド構文を使ってきました。
しかし今回は、二値共変量と連続共変量が混在しているため、各共変量の分布を明示的に指定する一般的なコマンド構文を使うことになります。
例えば、一つ目の設定です。
. power logistic 2.155, px(0.1) intercept(`b0')
上記は、次のような一般的なコマンド構文に切り替わります。
. power logistic, x(distribution(bernoulli 0.1) oratio(2.155)) intercept(`b0')
例として、𝑍2が平均7秒、標準偏差1秒の正規分布に従うと仮定します。
さらに、(X,Z1)に対するオッズ比とZ2について事前情報を持っているとします。
一方で、切片については(-1,-0.25)の範囲にあることしか分かっていないため、
intercept() オプションに複数の値を指定して感度分析を行います。
. power logistic 2.3, x(distribution(bernoulli 0.1)) z1(distribution(bernoulli 0.7) oratio(0.8)) z2(distribution(normal 7 1) oratio(1.1)) intercept(-1 -.5 -.25)
power logistic コマンドでは、intercept() に数値リストを指定すると、対応する値ごとに結果を表として表示します。
例えば、切片が−1の場合、必要なサンプルサイズは513件であることがわかります。
連続共変量Z2を活用したことで、検出力を維持しながら、さらに効率的な調査設計が可能になりました。 その結果、必要なサンプルサイズは513~593件にまで減少しました。
参考
さらに詳しい内容につきましては、下記のマニュアルをご覧ください。

