首先,非常感谢您的兴趣和时间。我的问题(使用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个?
我认为这应该很容易,但是我花了两个多小时才开始工作......
祝福, 托马斯
答案 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]])