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

时间:2017-12-04 05:07:05

标签: r model prediction glmnet lasso

我有这个数据集。 wbh

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

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

感谢任何建议。

感谢您阅读

1 个答案:

答案 0 :(得分: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