使用 glmnet 预测数据集中的连续变量
Using glmnet to predict a continuous variable in a dataset
我有这个数据集。
wbh
我想使用 R 包 glmnet 来确定哪些预测变量可用于预测生育率。但是,我一直无法这样做,很可能是因为对包没有充分的了解。生育力变量是 SP.DYN.TFRT.IN。我想看看数据集中的哪些预测因子对生育率的预测能力最强。我想使用 LASSO 或岭回归来缩小系数的数量,我知道这个包可以做到这一点。我只是在实施时遇到了一些问题。
我知道没有我要道歉的代码片段,但我对如何编写代码感到迷茫。
如有任何建议,我们将不胜感激。
感谢阅读
这是一个关于如何 运行 glmnet 的例子:
library(glmnet)
library(tidyverse)
df是你提供的数据集。
select y 变量:
y <- df$SP.DYN.TFRT.IN
select数值变量:
df %>%
select(-SP.DYN.TFRT.IN, -region, -country.code) %>%
as.matrix() -> x
select 因子变量并转换为虚拟变量:
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)
最佳 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")
之后,结果 table 中具有 -
的所有特征都从模型中删除。这种情况对应于图上用左侧垂直虚线描绘的左侧 lambda。
我建议阅读链接的文档 - 如果您了解一点线性回归并且包非常直观,那么弹性网很容易掌握。我还建议阅读 ISLR, at least the part with L1 / L2 regularization. and these videos: 1, 2, 3 4, 5, 6, first three are about estimating model performance via test error and the last three are about the question at hand. This one 了解如何在 R 中实现这些模型。顺便说一下,视频中的这些人发明了 LASSO 并制作了 glment。
同时检查 glmnetUtils library which provides a formula interface and other nice things like in built mixing parameter (alpha) selection. Here is the vignette。
我有这个数据集。 wbh
我想使用 R 包 glmnet 来确定哪些预测变量可用于预测生育率。但是,我一直无法这样做,很可能是因为对包没有充分的了解。生育力变量是 SP.DYN.TFRT.IN。我想看看数据集中的哪些预测因子对生育率的预测能力最强。我想使用 LASSO 或岭回归来缩小系数的数量,我知道这个包可以做到这一点。我只是在实施时遇到了一些问题。
我知道没有我要道歉的代码片段,但我对如何编写代码感到迷茫。
如有任何建议,我们将不胜感激。
感谢阅读
这是一个关于如何 运行 glmnet 的例子:
library(glmnet)
library(tidyverse)
df是你提供的数据集。
select y 变量:
y <- df$SP.DYN.TFRT.IN
select数值变量:
df %>%
select(-SP.DYN.TFRT.IN, -region, -country.code) %>%
as.matrix() -> x
select 因子变量并转换为虚拟变量:
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)
最佳 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")
之后,结果 table 中具有 -
的所有特征都从模型中删除。这种情况对应于图上用左侧垂直虚线描绘的左侧 lambda。
我建议阅读链接的文档 - 如果您了解一点线性回归并且包非常直观,那么弹性网很容易掌握。我还建议阅读 ISLR, at least the part with L1 / L2 regularization. and these videos: 1, 2, 3 4, 5, 6, first three are about estimating model performance via test error and the last three are about the question at hand. This one 了解如何在 R 中实现这些模型。顺便说一下,视频中的这些人发明了 LASSO 并制作了 glment。
同时检查 glmnetUtils library which provides a formula interface and other nice things like in built mixing parameter (alpha) selection. Here is the vignette。