0

我有这个数据集。 体重

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

我知道没有我为之道歉的代码片段,但我对如何编写代码感到很迷茫。

任何建议表示赞赏。

感谢您阅读

4

1 回答 1

5

以下是有关如何运行 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

运行模型,这里的几个参数可以调整我建议检查文档。在这里,我只运行 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)

在此处输入图像描述

最佳拉姆达:

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,前三个是关于通过测试错误估计模型性能的,后三个是关于手头的问题的。这个_是如何在 R 中实现这些模型。顺便说一下,视频中的这些人发明了 LASSO 并制作了 glment。

还要检查glmnetUtils库,它提供了一个公式界面和其他不错的东西,比如内置的混合参数 (alpha) 选择。这是小插图

于 2017-12-04T05:46:52.737 回答