0

在构建模型矩阵时,我注意到在处理具有超过 2 个值的变量时,模型矩阵似乎随机选择要用作列的变量:

在示例 1 中:

diet <- factor(c('high','high','control','control','low','low'))
sex <- factor(c("f","f","m","f","m","m"))
model.matrix(~ diet + sex)
  (Intercept) diethigh dietlow sexm
1           1        1       0    0
2           1        1       0    0
3           1        0       0    1
4           1        0       0    0
5           1        0       1    1
6           1        0       1    1

饮食 = 控制,并且推断性别 = f。在饮食的情况下,控制被忽略了,所以我对矩阵很满意。

在示例 2 中:

diet <- factor(c('high','high','med','med','low','low'))
sex <- factor(c("f","f","m","f","m","m"))
model.matrix(~ diet + sex)
  (Intercept) dietlow dietmed sexm
1           1       0       0    0
2           1       0       0    0
3           1       0       1    1
4           1       0       1    0
5           1       1       0    1
6           1       1       0    1

饮食=高是缺失的变量。现在我知道这可能是迂腐的,因为我知道 R 不在乎。但是有没有办法指定哪些变量应该被忽略(在这种情况下,我希望饮食 = med 作为对照,因此被忽略)

4

2 回答 2

3

选择不是随机的。它忽略了因素的第一级是什么。在你的例子中,观察

# from example 1
levels(factor(c('high','high','control','control','low','low')))
# [1] "control" "high"    "low" 

# from example 2
levels(factor(c('high','high','med','med','low','low')))
# [1] "high" "low"  "med" 

默认情况下,它们按字母顺序排序。因此,在第一种情况下,“控制”用作参考,而在第二种情况下,“高”用作参考。如果你有相同的水平是这两个因素,这不会是一个问题。您可以通过在创建因子时将因子设置为具有相同的显式水平来调整它,或者您可以使用该relevel()命令。例如

diet <- relevel(diet,"med")
model.matrix(~ diet + sex)

另外,请记住它们不是“被排除在外”的;默认对比度是参考水平,因此参考水平在拦截它们时结束。如果你拟合一个没有截距的模型,那么就在那里

model.matrix(~ diet -1)
#   dietmed diethigh dietlow
# 1       0        1       0
# 2       0        1       0
# 3       1        0       0
# 4       1        0       0
# 5       0        0       1
# 6       0        0       1
于 2016-03-18T21:33:41.260 回答
1
sex <- factor(c("f","f","m","f","m","m"))
diet <- factor(c('high','high','control','control','low','low'))
diet <- relevel(diet, "high")
model.matrix(~ diet + sex)

#     (Intercept) dietcontrol dietlow sexm
# 1           1           0       0    0
# 2           1           0       0    0
# 3           1           1       0    1
# 4           1           1       0    0
# 5           1           0       1    1
# 6           1           0       1    1
于 2016-03-18T21:31:53.537 回答