r - 在 R 中指定线性模型,没有带对比的截距
问题描述
我正在尝试在 R 中运行一个未指定截距的线性模型。原因是最终计算添加截距时减少的平方和。但是,当使用内置因子对比指定此模型与明确说明对比值(即 -.5 和 .5)时,我收到了不同的结果。
更具体地说,contrasts()
在具有 2 个项(无截距)的模型中使用结果,同时通过列向量明确说明对比度值会导致正确的模型(无截距和 1 个指定对比度的项)。
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()
指定对比度?
解决方案
lm()
要求输入数据框和列名。当您使用 时contrasts()
,您正在为数据框中的列分配一个属性,您可以使用contrast
函数 或直接调用该属性attr
。但是,您不会更改数据类型本身。使用上面的示例:
> 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
添加了 a 但类型仍然是一个因素。因此lm
将其视为一个因素,为您提供每个级别的系数。此外,提供contrast
或调用attr
内部lm
会引发错误。根据您希望最终的外观,您可能需要探索不同的包,例如contrast。还有一个contrast
论点,lm
但我不是 100% 确定这是你真正想要的。有关?lm
更多信息,请参阅。
推荐阅读
- html - 在移动屏幕上,我的 div 显示了不需要的白色边框
- javascript - Daterangepicker 如何获取预定义日期范围的值
- arrays - 在ant design table中使用多维数组
- c# - UWP SQLite 并发说明
- async-await - 条带检索客户方法是返回客户还是将其传递给回调?
- javascript - 运行 python 应用程序的最简单方法是从 Web 应用程序接收数据,处理/操作它,然后将其推回前端
- python - Pycharm 失去了视图和模板之间的连接
- three.js - 使用加速度计旋转 object3D
- reactjs - 将道具传递给使用包装器的子组件
- reactjs - 如何将 json 文件从 s3 返回到特定的 url,但只有那个 url