在model.matrix中定义控制值

时间:2016-03-18 21:23:12

标签: r model.matrix

在构建模型矩阵时,我注意到在处理具有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

diet = high是缺失的变量。现在我知道这可能是迂腐的,因为我知道R不关心。但有没有办法指定哪些变量应该被遗漏(在这种情况下,我希望饮食= med作为控制,因此被遗漏)

2 个答案:

答案 0 :(得分: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" 

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

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

另外,请记住,他们不是&#34;被排除在外&#34 ;;默认对比度是参考水平,因此参考水平会在拦截它们时结束。如果你适合没有拦截的模型,那就是

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

答案 1 :(得分: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