辛普森悖論

R 的迴歸分析中級

Richie Cotton

Data Evangelist at DataCamp

最巧妙的悖論!

當整體資料集上的模型趨勢,與在各子資料集上的模型趨勢差很大時,就會出現辛普森悖論。

trend = slope coefficient

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)

散佈圖-整體(辛普森)

R 的迴歸分析中級

依群組繪圖

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

散佈圖-依群組(辛普森)

R 的迴歸分析中級

化解差異

好建議

能畫圖就盡量把資料集畫出來。

常見建議

無法一體適用地選出「最佳」模型——要看資料集與你要回答的問題。

另一個好建議

在建模前,先把問題說清楚。

R 的迴歸分析中級

測驗分數範例

散佈圖-整體(測驗分數)

散佈圖-依群組(測驗分數)

R 的迴歸分析中級

傳染病範例

散佈圖-整體(傳染病)

散佈圖-依群組(傳染病)

1 https://stats.stackexchange.com/questions/478463/examples-of-simpsons-paradox-being-resolved-by-choosing-the-aggregate-data
R 的迴歸分析中級

再次化解差異

  • 通常(但不一定)分群模型更有洞見。
  • 是否少了解釋變數?
  • 脈絡很重要。
R 的迴歸分析中級

真實資料集中的辛普森悖論

  • 悖論通常不那麼明顯。
  • 你可能看到斜率接近 0,而非完全反向。
  • 不一定每個群組都會出現。
R 的迴歸分析中級

一起來練習吧!

R 的迴歸分析中級

Preparing Video For Download...