[心得] R 的 contrasts 與 dummy variable

作者: andrew43 (討厭有好心推文後刪文者)   2015-06-04 20:05:46
按板友要求,本文介紹一下 R 的 contrasts() 與 dummy variable 相關話題。
要看得完全懂可能要學過一點線性代數或迴歸分析。
====== contrasts() 和 relevel() 在 Dummy Coding 的應用 ======
在 R 中,一旦建立一個 factor,例如
x <- as.factor(c("a","a","b","b","c","c"))
則 R 會自動賦予該 factor 一組 coding。
預設賦予的方法就是常見的 Dummy Coding,也就是一個基準組和 k-1 個差異對比,
而基準組是哪個組則按字元碼先後順序決定。
我們可以利用 contrasts() 來看看 x 這個 factor 目前的 dummy variable coding。
例如
contrasts(x)
b c
a 0 0
b 1 0
c 0 1
可以看到基準組是 a,第一個 dummy variable 是 b-a,第二個是 c-a。
在 Dummy Coding 的世界裡,你可以利用 relevel() 更換基準組,例如
k <- relevel(x, "b")
contrasts(k)
a c
b 0 0
a 1 0
c 0 1
可以看到基準組換成 b,第一個 dummy variable 是 a-b,第二個是 c-b。
====== 選用其它 coding ======
除了 Dummy Coding,你也可以利用 contrasts() 指定你要的其它 coding。
指定的過程中,你可以自己輸入,也可以套用 R 中存在的幾種 coding。
會碰到這種情況常常是因為
你不想用 Dummy Contrast
需要用正交對比
只想用自定對比
等等。
例如
w <- x
contrasts(w) <- matrix(c(1,0,-1,0,1,-1), nrow=3)
q <- x
contrasts(q) <- contr.sum
w 和 q 的結果是完全一致的,只是 w 是自行指定,而 q 是直接用 contr.sum。
請自行 help(contr.sum) 並查看
http://www.ats.ucla.edu/stat/r/library/contrast_coding.htm
====== "contrasts" 在 R 的意思並不是 contrasts ======
如果您學過一點迴歸分析,會知道統計學中的 contrasts 是從幾組式子來的。
但是!但是!但是!
在統計學中或 SAS 裡,contrasts 是指這幾組式子的係數,
但在 R 中的 contrasts() 看到的並不是係數,而是實際上算出應代入迴歸式的值。
請看 http://sites.stat.psu.edu/~jls/stat512/lectures/ContrastsInR.pdf
不過,因為用係數來表示 contrast 還是比較實用也容易理解。
package gmodels 中的 make.contrasts() 是解決方案,
請有需要的朋友自行了解。
作者: Wush978 (拒看低質媒體)   2015-06-04 21:53:00
作者: Godkin (山裡的人)   2015-06-05 09:43:00
作者: allen1985 (我要低調 拯救形象)   2015-06-05 12:10:00
作者: squallscer (羽毛)   2015-06-06 10:31:00

Links booklink

Contact Us: admin [ a t ] ucptt.com