我已经使用glmnet在R中训练了一个弹性网络模型,并希望使用它来根据新数据集进行预测。
但是我在生成矩阵以用作predict()方法中的参数时遇到了麻烦,因为在新数据集中我的某些因子变量(指示合并症的虚拟变量)只有一个级别(合并症)从未观察到),这意味着我无法使用
model.matrix(RESPONSE〜。,new_data)
因为它给了我(期望的)
CancellationToken
(contrasts<-
中的错误,值= contr.funs [1 + isOF [nn]]): 对比只能应用于2个或更多级别的因素
我不知所措如何解决这个问题。在这种情况下,R中是否有一种方法可以构造一个合适的矩阵以供predict()使用,还是需要在R之外准备矩阵?无论哪种情况,我该怎么做?
这是一个玩具示例,它再现了我遇到的问题:
*tmp*
答案 0 :(得分:1)
您可以在示例中将数据集的levels
设置为与完整数据集的levels
匹配。即使变量中不存在某个因子,levels
中也可以存在一个值。
您可以使用levels
中的factor()
参数来完成此操作:
new_data$FactorB <- factor(0, levels = levels(toy_data$FactorB))
或通过使用levels()
函数进行分配:
levels(new_data$FactorB) <- levels(toy_data$FactorB)
使用任一方法,一旦您拥有多个级别,model.matrix()
便可以正常工作:
head( model.matrix(Outcome ~ ., new_data)[,-1] )
Continuous FactorA1 FactorB1
1 -1.91632972 0 0
2 1.11411267 0 0
3 -1.21333837 1 0
4 -0.06311276 0 0
5 1.31599915 0 0
6 0.36374591 1 0