*disclaimer
744706
sum contrasts (deviation coding)
別名
- sum coding
- deviation coding
- effect coding
options()
- Rの各種オプションを設定するコマンド
- contrastsの設定がどうなっているかを確認する
options()$contrasts unordered ordered "contr.treatment" "contr.poly"
- contrastsのオプションは、unorderedとorderedの二種類ある
- このオプションを変えてしまうこともできるが、変えてしまうと、その後もその設定がデフォルトになってしまうので、普通のデフォルトにまた戻さないと、困ったことになる。
contrasts(flevels) <- NULL
- モデル式のオプションとして、指定する場合は、その場合だけそのオプションになるので、安全
contr.sum
- 以下の「Understanding Sum Contrasts for Regression Models: A Demonstration」の例
lm(RT~Gender*Strategy, data = df, contrasts = list(Gender = "contr.sum", Strategy = "contr.sum"))
- 多重共線性を避けるため、原則、最後のレベルを投入しない。省略する。
- omitオプションを使うと省略するレベルを明示的に指定できる。
omit= "除くもの"
具体的手順
- コントラストがどうなっているかの確認
contrasts(NP.dat.jp2$Prompt) P2 P3 P4 P5 P6 P7 P8 P1 0 0 0 0 0 0 0 P2 1 0 0 0 0 0 0 P3 0 1 0 0 0 0 0 P4 0 0 1 0 0 0 0 P5 0 0 0 1 0 0 0 P6 0 0 0 0 1 0 0 P7 0 0 0 0 0 1 0 P8 0 0 0 0 0 0 1
- 一番最初のP1が全部 0 になっている。
- レベルの表示
levels(NP.dat.jp2$Prompt) [1] "P1" "P2" "P3" "P4" "P5" "P6" "P7" "P8"
- このレベルに対して、contr.sum()をかける
contr.sum(levels(NP.dat.jp2$Prompt)) [,1] [,2] [,3] [,4] [,5] [,6] [,7] P1 1 0 0 0 0 0 0 P2 0 1 0 0 0 0 0 P3 0 0 1 0 0 0 0 P4 0 0 0 1 0 0 0 P5 0 0 0 0 1 0 0 P6 0 0 0 0 0 1 0 P7 0 0 0 0 0 0 1 P8 -1 -1 -1 -1 -1 -1 -1
- 一番最後のP8がすべて -1 になっている。
- この状態で、各カラムはP1からP7まで 1 なので、P8と合わせたら、±0 となる。
- もともとのcontrastsのベクトルをsum contrastsのベクトルに置き換える
contrasts(NP.dat.jp2$Prompt) <- contr.sum(levels(NP.dat.jp2$Prompt))
- 置き換わったかどうか確認
contrasts(NP.dat.jp2$Prompt) [,1] [,2] [,3] [,4] [,5] [,6] [,7] P1 1 0 0 0 0 0 0 P2 0 1 0 0 0 0 0 P3 0 0 1 0 0 0 0 P4 0 0 0 1 0 0 0 P5 0 0 0 0 1 0 0 P6 0 0 0 0 0 1 0 P7 0 0 0 0 0 0 1 P8 -1 -1 -1 -1 -1 -1 -1
tab_model(モデル, show.stat=T)
- Predictorsで、各要因の後ろに、レベル名でなく数字が表示される
Gender1 5 (Estimate)
- この1はその要因(性別)の複数のレベルの最初のもの(女性)が、参照レベル(sum codingの場合は平均)からどれだけ高いかを示している。
- もう一つのレベル(男性)は、逆にその分だけ参照レベル(平均)から低い数値となる
男女の平均が50とすると、女は55、男は45という状況
分析結果解釈上の注意
- 各変数に数字がついたものは
- 各変数内のレベルが初めのものから順に1からつく
レベルが二つの場合
- 変数1のみ表示される
- Estimateは、その変数のレベルと「平均」との差
- もう一方のレベルは、平均からその分を引けばよいことになる。
- 平均が0になるようにするのがsum codingなので、二つのレベルは、平均を挟んで、逆方向の等距離にある
レベルが三つの場合
- 変数1と変数2が表示される。(変数3は表示されない)
- それぞれのレベルと「平均」との差がそれぞれのEstimate
- 変数3のEstimateは自分で計算する
- 三つのレベルの平均が0になるようにしてあるので
- 変数1と変数2の数字を平均から「引く」と求められる
平均が100で、 変数1のEstimateが10なら、変数1の値は、110 変数2のEstimateが 5なら、変数2の値は、105 三つの平均が0(具体的には100)になるようにするには、 変数3は、85(Estimateは -15)となる。 (110 + 105 + 85)/3=100 10 + 5 + (-15) = 0
交互作用
- 変数一つ目1:変数二つ目1
- 変数一つ目の最初の水準と変数二つ目の最初の水準を組み合わせた場合、と読む
- この組み合わせが、有意であるとは、
References
- Understanding Sum Contrasts for Regression Models: A Demonstration
- https://www.rcps.jp/doku.php?id=%E3%83%A1%E3%83%A2:%E3%83%9E%E3%83%AB%E3%83%81%E3%83%AC%E3%83%99%E3%83%AB%E3%83%A2%E3%83%87%E3%83%AB:%E4%B8%80%E8%88%AC%E7%B7%9A%E5%BD%A2%E3%83%A2%E3%83%87%E3%83%AB
- https://stats.oarc.ucla.edu/r/library/r-library-contrast-coding-systems-for-categorical-variables/#DEVIATION
- https://cran.r-project.org/web/packages/faux/vignettes/contrasts.html
Brehm and Alday (2022) Contrast coding in a decade of mixed models
Journal of Memory and Language 125: 1-13
3レベル以上の sum codingの場合
- 切片は、grand mean(変数のすべてのレベルの平均)
- 各固定効果は、そのレベルがgrand meanと比べ有意に差があるかを示す
- 複数のレベルのうち一つはreference levelとして表示されない
- grand meanに近いレベルをreference levelとする
- そのレベルはgrand meanに一番近いので、差があるかどうかという観点からすれば、一番重要度が低いものとなる(一番差がない)
- こうすることで、個々のレベルが全体の平均からどれだけ離れているかが分かる
指針
- カテゴリー変数を使う場合は、どのコントラストを使ったかを明示的に書くこと。
- デフォルトのtreatment codingの場合もその旨書くこと。
- 例:"Factor A (magenta, green) was treatment coded or the three levels of Factor B, coffee, tea, and cocoa, were coded with two contrasts: (.25,.25, -.5) and (.5, -.5.0)"
- そのうえで、何と何を対比して比較したかをわかりやすく言い換えて説明すること。
- 例1:"The model intercept therefore reflects the reference level of factor A, magenta
- 例2:"The first contrast tests caffeinated versus non-caffienated beverages, and the second tests coffee versus tea"
- コントラストが適切に行われていれば、事後テストをしなくてもよい。
わかりやすい解説
https://learnb4ss.github.io/learnB4SS/articles/contrasts.html#sum-contrasts
https://sugiura-ken.org/wiki/