我有一个 cv.glmnet 用于预测新数据。在为要使用 cv.glmnet 对象预测的新数据创建模型矩阵时遇到问题。我需要阻止引导测试数据并预测所有样本的响应。当在某些样本中,某些分类变量只有一个级别时,就会出现问题。然后在创建模型矩阵时出现错误。这是一个例子。
library(splines)
library(caret)
library(glmnet)
data(iris)
Inx <- sample(nrow(iris),100)
iris$Species <- factor(iris$Species)
train_data <- iris[Inx, ]
test_data <- iris[-Inx,]
Formula <- "Sepal.Length ~ Sepal.Width + Petal.Length + Species:Petal.Width + Sepal.Width:Petal.Length + Species + bs(Petal.Width, df = 2, degree = 2)"
ModelMatrix <- predict(caret::dummyVars(Formula, train_data, fullRank = T, sep = ""), train_data)
y = train_data[,"Sepal.Length"]
cvglm <- cv.glmnet(x = ModelMatrix,y = train_data$Sepal.Length,nfolds = 4,
keep = TRUE, alpha = 1, parallel = F, type.measure = 'mse')
test_data$Species <- "virginica"
ModelMatrix_test <- predict(caret::dummyVars(Formula, test_data, fullRank = T, sep = ""), test_data)
然后我得到这个错误
contrasts<-
( , value = contr.funs*tmp*
[1 + isOF[nn]]) 中的错误:对比只能应用于具有 2 个或更多级别的因子
任何解决问题的建议将不胜感激。