【发布时间】:2020-05-23 01:07:59
【问题描述】:
我下面有一个模型
A = matrix(1, nrow = 400, ncol = 400)
A = 0.5**abs(row(A) - col(A))
X=mvtnorm::rmvnorm(300,mean=rep(0,400),sigma=A)))
Y=X[,6]+X[,12]+X[,15]+X[,20]+0.7*pnorm(X[,1])*rnorm(300)
df <- data.frame(Y, X)
我想给它安装最小二乘套索。我需要总结以下几点:
- 模拟运行中包含 X6、X12、X15 和 X20 的次数百分比
- 包括 X1 在内的模拟运行比例
我如何计算 1. 和 2.?结果应该是 100% 和 6%。
av_model_size <- c(NULL)
a1 <- c(NULL)
a2 <- c(NULL)
for (i in 1:100) {
lassocv <- glmnet::cv.glmnet(X, Y, alpha = 1)
modelcv <- glmnet::glmnet(X, Y, alpha = 1, lambda = lassocv$lambda.min, standardize = TRUE)
lasso.coef <- modelcv$beta
av_model_size[[i]] <- sum(lasso.coef!=0)
a1[[i]] <- sum(lasso.coef[6] != 0 && lasso.coef[12] != 0 && lasso.coef[15] != 0 && lasso.coef[20] != 0)
a2[[i]] <- sum(lasso.coef[1] != 0)
}
平均值(ams)
【问题讨论】:
-
您是在为整个过程而苦苦挣扎,还是在精确的步骤上苦苦挣扎?听起来您需要做的就是将代码包装在一个循环中并收集相关 X 的系数,然后计算它们与 0 不同的频率。
-
是的,整个过程,我该怎么做?
-
正如我所说,您将代码包装到一个循环中以重复 1000 次,并且每次都存储最终模型的系数。然后你计算它们与 0 不同的频率。
-
感谢您的建议 - 我试图实现重复的模拟,但是当我取平均值(a1),平均值(a2)时值非常低
-
好的,请参阅下面的答案,这里的评论有点太长了。 @Btzzzz
标签: r regression