*disclaimer
793877
emmeans
https://cran.r-project.org/web/packages/emmeans/
https://cran.r-project.org/web/packages/emmeans/vignettes/comparisons.html
Quick start guide
https://cran.r-project.org/web/packages/emmeans/vignettes/AQuickStart.html
- モデルに含まれる値の全体の平均 means
- モデルに含まれる特定の条件に限った平均 marginal means
使い方:その前提は、model(glmの結果など)ができていること。
emm.result <- emmeans(モデル, "条件") で平均値を取得して contrasts(emm.result, ...) で比較するか pairs(emm.result) ペアにして比較
要因が一つの場合
emm.result <- emmeans(モデル, "要因名") もしくは emm.result <- emmeans(モデル, ~ 要因名) と表記(~つけて、引用符なし)
これで、emm.resultの中に平均値が入る
- ペアにして比較する場合
contrast(emm.result, "pairwise") もしくは pairs(emm.result)
要因が二つの場合(交互作用なし)
- 要因を一つずつ扱う
emm.result.1 <- emmeans(モデル, ~ 要因1) pairs(emm.result.1) emm.result.2 <- emmeans(モデル, ~ 要因2) pairs(emm.result.2)
交互作用のある二要因
emm.result <- emmeans(モデル, ~ 要因1 * 要因2)
pairs(emm.result, simple = "要因1") で、もう一つの要因2あたりの単純主効果 pairs(emm.result, simple = "要因2") で、もう一つの要因1あたりの単純主効果
- p値の補正は、Tukeyで行われる。
交互作用のある二要因の例
- 時間time(1,2,3)と条件cond(control, experiment)
emm.result <- emmeans(モデル, ~ time * cond) emm.result time cond emmean SE df lower.CL upper.CL 1 control 65.8 4.27 30.8 57.0 74.5 2 control 66.2 4.27 30.8 57.5 75.0 3 control 69.2 4.27 30.8 60.5 78.0 1 experiment 61.0 3.07 51.4 54.8 67.2 2 experiment 89.8 3.07 51.4 83.6 95.9 3 experiment 78.2 3.07 51.4 72.1 84.4 Degrees-of-freedom method: kenward-roger Confidence level used: 0.95
- 時間timeのレベル間での単純主効果の多重比較
pairs(emm.result, simple="time") cond = control: contrast estimate SE df t.ratio p.value time1 - time2 -0.5 3.49 76 -0.143 0.9888 time1 - time3 -3.5 3.49 76 -1.002 0.5776 time2 - time3 -3.0 3.49 76 -0.859 0.6675 cond = experiment: contrast estimate SE df t.ratio p.value time1 - time2 -28.8 3.49 76 -8.235 <.0001 time1 - time3 -17.2 3.49 76 -4.941 <.0001 time2 - time3 11.5 3.49 76 3.294 0.0042
- 注意点は、estimateの値は、対比(contrast)しているレベル間の差
- 差は、文字通り、前のレベルの値から後ろのレベルの値を引いた数値
- 例:experiment群の最初の対比
- time1 - time2 = -28.8 は
- 61.0 - 89.8 = -28.8 ということ
- time1(事前テスト)の値より、time2(事後テスト)の値が大きいので、マイナスになっている。
- 逆にするには、オプション(, reverse = TRUE)をつける。
pairs(emm.result, simple="time", reverse = TRUE) cond = experiment: contrast estimate SE df t.ratio p.value time2 - time1 28.8 3.49 76 8.235 <.0001
emmip() interaction-style plot
emmip(emm.result, cond ~ time)
- 信頼区間を表示するオプション , CIs = TRUE
pwpp() pairwise P-value plot
pwpp(emm.result)
- ペアでの比較をし、その時のp値を横軸で示す。
- 数値の大きいものから順に並べ替えて縦軸に並ぶ。
pwpp(emm.result, sort=F)
- 縦軸で並べ替えを行わずに、元の順番で並べる。
pwpp(emm.result, sort=F, by = "cond")
- 要因ごとに、分けて表示。(condで)
pwpp(emm.result, sort=F, by = "time")
- 要因ごとに、分けて表示。(timeで)
使用例一覧
https://cran.r-project.org/web/packages/emmeans/vignettes/vignette-topics.html
注意
- 要因が複数ある場合は、emmeans(モデル, pairwise ~ 要因1 * 要因2) という構文は使わないように。
- 別々のステップに分けること
- pairwise ~ の構文は、要因が一つの時にだけ使うように
多重比較
- GLMでモデルを作って、そのモデルにおける要因の水準間の多重比較を行う。
- 例:1,2,3の学年間で、IPSynのスコアに差があるか?
モデル
ipsyn.model0 <- glm(ipsyn ~ year, data, family=gaussian)
平均と信頼区間
hikaku0 <- emmeans(ipsyn.model0, specs="year") year emmean SE df lower.CL upper.CL 1 54.8 1.022 131 52.7 56.8 2 64.3 0.958 131 62.5 66.2 3 69.5 1.034 131 67.4 71.5
多重比較検定
- 補正の方法
adjust="bonferroni" adjust="holm"
pairs(hikaku0, adjust="bonferroni") contrast estimate SE df t.ratio p.value 1 - 2 -9.58 1.40 131 -6.840 <.0001 1 - 3 -14.68 1.45 131 -10.099 <.0001 2 - 3 -5.11 1.41 131 -3.622 0.0012
プロット
plot(hikaku0, comparison=T)
- 別のプロット
plot(allEffects(ipsyn.model0))
References
- Estimated Marginal Means for Multiple Comparisons
https://sugiura-ken.org/wiki/