[问题] 以helmert coding做dummy variables给RDA

楼主: cywhale (cywhale)   2016-10-04 16:30:43
[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
query ?model.matrix 用contr.helmert来处理类别变量,所得到的dummy variables
应该是彼此正交 (orthogonal) 但试验过程中不必然如此,以?model.matrix 提供的例
子的确是得到正交的结果,但下方范例则未必(只有tb接近,ta, tc则没有)
不知道是不是自己哪里搞错?? 刚去翻Numerical ecology with R 书中也是这样处理
dummy variables, 只是没提到model.matrix出来的结果是否彼此正交
一般的连续变量彼此相关,但还是可以做为RDA(比如vegan::rda())的解释变量,但
dummy variables如果彼此存在相关性,不知道是否适当?...
请教各位,谢谢!
[程式范例]:
library(data.table)
dta <- fread('
2 2 2 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 4
4 4 4 4 2 2 2 3 3 3 3 4 4 4 4 4 4 4 4 4
4 4 5 4 4 4 5 5 5 5 5 5 4 4 4 4 3 3 3 3
3 2 2 2 2 2 2 2 2 1 1 1 5 5 5 4 4 4 3 3
3 3 3 3 2 2 2 2 2 2 2 1 1 1 1 1 5 4 4 4') %>% unlist(use.names = F)
dtb <- fread('
3 4 4 2 1 2 1 4 2 5 3 4 2 2 2 1 2 5 1 2
1 3 2 4 3 3 1 1 4 4 2 5 5 3 2 1 4 5 4 5
4 1 4 2 1 1 2 1 2 3 4 3 3 5 2 1 1 5 1 4
2 1 3 2 4 1 3 4 1 5 4 2 4 3 3 1 5 1 2 2
3 5 2 2 1 1 2 4 1 5 5 1 5 4 4 3 4 4 3 3') %>% unlist(use.names = F)
data <- data.frame(tsta=as.factor(dta),
tstb=as.factor(dtb),
tstc=as.factor(sample(1:5,100,replace=T)))
ta <- model.matrix(~tsta, data, contrasts = list(tsta = "contr.helmert"))
cor(ta[,-1]) ########################################## collinear results
###### tsta1 tsta2 tsta3 tsta4
#tsta1 1.00000000 -0.26595995 -0.22219661 -0.09186113
#tsta2 -0.26595995 1.00000000 -0.09463643 -0.03912485
#tsta3 -0.22219661 -0.09463643 1.00000000 -0.13350694
#tsta4 -0.09186113 -0.03912485 -0.13350694 1.00000000
tb <- model.matrix(~tstb, data, contrasts = list(tstb = "contr.helmert"))
cor(tb[,-1])##################################### almost orthogonal
###### tstb1 tstb2 tstb3 tstb4
#tstb1 1.000000000 0.01192291 0.009193480 0.005885889
#tstb2 0.011922914 1.00000000 0.076964759 0.049274704
#tstb3 0.009193480 0.07696476 1.000000000 -0.004985713
#tstb4 0.005885889 0.04927470 -0.004985713 1.000000000
tc <- model.matrix(~tstc, data, contrasts = list(tstc = "contr.helmert"))
cor(tc[,-1]) ##################################### collinear
###### tstc1 tstc2 tstc3 tstc4
#tstc1 1.00000000 0.14295322 0.10340384 0.07009347
#tstc2 0.14295322 1.00000000 -0.03144958 -0.02131846
#tstc3 0.10340384 -0.03144958 1.00000000 -0.03976866
#tstc4 0.07009347 -0.02131846 -0.03976866 1.00000000
tt <- model.matrix(~tsta, data)
cor(tt[,-1]) ### binary coding produce also non-orthogonal results
[关键字]:
选择性,也许未来有用
作者: andrew43 (讨厌有好心推文后删文者)   2016-10-04 17:18:00
除非是平衡设计,否则不会完全无相关。vegan::rda如果没有交互作用项,要丢contr.treatment没关系的吧,和线性模型一样。
楼主: cywhale (cywhale)   2016-10-04 17:38:00
原来如此,感谢提点!

Links booklink

Contact Us: admin [ a t ] ucptt.com