model.matrix如何选择交互项的级别

时间:2019-08-30 04:48:48

标签: r model.matrix

如果交互项中包含低阶项,则

model.matrix返回的级别较少。如果二因子变量分别具有na和nb级别。在带有交互条件的完整model.matrix中,

model.matrix(~ A + B + A:B),我不应该拥有(na-1)+(nb-1)+(na * nb-1)吗?

在下面的示例中,ab都具有三个级别。他们在一起,共有9个等级。

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的比例,我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以查看model.matrix的输出以确切了解在任何特定情况下所做的事情,但无论如何要计算完整的系数集,请像这样使用dummy.coef或选择使用{{1 }}参数。参见use.na=TRUE

?dummy.coef

给予:

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