我知道我可以像这样构建一个模型矩阵:
df <- data.frame(outcome = rnorm(4),
group1 = rep(c('A', 'B'), each = 2),
group2 = rep(c('A', 'B'), times = 2))
model.matrix(outcome ~ group1 + group2 - 1, data=df)
这给了
group1A group1B group2B
1 1 0 0
2 1 0 1
3 0 1 0
4 0 1 1
attr(,"assign")
[1] 1 1 2
attr(,"contrasts")
attr(,"contrasts")$group1
[1] "contr.treatment"
attr(,"contrasts")$group2
[1] "contr.treatment"
请注意,其中一个因子级别被删除,因为如果包含设计矩阵将排名不足。但是,在模型中,我想估计这实际上很好,我想保留第四列。有没有办法让model.matrix
放弃它?
答案 0 :(得分:1)
我最近遇到了同样的问题。我赶时间来找到这个丑陋的解决方案:
res <- as.list(vector(length = ncol(df[,-1])))
for(i in 1:ncol(df[,-1])) {
res[[i]] <- model.matrix(~ -1 + ., data = df[,i+1, drop = FALSE])
}
res <- do.call(cbind, res)
真的很想知道这是否可以直接使用model.matrix