一般化推定方程式(GEE)を徹底解説:数式の導出から実装まで

記事の目次
Toggleはじめに
反復測定データやクラスタ化データを扱う際、「同じ個体から得られたデータは独立ではない」という問題が必ず発生します。この問題を解決し、集団平均効果(population-averaged effect) を推定するための方法が一般化推定方程式(GEE: Generalized Estimating Equations) です。
本記事では、GEEの基本概念から数式の導出、相関構造、Rでの実装までを図解とともに丁寧に解説します。
GEEとは何か?
GEEは Liang & Zeger (1986) によって提案された手法で、クラスタ化データの平均構造を推定するための準尤度ベースの方法 です。
- クラスタ内相関を考慮
- 相関構造の誤指定にロバスト
- 計算が軽い
- GLMの拡張
GEEが必要となるデータ構造
■ 反復測定データ(longitudinal data)
例:
- 患者の血圧を 0, 3, 6, 12 ヶ月で測定
- ダイエット介入前後の体重変化
■ クラスタ化データ(clustered data)
例:
- 地域 × 住民
- 学校 × 生徒
- 病院 × 患者
GEEの数式導出
GEEの推定方程式がどのように導かれるかを説明していきます。
GLMの復習:平均構造と分散構造
GLMでは
\[g(\mu _i)=X_i\beta\]
\[\mathrm{Var}(Y_i)=\phi A_i\]
ここで
- \(g(\cdot )\):リンク関数
- \(A_i\):分散関数(例:二項なら \(\mu _i(1-\mu _i)\))
- \(\phi\) :分散パラメータ
クラスタ化データでは独立性が破綻する
クラスタ i の観測をベクトルで表す:
\[Y_i=(Y_{i1},Y_{i2},\dots ,Y_{iT_i})^{\top }\]
同じクラスタ内では相関があるため、分散共分散行列は
\[V_i=A_i^{1/2}R(\alpha )A_i^{1/2}\]
- \(A_i\):分散の対角行列
- \(R(\alpha )\):相関構造(exchangeable, AR(1), independence など
準尤度(quasi-likelihood)による推定
GEEは完全な尤度を使わず、準尤度(quasi-likelihood) に基づく推定を行います。
準尤度では、平均と分散の指定だけで推定が可能です。
推定方程式の導出
GEEは以下の推定方程式を解くことで \beta を求めます。
\[U(\beta )=\sum _{i=1}^ND_i^{\top }V_i^{-1}(Y_i-\mu _i)=0\]
ここで
- \(\mu _i=g^{-1}(X_i\beta )\)
- \(D_i=\frac{\partial \mu _i}{\partial \beta }\)
- \(V_i\):クラスタ内の分散共分散行列
■ 導出の流れ
Step 1:スコア関数の一般形
一般に、スコア関数は
\[U(\beta )=\sum _i\frac{\partial \mu _i}{\partial \beta }^{\top }\mathrm{Var}(Y_i)^{-1}(Y_i-\mu _i)\]
GLMでは
\[\mathrm{Var}(Y_i)=A_i\]
だが、クラスタ化データでは
\[\mathrm{Var}(Y_i)=V_i=A_i^{1/2}R(\alpha )A_i^{1/2}\]
Step 2:クラスタ内相関を考慮したスコア関数
\[U(\beta )=\sum _{i=1}^ND_i^{\top }V_i^{-1}(Y_i-\mu _i)\]
これが 一般化推定方程式(GEE) です。
Step 3:反復計算(IRLS)で解く
GEEは閉形式の解を持たないため、反復再重み付け最小二乗法(IRLS)で解きます。
更新式は
\[\beta ^{(k+1)}=\beta ^{(k)}+\left[ \sum _iD_i^{\top }V_i^{-1}D_i\right] ^{-1}\left[ \sum _iD_i^{\top }V_i^{-1}(Y_i-\mu _i)\right]\]
サンドイッチ分散推定量(ロバスト分散)
GEEの強みは、相関構造を誤指定しても推定量 \(\hat {\beta }\) が一致性を持つ点です。
そのために使われるのが サンドイッチ分散推定量。
\[\hat {\mathrm{Var}}(\hat {\beta })=\left( \sum _iD_i^{\top }V_i^{-1}D_i\right) ^{-1}\left( \sum _iD_i^{\top }V_i^{-1}(Y_i-\mu _i)(Y_i-\mu _i)^{\top }V_i^{-1}D_i\right) \left( \sum _iD_i^{\top }V_i^{-1}D_i\right) ^{-1}\]
GEEのメリット・デメリット
- 相関構造の誤指定にロバスト
- 計算が速い
- 平均効果の解釈が直感的
- 大規模データに強い
- 欠測データに弱い(MCAR仮定)
- クラスタ数が少ないと標準誤差が不安定
- 個体差をモデル化できない(GLMMの方が適切な場合も)
Rでの実装(geepack)
set.seed(123)
# 被験者ID(100人、各4回測定)
id <- rep(1:100, each = 4)
# 測定時点(月)
time <- rep(c(0, 3, 6, 12), times = 100)
# 介入群 / 対照群
treat <- rep(sample(c(“A”, “B”), 100, replace = TRUE), each = 4)
# 血圧(単純な線形モデル+誤差で生成)
bp <- 120 – 3 * (treat == “A”) – 0.5 * time + rnorm(400, 0, 5)
dat <- data.frame(id, time, treat, bp)
head(dat)
fit <- geeglm(
bp ~ treat + time,
id = id,
data = dat,
family = gaussian,
corstr = “exchangeable”
)
summary(fit)

- treatB:対照群Bは治療群Aより平均で約2.46mmHg高い
- time:時間が1ヶ月進むごとに平均血圧が約0.5 mmHg低下する傾向
fit_ind <- geeglm(bp ~ treat + time, id=id, data=dat,
family=gaussian, corstr=”independence”)
fit_ar1 <- geeglm(bp ~ treat + time, id=id, data=dat,
family=gaussian, corstr=”ar1″)
GEEとGLMMの比較
| 特徴 | GEE | GLMM |
| 推定対象 | 集団平均 | 個体別 |
| ランダム効果 | なし | あり |
| 相関構造 | 明示的に指定 | ランダム効果で自動的に決まる |
| 計算量 | 少ない | 多い |
| 欠測データ | MCARのみ | MARまで対応 |
| 解釈 | 平均的な効果 | 個体レベルの効果 |
まとめ
一般化推定方程式(GEE)は、反復測定データやクラスタ化データのように、同じ個体・同じ集団から複数の観測が得られる状況で必須となる統計手法です。通常のGLMでは独立性の仮定が破綻し、標準誤差が過小評価されてしまうため、誤った結論につながる危険があります。GEEはこの問題を、相関構造を明示的にモデル化しつつ、平均構造の推定をロバストに行うことで解決します。
GEEの本質は、「集団平均の効果(population-averaged effect)」を推定することにあります。これは、個体差を重視するGLMMとは異なり、政策評価や疫学研究など「全体としてどの程度の効果があるのか」を知りたい場面に非常に適しています。また、相関構造を誤って指定しても、サンドイッチ分散推定量により推定値の一致性が保たれるというロバスト性も大きな魅力です。
一方で、欠測データに弱い(MCAR仮定)ことや、クラスタ数が少ないと標準誤差が不安定になるなどの注意点もあります。個体ごとの傾向を推定したい場合にはGLMMの方が適切なこともあるため、目的に応じた手法選択が重要です。
Rでは geepack パッケージを用いることで、相関構造の指定やロバスト標準誤差の計算を含め、GEEを簡単に実装できます。実務でも扱いやすく、計算も軽いため、大規模データにも適しています。
総じて、GEEは「反復測定」「クラスタ化」「平均効果の推定」という3つのキーワードが揃う場面で、最も信頼できるアプローチのひとつです。理論的にも実務的にもバランスが良く、医療統計・疫学・社会科学など幅広い分野で活用され続けている理由がよくわかります。












