r - model.matrix 如何为交互项选择级别

标签 r model.matrix

model.matrix如果低阶项包含在交互项中,则返回较少的级别。如果双因子变量分别具有 na 和 nb 水平。在具有交互项的完整 model.matrix 中,
model.matrix(~ A + B + A:B) ,我不应该有 (na-1) + (nb-1) + (na*nb-1) 吗?

在下面的例子中,ab每个有三个级别。它们总共有九个级别。

data(mtcars)
a <- as.factor(mtcars$gear)
b <- as.factor(mtcars$cyl)
table (a,b)

   b
a    4  6  8
  3  1  2 12
  4  8  4  0
  5  2  1  2

对于只有交互项的模型矩阵,它具有所有九个级别。
mod.I <- model.matrix(~ a:b)
colnames(mod.I)
[1] "(Intercept)" "a3:b4"       "a4:b4"       "a5:b4"       "a3:b6"      
[6] "a4:b6"       "a5:b6"       "a3:b8"       "a4:b8"       "a5:b8"  


然而,对于只有一个低阶项的 model.matrix,它也会降低其他变量的水平。在这种情况下,b 没有 b = 4 的项。
mod.a <- model.matrix(~ a + a:b)
colnames(mod.a)
[1] "(Intercept)" "a4"          "a5"          "a3:b6"       "a4:b6"      
[6] "a5:b6"       "a3:b8"       "a4:b8"       "a5:b8" 

这相当于完​​整的model.matrix。
mod.ab <- model.matrix(~ a + b + a:b)
colnames(mod.ab)
[1] "(Intercept)" "a4"          "a5"          "b6"          "b8"         
[6] "a4:b6"       "a5:b6"       "a4:b8"       "a5:b8"

我读到它与对比有关,但是,对比不会在交互项上独立运作吗?另外,如果我想知道 a4:b4 与 a3:b4 的系数,我该怎么做?

最佳答案

您可以查看 model.matrix 的输出以确切了解它在任何特定情况下所做的工作,但无论如何要计算全套系数,请使用 dummy.coef像这样或可选地使用 use.na=TRUE争论。见 ?dummy.coef

fm <- lm(mpg ~ a + a:b, mtcars)
dummy.coef(fm)

给予:
Full coefficients are 

(Intercept):       21.5                                                                
a:                    3       4       5                                                
                  0.000   5.425   6.700                                                
a:b:                3:4     4:4     5:4     3:6     4:6     5:6     3:8     4:8     5:8
                  0.000   0.000   0.000  -1.750  -7.175  -8.500  -6.450   0.000 -12.800

关于r - model.matrix 如何为交互项选择级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57720642/

相关文章:

java - 如何在R中访问java arraylist类型

r - 如何标准化 model.matrix?

r - 计算分组数据中各点之间的欧式距离

r - 使用字符串更改数据框列的类

r - 针对长数据框的所有组的散点图

model.matrix 中的 R 缺失级别

r - model.frame.default(object, data, xlev = xlev) 错误 : object is not a matrix

r - r 中列表中的 model.matrix

R优化: Pass value from function to gradient with each iteration