我很难通过R包lars
估算我的数据模型。
例如,我创建了一个伪数据集x和相应的值y,如下所示:
x = cbind(runif(100),rnorm(100))
colnames(x) = c("a","b")
y = 0.5 + 3 * x[,1,drop = FALSE]
接下来,我使用lars函数训练一个使用套索正则化的模型:
m = lars(x,y,type = "lasso", normalize = FALSE, intercept = TRUE)
现在我想知道估计的模型是什么(that I know to be: y = 0.5 + 3 * x[,1] + 0 * x[,2]
)
我只对最后一步获得的系数感兴趣:
cf = predict(m, x, s=1, mode = "fraction", type = "coef")$coef
cf
a b
3 0
这些是我期望的系数,但我找不到从0.5
获取截距(m
)的方法。
我试图检查predict.lars
的代码,其中适合的地方是这样的:
fit = drop(scale(newx,
object$meanx, FALSE) %*% t(newbetas)) + object$mu)
我可以看到变量是缩放的,并且使用y
(对象$ mu)的平均值,但我找不到一种简单的方法来获取我正在寻找的拦截值。我怎么能得到它?
答案 0 :(得分:5)
intercept=T
中的 lars
具有将x变量和y变量居中的效果。它不包括带系数的明确截距项。
话虽如此,当协变量为0(传统拦截的定义)时,你可以predict(m,data.frame(a=0,b=0),s=2)$fit
得到y的预测值