トップ 履歴 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

emmeans

*disclaimer
793877

R

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://rcompanion.org/handbook/G_06.html