使用R中的glm和cv.glmnet预测新数据(包括交互和分类变量)

问题描述 投票:0回答:1

我想对一个包含交互作用和分类变量的回归公式建模。我有兴趣使用glm和glmnet :: cv.glmnet。我可以使用适合模型的功能,但不能确定我是否使用受过训练的模型正确预测出样本数据。这是一个例子。

Formula <- "Sepal.Length ~ Sepal.Width + Petal.Length + as.factor(Species):Petal.Width + Sepal.Width:Petal.Length +  as.factor(Species) +  bs(Petal.Width, df = 2, degree = 2)"

data("iris")
Inx <- sample( 1: nrow(iris), nrow(iris),  replace = F)

iris$Species <- as.factor(iris$Species)

train_data <- iris[Inx[1:100], ]
test_data <- iris[Inx[101:nrow(iris) ],]

#---- glm -----------------
ModelMatrix <- predict(caret::dummyVars(Formula, train_data, fullRank = T, sep = ""), train_data)
glmfit <- glm(formula = as.formula(Formula) , data = train_data)

prd_glm <- predict(glmfit, newx = ModelMatrix, type = "response")

#------- glm cross validation --------------
cvglm <- glmnet::cv.glmnet(x = ModelMatrix,
                           y = train_data$Sepal.Length,
                           nfolds = 4, keep = TRUE, alpha = 1, parallel = F, type.measure = 'mse')

ModelMatrix_test <- predict(caret::dummyVars(Formula, test_data, fullRank = T, sep = ""), test_data)
prd_cvglm <- predict(cvglm, newx = ModelMatrix_test,  s = "lambda.1se", type ='response')
r regression prediction glm
1个回答
0
投票

您可以使用模型矩阵,也可以使用公式,但不能同时使用两者,因为一旦提供了公式,任何glm都会在内部生成模型矩阵。而且您只进行一次分解。因此,就您而言,假设直接适合模型matrx:

© www.soinside.com 2019 - 2024. All rights reserved.