*disclaimer
1196845
[GLMM]
contrast coding
- contrast coding
- カテゴリカル変数をどう対比してコード化するか
- デフォルトでtreatment codingになっている
- 明示的にコーディングのことを説明する必要がある
- sum codingのことを、contrast codingと呼ぶ人がいるが、紛らわしいのでやめるべきだとBrehm & Aldayは言っている。
二種類のコード化
treatment coding (treatment contrast)
- デフォルトはこちらになっている
- これをdummy codingと呼ぶこともある
- 参照レベルに 0 を、もう一方に 1 をわりあてる
- 切片は、すべて 0 の状態の値
- 二要因ある場合、効果は、一方が 0 の時の効果を示す
- 特定のレベル(0)の時の効果なので「単純主効果」に相当する
sum coding (sum contrasts)
- contr.Sum() で設定する
- 一方を -1 に、もう一方を 1 にする
- 足すと0になる。0が平均となり、それが参照レベルとなる
- 「参照レベル」は、各要因の平均(なので、いわゆる「主効果」となる)
- reference levelは0となるが、0のカテゴリーがあるわけではなく、平均0がreference levelとなる。
- 切片は、総平均(grand mean)
- 分析結果表で、変数名に1がついているのは、主効果を意味する。
- 切片に、その推測値を足した値がその変数全体の平均値を意味する。
- 男女という性別の場合、男の平均値と女の平均値の真ん中の値のこととなる。
- 切片に、その推測値を足した値がその変数全体の平均値を意味する。
注意すべき点
主効果を見たいのに単純主効果を調べて、それを主効果と誤解する点
- デフォルトでは、単純主効果を調べるようになっている
- アルファベットの早い方を「0」として「参照レベル」(比較の基準)にしている
- 単純主効果では有意でも、主効果は有意ではないことがある。
- 主効果としては有意ではないのに、単純主効果が有意なのを、主効果が有意だと誤解してしまう恐れがある(偽陽性 Type I error)
単純主効果だとわかってやっていれば、ある意味便利
- 従来のANOVAだと、主効果の交互作用があった時に、さらに追加で単純主効果を調べるということをしていた
- 最初から単純主効果が出るので、追加でしなくてよい
- 今で言えば、あとからemmeansとかでペアごとの差を検定しなくてよい
- しかし、逆に、主効果じたいは分かっていない状態
- 最初から単純主効果が出るので、追加でしなくてよい
Brehm and Alday (2022) Contrast coding in a decade of mixed modelsの具体例
要因A (Utensils) 要因B (Foods) 従属変数 RT(食べる速さ(分)) Utensilsの主効果はないが、単純主効果がある(食べ物による) lme4: mixed model car: contrastsの設定 jtools: 結果出力 kableExtra: 結果出力
- フォークでスープを食べるには時間がかかる
- スプーンでスパゲッティを食べるのにも時間がかかる
- 食べる時間の速さを一般的に考えるときには、ナイフとフォークとスプーンを使った全体的での話でしょ、ということ
- フォークでスープを食べるのに時間がかかるからと言って、食器を使うと食べるのが遅くなる、と判断してしまうのは変でしょ、ということ(部分から全体に及ぼす誤り)
contrasts() でコントラストがどうなっているか表示
- デフォルトは、treatment codingで、0, 1
- アルファベットの若いレベルが0で、referenceとなる
- interceptは、ゼロのほうにセットされる。
- この場合は、ForkでSaladの場合
contrasts(ds$Utensils)
Spoon
Fork 0
Spoon 1
contrasts(ds$Foods)
Soup
Salad 0
Soup 1
参照レベルの変更
relevel(変数, ref = "新しい参照レベル")
現状確認 contrasts() contrasts(sample.dat$Year) ## 2 3 ## 1 0 0 ## 2 1 0 ## 3 0 1 変更 sample.dat$Year <- relevel(sample.dat$Year, ref = "2") contrasts(sample.dat$Year) ## 1 3 ## 2 0 0 ## 1 1 0 ## 3 0 1 2が一番上で、0, 0 となった。
- ただし、2が一番上になったことからわかるように、2を先頭に持ってくるので、結果のグラフを描く時に、1,2,3ではなく、2,1,3という順になってしまう。
- そもそも、順序の関係ないカテゴリーであれば問題ない。
基準とするカテゴリーの変更 base=番号
contrasts(sample.dat$Year)<-contr.treatment(3, base=2) contrasts(sample.dat$Year) ## 1 3 ## 1 1 0 ## 2 0 0 ## 3 0 1
- 順序は、1,2,3で、2が基準0になっている。
https://sugiura-ken.org/wiki/