在Lasso之后:将剩余变量存储为新数据帧(使用R)

时间:2017-05-04 14:31:24

标签: r dataframe subset lasso

首先,非常感谢您的兴趣和时间。我的问题(使用R): 为了预测yvar,我运行了一个套索回归,将xvariables的集合从736减少到30.

lasso.mod =glmnet(x,y,alpha=1)
cv.out =cv.glmnet (x,y,alpha=1)
lasso.bestlam =cv.out$lambda.min
tmp_coef = coef(cv.out,s=lasso.bestlam)

varnames = data.frame(name = tmp_coef@Dimnames[[1]][tmp_coef@i])
mylist = list(name = tmp_coef@Dimnames[[1]][tmp_coef@i])

因此,我将剩余的变量名称作为数据框,也作为列表。 如何创建一个新的数据框,其中包含剩余的30个变量及其中的观察结果?换句话说:我如何获得原始数据的子集,其中不包含737个变量但只包含31个?

我认为这应该很容易,但是我花了两个多小时才开始工作......

祝福, 托马斯

2 个答案:

答案 0 :(得分:0)

无法测试您的解决方案,因为我没有数据,但这应该可以解决问题:

varnames <- tmp_coef@Dimnames[[1]][tmp_coef@i]
as.data.frame(cbind(x[, varnames], y))

答案 1 :(得分:0)

您的tmp_coef@Dimnames[[1]][tmp_coef@i]变量包含剩余变量的名称,但也包含&#34;(拦截)&#34;作为第一项。如果您使用-1]丢弃它,则可以提取列:

x <- as.data.frame(x[, tmp_coef@Dimnames[[1]][tmp_coef@i][-1]])

更简单,您可以直接使用tmp_coef@i中的索引:

x <- as.data.frame(x[, tmp_coef@i[-1]])