【发布时间】:2015-10-27 09:11:35
【问题描述】:
自定义对比在分析中应用非常广泛,例如:“这个三水平因子的水平 1 和水平 3 的 DV 值是否有显着差异?”
直观地说,这种对比用单元格均值表示为:
c(1,0,-1)
这些对比中的一个或多个,绑定为列,形成对比系数矩阵,例如
mat = matrix(ncol = 2, byrow = TRUE, data = c(
1, 0,
0, 1,
-1, -1)
)
[,1] [,2]
[1,] 1 0
[2,] 0 1
[3,] -1 -1
但是,在运行这些由系数矩阵指定的对比时,网络和书籍中有很多(显然是矛盾的)信息。我的问题是哪些信息是正确的?
权利要求 1: contrasts(factor) 采用系数矩阵
在一些示例中,向用户展示了直观的对比度系数矩阵可以通过contrasts() 或C() 函数直接使用。所以很简单:
contrasts(myFactor) <- mat
权利要求 2:变换系数以创建编码方案
在其他地方(例如UCLA stats)我们被告知系数矩阵(或基矩阵)在使用前必须从系数矩阵转换为对比矩阵。这涉及对系数矩阵的变换进行逆运算:(mat')⁻¹,或者,在 Rish 中:
contrasts(myFactor) = solve(t(mat))
此方法需要使用截距均值的初始列填充矩阵。为了避免这种情况,一些网站建议使用可以处理非方阵的广义逆函数,即MASS::ginv()
contrasts(myFactor) = ginv(t(mat))
第三种选择:预乘变换,取逆,后乘变换
再次在其他地方(例如来自SPSS support 的注释),我们学习到正确的代数是:(mat'mat)-¹ mat'
暗示我创建对比矩阵的正确方法应该是:
x = solve(t(mat)%*% mat)%*% t(mat)
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 1 0 -1
[3,] 0 1 -1
contrasts(myFactor) = x
我的问题是,哪个是正确的? (如果我准确地解释和描述每条建议)。如何在 R 中为 lm、lme 等指定自定义对比?
参考文献
【问题讨论】:
-
应该是 matrix(ncol=2, ...) 而不是 matrix(col=2, ...)