首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么更改对比度类型会更改R lm摘要中的行标签?

为什么更改对比度类型会更改R lm摘要中的行标签?
EN

Stack Overflow用户
提问于 2012-05-30 09:22:26
回答 2查看 2K关注 0票数 5

使用R (contr.treatment)中的默认对比度,线性模型对象的摘要根据级别名称给出行名称。当我将对比度更改为contr.sum时,线性模型对象的摘要根据虚构的数字给出行名称。

对于下面的示例代码,处理对比度的行名是xa xb xc xd xe,对于总和对比度,它们是x1 x2 x3 x4 x5。

除了手动重命名行之外,有没有一种方法可以使这些行的行为相同?

示例:

代码语言:javascript
运行
复制
y <- rnorm(10, 0, 1)
x <- factor(rep(letters[1:5], each = 2))

options(contrasts = c("contr.treatment", "contr.poly"))
summary(lm(y ~ x))

options(contrasts = c("contr.sum", "contr.poly"))
summary(lm(y ~ x))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-02 00:27:08

我仍然不确定这是不是一个好主意,我认为对对比意味着什么感到困惑的可能性太高了。尽管如此,我要做的是创建一个新的对比函数,该函数计算和对比,但将名称设置为与处理对比的默认名称相等。

代码语言:javascript
运行
复制
set.seed(5)
n <- 5
y <- c(10 + rnorm(n, 0, 1), 20 + rnorm(n, 0, 1), 30 + rnorm(n, 0, 1))
wFactor <- as.factor(c(rep("A", n), rep("B", n), rep("C", n)))

contr.sumX <- function(...) {
  conT <- contr.treatment(...)
  conS <- contr.sum(...)
  colnames(conS) <- colnames(conT)
  conS
}

作为参考,下面是通常的输出:

代码语言:javascript
运行
复制
> m1 <- lm(y ~ wFactor, contrasts = list(wFactor=contr.sum(n = levels(wFactor))))
> coef(summary(m1))
              Estimate Std. Error     t value     Pr(>|t|)
(Intercept) 19.8218432  0.2481727  79.8711599 9.889455e-18
wFactor1    -9.6079241  0.3509692 -27.3754029 3.480430e-12
wFactor2    -0.1934654  0.3509692  -0.5512319 5.915907e-01

这是contr.sumX函数的输出。

代码语言:javascript
运行
复制
> m2 <- lm(y ~ wFactor, contrasts = list(wFactor=contr.sumX(n = levels(wFactor))))
> coef(summary(m2))
              Estimate Std. Error     t value     Pr(>|t|)
(Intercept) 19.8218432  0.2481727  79.8711599 9.889455e-18
wFactorB    -9.6079241  0.3509692 -27.3754029 3.480430e-12
wFactorC    -0.1934654  0.3509692  -0.5512319 5.915907e-01

或者,您可以提前设置特定因子的对比度:

代码语言:javascript
运行
复制
contrasts(wFactor) <- "contr.sumX"
m3 <- lm(y ~ wFactor)
> coef(summary(m3))
              Estimate Std. Error     t value     Pr(>|t|)
(Intercept) 19.8218432  0.2481727  79.8711599 9.889455e-18
wFactorB    -9.6079241  0.3509692 -27.3754029 3.480430e-12
wFactorC    -0.1934654  0.3509692  -0.5512319 5.915907e-01
票数 1
EN

Stack Overflow用户

发布于 2016-02-16 21:07:23

我喜欢你的解决方案@Aaron,并已经实现了它,但我认为它包含了一个危险的错误。总和对比度给出了前n-1个因子和总体平均值之间的差异,而不是最后的n-1个因子,后者是命名算法返回的结果。参见Crawley's R Book第二版,第442-443页。

因此,我认为正确的函数应该是:

代码语言:javascript
运行
复制
contr.sum.keepnames <- function(...) {
    conS <- contr.sum(...)
    colnames(conS) = rownames(conS)[-length(rownames(conS))]
    conS
}

顺便说一句,我试着将这个作为注释添加,但在注释中添加代码块有困难。

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

https://stackoverflow.com/questions/10808853

复制
相关文章

相似问题

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