0

首先,非常感谢您的关注和时间。我的问题(使用 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 个变量的原始数据子集?

我认为这应该很容易,但是我已经花了两个多小时,但它从来没有奏效......

最好的祝愿,托马斯

4

2 回答 2

0

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

varnames <- tmp_coef@Dimnames[[1]][tmp_coef@i]
as.data.frame(cbind(x[, varnames], y))
于 2017-05-04T14:49:21.023 回答
0

您的tmp_coef@Dimnames[[1]][tmp_coef@i]变量包含其余变量的名称,但还包含“(拦截)”作为第一项。如果用 丢弃它-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]])
于 2017-05-04T14:50:59.927 回答