首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中指定线性模型时不带截距和对比度

在R中指定线性模型时不带截距和对比度
EN

Stack Overflow用户
提问于 2019-06-13 05:10:06
回答 1查看 168关注 0票数 0

我尝试在R中运行一个没有指定截距的线性模型。原因是最终要计算添加截距时减少的平方和。但是,在使用内置因子对比度与显式说明对比度值(即-.5和.5)指定此模型时,我收到了不同的结果。

更具体地说,使用contrasts()会产生具有2个项(无截距)的模型,而通过列向量明确说明对比度值会产生正确的模型(无截距和1个项指定对比度)。

代码语言:javascript
复制
group <- rep(c("c", "t"), each = 5)
group_cont <- rep(c(-.5, .5), each = 5)
var1 <- runif(10)
var2 <- runif(10)

test_data <- data.frame(
  group = factor(group), 
  group_cont = group_cont,
  y = var1, 
  x = var2
  )
contrasts(test_data$group) <- cbind(grp = c(-.5, .5))

summary(lm(y ~ 1 + group, data = test_data))      # full model
summary(lm(y ~ 0 + group, data = test_data))      # weird results
summary(lm(y ~ 0 + group_cont, data = test_data)) # expected

有没有一种方法可以指定一个没有截距的线性模型,但仍然使用contrasts()来指定对比度?

EN

回答 1

Stack Overflow用户

发布于 2019-06-13 10:23:47

lm()要求将数据框和列名作为输入。使用contrasts()时,将为数据框中的列分配一个属性,可以使用contrast函数或attr直接调用该属性。但是,您不会更改数据类型本身。使用上面的示例:

代码语言:javascript
复制
> str(test_data)
  'data.frame': 10 obs. of  4 variables:
 $ group     : Factor w/ 2 levels "c","t": 1 1 1 1 1 2 2 2 2 2 #### still a factor ####
  ..- attr(*, "contrasts")= num [1:2, 1] -0.5 0.5  #### NOTE The contrast attribute ####
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr  "c" "t"
  .. .. ..$ : chr "grp"
 $ group_cont: num  -0.5 -0.5 -0.5 -0.5 -0.5 0.5 0.5 0.5 0.5 0.5
 $ y         : num  0.161 0.518 0.417 0.335 0.301 ...
 $ x         : num  0.34 0.729 0.766 0.629 0.191 ...

> attr(test_data$group, "contrasts")

   grp
c -0.5
t  0.5

所以添加了一个attr,但类型仍然是一个因素。因此,lm将其视为一个因子,为每个级别提供一个系数。此外,在lm中提供contrast或调用attr将抛出错误。根据您希望最后看起来是什么样子,您可能需要探索不同的包,如contrast。在lm中也有一个contrast参数,但我不能100%确定这就是你真正想要的。有关这方面的更多信息,请参阅?lm

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

https://stackoverflow.com/questions/56570402

复制
相关文章

相似问题

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