为了账号安全,请及时绑定邮箱和手机立即绑定

R模型矩阵中因子的所有层次

R模型矩阵中因子的所有层次

牛魔王的故事 2019-10-16 12:43:51
我有一个data.frame由数字和因子组成的变量,如下所示。testFrame <- data.frame(First=sample(1:10, 20, replace=T),           Second=sample(1:20, 20, replace=T), Third=sample(1:10, 20, replace=T),           Fourth=rep(c("Alice","Bob","Charlie","David"), 5),           Fifth=rep(c("Edward","Frank","Georgia","Hank","Isaac"),4))我想建立一个matrix将虚拟变量分配给因子并仅保留数字变量的方法。model.matrix(~ First + Second + Third + Fourth + Fifth, data=testFrame)如预期的那样,在运行时,lm这会将每个因子的一个水平作为参考水平。但是,我想为matrix所有因素的每个层次建立一个带有虚拟/指标变量的。我正在为此建立矩阵,glmnet所以我不必担心多重共线性。有没有一种方法可以model.matrix为每个因子水平创建虚拟对象?
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

您需要重置contrasts因子变量:


model.matrix(~ Fourth + Fifth, data=testFrame, 

        contrasts.arg=list(Fourth=contrasts(testFrame$Fourth, contrasts=F), 

                Fifth=contrasts(testFrame$Fifth, contrasts=F)))

或者,键入少一点,但没有适当的名称:


model.matrix(~ Fourth + Fifth, data=testFrame, 

    contrasts.arg=list(Fourth=diag(nlevels(testFrame$Fourth)), 

            Fifth=diag(nlevels(testFrame$Fifth))))


查看完整回答
反对 回复 2019-10-16
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

(尝试赎回自己...)为响应Jared关于@Fabians自动化的回答,请注意,您需要提供的只是一个对比矩阵的命名列表。contrasts()取一个向量/因数并从中产生对比度矩阵。对于这个那么我们可以用lapply()运行contrasts()在我们的数据集,例如用于各个因素testFrame提供的示例:


> lapply(testFrame[,4:5], contrasts, contrasts = FALSE)

$Fourth

        Alice Bob Charlie David

Alice       1   0       0     0

Bob         0   1       0     0

Charlie     0   0       1     0

David       0   0       0     1


$Fifth

        Edward Frank Georgia Hank Isaac

Edward       1     0       0    0     0

Frank        0     1       0    0     0

Georgia      0     0       1    0     0

Hank         0     0       0    1     0

Isaac        0     0       0    0     1

@fabians哪个插槽很好地回答:


model.matrix(~ ., data=testFrame, 

             contrasts.arg = lapply(testFrame[,4:5], contrasts, contrasts=FALSE))


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 867 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信