[心得] 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