首页 文章

使用glmnet预测数据集中的连续变量

提问于
浏览
0

我有这个数据集 . wbh

我想使用R软件包glmnet来确定哪些预测器可用于预测生育率 . 但是,我无法这样做,很可能是因为没有完全了解该包装 . 生育率变量是SP.DYN.TFRT.IN.我想看看数据集中的哪些预测因子为生育率提供了最具预测性的能力 . 我想使用LASSO或岭回归来缩小系数,我知道这个包可以做到 . 我只是在实施它时遇到了一些麻烦 .

我知道没有我为此道歉的代码片段,但我对如何编写代码感到很遗憾 .

任何建议表示赞赏 .

谢谢你的阅读

1 回答

  • 4

    这是一个如何运行glmnet的示例:

    library(glmnet)
    library(tidyverse)
    

    df是您提供的数据集 .

    选择y变量:

    y <- df$SP.DYN.TFRT.IN
    

    选择数值变量:

    df %>%
      select(-SP.DYN.TFRT.IN, -region, -country.code) %>%
      as.matrix() -> x
    

    选择因子变量并转换为虚拟变量:

    df %>%
      select(region, country.code) %>%
      model.matrix( ~ .-1, .) -> x_train
    

    运行模型,这里的几个参数可以调整我建议检查documentation . 在这里,我只需运行5倍交叉验证来确定最佳lambda

    cv_fit <- cv.glmnet(x, y, nfolds = 5) #just with numeric variables
    
    cv_fit_2 <- cv.glmnet(cbind(x ,x_train), y, nfolds = 5) #both factor and numeric variables
    
    par(mfrow = c(2,1))
    plot(cv_fit)
    plot(cv_fit_2)
    

    enter image description here

    最好的lambda:

    cv_fit$lambda[which.min(cv_fit$cvm)]
    

    最佳lambda系数

    coef(cv_fit, s = cv_fit$lambda[which.min(cv_fit$cvm)])
    

    相当于:

    coef(cv_fit, s = "lambda.min")
    

    运行 coef(cv_fit, s = "lambda.min") 后,结果表中的 - 所有功能都将从模型中删除 . 这种情况对应于在图上用左垂直虚线描绘的左边的lambda .
    我建议阅读链接文档 - 如果你知道一些线性回归并且包非常直观,弹性网很容易掌握 . 我还建议阅读ISLR,至少是L1 / L2正则化的部分 . 和这些视频:123 456,前三个是关于通过测试错误估计模型性能,后三个是关于手头的问题 . 这个one是如何在R中实现这些模型的 . 通过视频中的这些人发明了LASSO并制造了光彩 .

    还要检查glmnetUtils库,它提供了一个公式界面和其他很好的东西,比如内置的混合参数(alpha)选择 . 这是vignette .

相关问题