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

尼罗河

我想建模一个包含交互和分类变量的回归公式。我有兴趣使用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')
笨狼

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

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)"

glmfit <- glm(as.formula(Formula),data=train_data)

您可以看到这与使用公式拟合相同:

ModelMatrix <- predict(caret::dummyVars(Formula, train_data, fullRank = T, sep = ""), train_data)
y = train_data[,"Sepal.Length"]
fit_dummy = glm(y ~ ModelMatrix)
table(fitted(glmfit) == fitted(fit_dummy))
TRUE 
 100

我们根据测试数据进行预测:

prd_glm <- predict(glmfit, newdata = test_data, type = "response")

然后对于glmnet:

cvglm <- 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')

您可以看到它们的不同之处:

plot(prd_glm,prd_cvglm)

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在R中使用cv.glm进行预测

来自分类Dev

R glm对象和使用偏移量的预测

来自分类Dev

使用glm预测新数据

来自分类Dev

在glm :: rotate中使用“自定义”的罪孽和cos

来自分类Dev

在R中使用变量作为列名拟合glm

来自分类Dev

在R中使用predict()函数绘制glm时,如何确保x和y的长度没有差异?

来自分类Dev

在新因子(分类)变量上使用rpart进行预测

来自分类Dev

如何获得R中所有数据的实际分类和预测分类?

来自分类Dev

R中的glmnet()和cv.glmnet()之间的区别?

来自分类Dev

cv.IntRanges中使用的cv。标量(最小值)和(最大值)是什么

来自分类Dev

多项式数据和R的glm()

来自分类Dev

使用R中的新x值和多项式回归预测新数据

来自分类Dev

R中预测和glm.predict的错误

来自分类Dev

如何在统计模型中使用Gamma GLM的比例和形状参数

来自分类Dev

在GLM准规范中使用变量

来自分类Dev

在R中使用Xgboost进行训练和预测

来自分类Dev

在R中使用文本分类和大稀疏矩阵

来自分类Dev

在Matlab中使用经过交叉验证的Knn分类器模型为新数据集(测试数据)预测标签

来自分类Dev

使用for循环和pROC软件包计算R中的多个ROC曲线。在预测变量字段中使用什么变量?

来自分类Dev

如何使用成本函数从cv.glmnet提取实际的分类错误率,以便可以与cv.glm进行比较?

来自分类Dev

在 sci-kit learn 中使用分类预测变量

来自分类Dev

MATLAB:使用 fitctree 训练分类器对新数据进行标签预测

来自分类Dev

在R中使用seq()和rep()函数

来自分类Dev

在git和packrat中使用R

来自分类Dev

在R中使用match和apply

来自分类Dev

在Python中使用带有ctypes和cv2的tesseract 3.02的C API

来自分类Dev

按日期范围和分类变量合并数据集

来自分类Dev

R 具有分类变量和交互项的线性回归的嵌套横截面的可视化

来自分类Dev

预测R / SparkR和精度的新值

Related 相关文章

  1. 1

    如何在R中使用cv.glm进行预测

  2. 2

    R glm对象和使用偏移量的预测

  3. 3

    使用glm预测新数据

  4. 4

    在glm :: rotate中使用“自定义”的罪孽和cos

  5. 5

    在R中使用变量作为列名拟合glm

  6. 6

    在R中使用predict()函数绘制glm时,如何确保x和y的长度没有差异?

  7. 7

    在新因子(分类)变量上使用rpart进行预测

  8. 8

    如何获得R中所有数据的实际分类和预测分类?

  9. 9

    R中的glmnet()和cv.glmnet()之间的区别?

  10. 10

    cv.IntRanges中使用的cv。标量(最小值)和(最大值)是什么

  11. 11

    多项式数据和R的glm()

  12. 12

    使用R中的新x值和多项式回归预测新数据

  13. 13

    R中预测和glm.predict的错误

  14. 14

    如何在统计模型中使用Gamma GLM的比例和形状参数

  15. 15

    在GLM准规范中使用变量

  16. 16

    在R中使用Xgboost进行训练和预测

  17. 17

    在R中使用文本分类和大稀疏矩阵

  18. 18

    在Matlab中使用经过交叉验证的Knn分类器模型为新数据集(测试数据)预测标签

  19. 19

    使用for循环和pROC软件包计算R中的多个ROC曲线。在预测变量字段中使用什么变量?

  20. 20

    如何使用成本函数从cv.glmnet提取实际的分类错误率,以便可以与cv.glm进行比较?

  21. 21

    在 sci-kit learn 中使用分类预测变量

  22. 22

    MATLAB:使用 fitctree 训练分类器对新数据进行标签预测

  23. 23

    在R中使用seq()和rep()函数

  24. 24

    在git和packrat中使用R

  25. 25

    在R中使用match和apply

  26. 26

    在Python中使用带有ctypes和cv2的tesseract 3.02的C API

  27. 27

    按日期范围和分类变量合并数据集

  28. 28

    R 具有分类变量和交互项的线性回归的嵌套横截面的可视化

  29. 29

    预测R / SparkR和精度的新值

热门标签

归档