シンプソンのパラドックス

Rで学ぶ中級回帰分析

Richie Cotton

Data Evangelist at DataCamp

もっとも巧妙なパラドックス!

シンプソンのパラドックスは、データ全体でのモデルの傾向が、データのサブセットでの傾向と大きく異なるときに起こります。

※ 傾向=傾き係数

Rで学ぶ中級回帰分析

合成シンプソンデータ

x y group
62.24344 70.60840 D
52.33499 14.70577 B
56.36795 46.39554 C
66.80395 66.17487 D
66.53605 89.24658 E
62.38129 91.45260 E
  • データは5グループ(A〜E)
1 https://www.rdocumentation.org/packages/datasauRus/topics/simpsons_paradox
Rで学ぶ中級回帰分析

線形回帰

全体データ

mdl_whole <- lm(
  y ~ x, 
  data = simpsons_paradox
)
coefficients(mdl_whole)
(Intercept)            x  
    -38.554        1.751  

グループ別

mdl_by_group <- lm(
  y ~ group + group:x + 0, 
  data = simpsons_paradox
)
coefficients(mdl_by_group)
  groupA    groupB    groupC    groupD    groupE  
 32.5051   67.3886   99.6333  132.3932  123.8242  
groupA:x  groupB:x  groupC:x  groupD:x  groupE:x  
 -0.6266   -1.0105   -0.9940   -0.9908   -0.5364
Rで学ぶ中級回帰分析

データ全体をプロット

ggplot(simpsons_paradox, aes(x, y)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE)

散布図—全体.png

Rで学ぶ中級回帰分析

グループ別にプロット

ggplot(simpsons_paradox, aes(x, y, color = group)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE)

散布図—グループ別.png

Rで学ぶ中級回帰分析

違いをどう調停するか

良い助言

可能ならデータを可視化しましょう。

一般的な助言

最適なモデルは一概に選べません。データと解きたい問いに依存します。

さらに良い助言

モデリング前に問いを明確化しましょう。

Rで学ぶ中級回帰分析

テストスコアの例

散布図—テストスコア(全体).png

散布図—テストスコア(グループ別).png

Rで学ぶ中級回帰分析

感染症の例

散布図—感染症(全体).png

散布図—感染症(グループ別).png

1 https://stats.stackexchange.com/questions/478463/examples-of-simpsons-paradox-being-resolved-by-choosing-the-aggregate-data
Rで学ぶ中級回帰分析

違いの調停、再び

  • 通常(ただし常にではない)グループ別モデルの方が示唆に富みます。
  • 説明変数が抜けていませんか?
  • 文脈が重要です。
Rで学ぶ中級回帰分析

実データでのシンプソンのパラドックス

  • パラドックスは現実データでは目立ちにくいことが多いです。
  • 方向転換ではなく、傾きがゼロに近いだけの場合もあります。
  • すべてのグループで現れないこともあります。
Rで学ぶ中級回帰分析

Let's practice!

Rで学ぶ中級回帰分析

Preparing Video For Download...