dHeight
是logical
。_ 在model
此强制为一个因子,并且级别按字典顺序排序(即 F 在 T 之前)。
正如@Hongooi 的回答中所述,您无法估计 4 个参数,因此 R 将按照它们出现的顺序拟合这些术语(在 TRUE 之前为 FALSE)
如果您想先强制R
拟合该TRUE
值,则可以将模型拟合到!dHeight
lm(formula = Volume ~ Girth + cGirth:!dHeight, data = trees)
请注意,这!dHeightFALSE
相当于dHeightTRUE
您还将注意到,在这种简单的情况下,您只是更改系数上的符号,因此您适合的模型并不重要。
编辑一个更好的方法
R 可以识别它cGirth
并且Girth
是共线的,因此我们可以拟合记忆a/b
扩展为a + a:b
lm(formula = Volume ~ Girth + cGirth/dHeight, data = trees)
Coefficients:
(Intercept) Girth cGirth cGirth:dHeightTRUE
-27.198 4.251 NA 1.286
这为系数提供了易于解释的名称,并且R
显然无法返回系数cGirth
R
当它们都是作为“主要效应”或独立术语的模型时,可以分辨Girth
并且是共线的。cGirth
没有办法在拟合时R
应该能够判断并且是共线的,并且鉴于这是合乎逻辑的,我们希望成为您拟合的系数。(如果你真的想要,你可以编写自己的公式解析器来做到这一点)Girth + cGirth:dHeight
cGirth
Girth
dHeight
cGirthdHeightTRUE
另一种适合您想要的模型并且没有任何共线项的方法是使用
lm(formula = Volume ~ Girth + I(cGirth*dHeight), data = trees)
强制dHeight
转换为数字 ( TRUE becomes 1
)。
编辑工作重点。
当你适合~Girth + Girth:dHeight
你的意思是Girth
+ 调整有一个主要影响dHeight
。R 将因子的第一水平视为参考水平。的斜率dHeightFALSE
只是 的值Girth
,然后您可以调整 when dHeight == TRUE
(Girth:dHeightTRUE)。
当您适合时~Girth + cGirth:dHeight
-R
没有一个读心解析器可以分辨出给定的内容cGirth
并且Girth
当您适合这两个术语的交互时是共线的,它将假定第二个级别dHeight
现在是参考级别)
想象一下,如果你有一个完全不相关的变量Girth
例如
set.seed(1)
trees$cG <- runif(nrow(trees))
然后当你拟合时Girth + cG:dHeight
,你会得到 4 个估计的参数
lm(formula = Volume ~ Girth + cG:dHeight, data = trees)
Call:
lm(formula = Volume ~ Girth + cG:dHeight, data = trees)
Coefficients:
(Intercept) Girth cG:dHeightFALSE cG:dHeightTRUE
-31.79645 4.79435 -5.92168 0.09578
这是明智的。
当R
处理时Girth + cGirth:dHeight
,它会扩展(首先是因子的第一级)1 + Girth + cGirth:dHeightFALSE + cGirth:dHeightTRUE
- 并且会发现它无法估计所有 4 个参数,并且会估计前 3 个参数。