首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对比系数矩阵还是对比矩阵/编码方案?怎么去那里?

对比系数矩阵还是对比矩阵/编码方案?怎么去那里?
EN

Stack Overflow用户
提问于 2015-08-04 19:57:57
回答 3查看 2K关注 0票数 12

习惯对比在分析中被广泛使用,例如:“在这个三级因子的第1级和第3级的DV值是否有很大的差异?”

从直觉上讲,这种对比用细胞手段表示为:

代码语言:javascript
复制
c(1,0,-1)

这些对比中的一个或多个,作为列的界限,形成一个对比系数矩阵。

代码语言:javascript
复制
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()C()函数直接使用直观的对比度系数矩阵。所以它很简单:

代码语言:javascript
复制
contrasts(myFactor) <- mat

要求2:转换系数以创建编码方案

在其他地方(如加州大学洛杉矶分校统计),我们被告知系数矩阵(或基矩阵)在使用前必须从系数矩阵转换为对比矩阵。这涉及到系数矩阵的变换的逆:(mat')⁻¹,或者,在Rish中:

代码语言:javascript
复制
contrasts(myFactor) = solve(t(mat))

此方法需要在矩阵中填充一列用于拦截的初始设备。为了避免这种情况,一些站点建议使用一个可以处理非平方矩阵的广义逆函数,即MASS::ginv()

代码语言:javascript
复制
contrasts(myFactor) = ginv(t(mat))

第三种选择:乘积为变换,取逆运算,后乘为变换。

在其他地方(例如SPSS支持的一个注释),我们学习正确的代数是:(mat'mat)-¹ mat'

对我来说,创建对比矩阵的正确方法应该是:

代码语言:javascript
复制
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

我的问题是,哪个是对的?(如果我正在准确地解释和描述每一条建议)。如何为lmlme等指定R中的自定义对比?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-02 17:44:58

声明2是正确的(请参阅答案这里这里),有时还声明1。这是因为在某些情况下,(转置)系数矩阵的广义逆等于矩阵本身。

票数 2
EN

Stack Overflow用户

发布于 2016-06-09 21:09:15

不管它值多少钱..。

如果你有一个3级的因子( A,B和C级),并且你想测试以下的正交对比:a和B,以及avg。A和B对C,你的对比码是:

代码语言:javascript
复制
Cont1<- c(1,-1, 0)
Cont2<- c(.5,.5, -1)

如果您按照UCLA站点上的指示执行(转换系数以制定编码方案),如下所示:

代码语言:javascript
复制
Contrasts(Variable)<- solve(t(cbind(c(1,1,1), Cont1, Cont2)))[,2:3]

那么,如果您创建了两个虚拟变量(例如:

代码语言:javascript
复制
Dummy1<- ifelse(Variable=="A", 1, ifelse(Variable=="B", -1, 0))
Dummy2<- ifelse(Variable=="A", .5, ifelse(Variable=="B", .5, -1))

把它们都输入回归方程,而不是你的因素,这让我倾向于认为这是正确的方法。

PS我不写最优雅的R代码,但它完成了工作。抱歉,我肯定还有更简单的方法来记录变量,但是你得到了要点。

票数 1
EN

Stack Overflow用户

发布于 2015-08-04 22:01:15

我可能遗漏了什么,但是在三个例子中,您都以相同的方式指定了对比度矩阵,即

代码语言:javascript
复制
## Note it should plural of contrast
contrasts(myFactor) = x

唯一不同的地方是x的值。

以加州大学洛杉矶分校网站的数据为例

代码语言:javascript
复制
hsb2 = read.table('http://www.ats.ucla.edu/stat/data/hsb2.csv', header=T, sep=",")

#creating the factor variable race.f
hsb2$race.f = factor(hsb2$race, labels=c("Hispanic", "Asian", "African-Am", "Caucasian"))

我们可以指定对比的treatment版本

代码语言:javascript
复制
contrasts(hsb2$race.f) = contr.treatment(4)
summary(lm(write ~ race.f, hsb2))

sum版本

代码语言:javascript
复制
contrasts(hsb2$race.f) = contr.sum(4)
summary(lm(write ~ race.f, hsb2))

或者,我们可以指定一个定制的对比矩阵。

其他标准对比见?contr.sum

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31818174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档