MENU

【無料プレゼント付き】学会発表・論文投稿に必要な統計を最短で学ぶことができる無料メルマガ

一般化線形混合モデル(二項ロジスティック)のサンプルサイズ計算をシミュレーションで行う方法


「適切なサンプルサイズはいくつか」

医学研究や行動科学において、研究デザイン段階で最も頭を悩ませる問題の一つである。特に、一般化線形混合モデル(GLMM)のような複雑なモデルでは、従来の簡易的な計算式では対応できないことが多々ある。

本記事では、Rの simr パッケージを使い、シミュレーション(モンテカルロ法)によって科学的にサンプルサイズを導き出す方法を解説する。


>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

目次

一般化線形混合モデル(二項ロジスティック)とは

「はい/いいえ」のような2値のアウトカム(二項分布)を扱い、かつ「同じ対象から複数回測定したデータ」のように、データ間の相関を考慮できるモデルである。

  • 固定効果: 治療の有無や時間経過など、研究者が直接関心を持つ主たる要因を指す。
  • 変量効果: 個人の体質や背景など、個人ごとに異なる「初期値のバラツキ」などを表現するものである。

サンプルサイズ計算の意義と必要性

なぜ研究を開始する前に計算が必要なのか。

特に、「観察研究で有意差が出なかったとき」にその意義は大きい。それが「本当に差がない」のか、単に「サンプル数が足りなくて差を検出できなかった(検定力不足)」のかを区別できないと、貴重な研究結果を見誤ることになるからだ。

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

なぜシミュレーションで行う必要があるのか

通常のロジスティック回帰でさえサンプルサイズ計算は複雑だが、GLMMでは「個人差の大きさ」や「測定タイミング」など、考慮すべき変数が極めて多い。

既存の公式に無理やり当てはめるよりも、「想定されるデータをコンピュータの中で何千回も生成(シミュレーション)し、何回有意になったかを確認する」方が、モデルの構造を正確に反映した現実的な数値を算出できるのである。

シミュレーションの主なステップ

  1. モデルの枠組み作成: 被験者数、測定回数、群割付などの構造を決定する。
  2. パラメータの仮定: 過去の文献などを参考に、期待される効果量(オッズ比)や個人差の分散を設定する。
  3. シミュレーションの実行: 指定した条件下でデータを繰り返し生成し、統計的検定を繰り返す。
  4. パワー曲線の描画: サンプルサイズを変動させ、検定力(Power)が80%を超えるポイントを特定する。

Rでの実践例

以下は、2群(Control/Test)× 4時点(0, 1, 2, 3ヶ月)のデザインで、「介入によって時間経過に伴う改善率に差が出るか(相互作用)」を検証するためのスクリプトである。

# 必要パッケージの読み込み
if(!require(simr)) install.packages("simr")
if(!require(lme4)) install.packages("lme4")
library(simr)
library(lme4)

# 再現性のためのシード設定
set.seed(123)

# 1. データ構造の定義(初期値: 1群50人、計100人)
n_subj <- 50
time_points <- c(0, 1, 2, 3)
temp_data <- expand.grid(time = time_points, subj = factor(1:(n_subj * 2)))
temp_data$group <- factor(ifelse(as.numeric(temp_data$subj) <= n_subj, "control", "test"))

# 2. ダミーデータの生成とモデル定義
temp_data$y <- rbinom(nrow(temp_data), 1, 0.5)
model <- glmer(y ~ group * time + (1|subj), data = temp_data, family = "binomial")

# 3. 効果量と変量効果の設定
# ここでは相互作用(grouptest:time)を 0.3 と設定
fixef(model) <- c(-1.0, 0.0, 0.2, 0.3) # 係数: (切片, 群間差, 時間効果, 相互作用)
VarCorr(model) <- list(subj = 0.3^2)

# 4. サンプルサイズの拡張とシミュレーション
# 1群200人(計400人)まで拡張してパワーの変化を確認
model_ext <- extend(model, along = "subj", n = 400)
pc <- powerCurve(model_ext, fixed("grouptest:time", "z"), along = "subj", 
                 breaks = c(100, 200, 300, 400), nsim = 100)

# 5. 結果のプロット
plot(pc)
パワーカーブ例

結果・パワーカーブの解釈

シミュレーションの結果、以下のようなパワーカーブが得られる。

  • x軸: 被験者数(number of levels in subj)
  • y軸: 検定力(power)
  • 一般的に、Powerが80%を超える点が目標となるサンプルサイズである。
  • 今回の設定(相互作用 = 0.3)では、350名を超えたあたりで推定値が80%を超え、400名では95%信頼区間の下限も80%を上回った。これにより「400名集めれば、十分な検定力を持って検証可能である」と判断できる。

実践におけるガイド・注意点

  • 効果量(係数)の見積もり: 最も重要かつ困難なステップである。先行研究のオッズ比を対数変換(log(OR))して設定するのが基本となる。
  • 収束エラーへの対処: 二項ロジスティックの混合モデルは計算が不安定になりやすい。モデルが収束しない場合は、変量効果の構造を簡略化する検討も必要である。
  • 計算時間: nsim(試行回数)を増やすほど結果は安定するが、相応の時間が必要となる。まずは nsim=100 程度で傾向を掴み、最終的な判断は 1000 程度で実行するのが通例である。

まとめ

GLMMのサンプルサイズ計算は、数式に頼るよりもシミュレーションを用いる方が直感的であり、かつ研究の実態に即した計画を立案できる。simr を活用すれば、複雑な相互作用モデルであっても、視覚的に説得力のある根拠を示すことが可能である。

科学的な妥当性を担保するために、解析前のシミュレーションを習慣化すべきである。

おすすめ書籍

誰も教えてくれなかった 医療統計の使い分け〜迷いやすい解析手法の選び方が,Rで実感しながらわかる!


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

コメント

コメントする

目次