使用R中的gglasso(分组LASSO)程序包,我有点难以获得概率而不是预测的类。
predict.gglasso仅允许指定type ='class'或'link'。
我使用分组的套索程序包来估计LASSO逻辑回归。使用交叉验证发现了lambda。
选择预测类型='link',然后在输出中使用逆logit链接功能是正确的方法吗?
gglasso预测功能如下所示。
gglasso::predict.gglasso
function (object, newx, s = NULL, type = c("class", "link"),
...)
{
type <- match.arg(type)
loss <- class(object)[[2]]
b0 <- t(as.matrix(object$b0))
rownames(b0) <- "(Intercept)"
nbeta <- rbind2(b0, object$beta)
if (!is.null(s)) {
vnames <- dimnames(nbeta)[[1]]
dimnames(nbeta) <- list(NULL, NULL)
lambda <- object$lambda
lamlist <- lambda.interp(lambda, s)
if (length(s) == 1) {
nbeta = nbeta[, lamlist$left, drop = FALSE] * lamlist$frac +
nbeta[, lamlist$right, drop = FALSE] * (1 - lamlist$frac)
}
else {
nbeta = nbeta[, lamlist$left, drop = FALSE] %*% diag(lamlist$frac) +
nbeta[, lamlist$right, drop = FALSE] %*% diag(1 -
lamlist$frac)
}
dimnames(nbeta) <- list(vnames, paste(seq(along = s)))
}
if (is.null(dim(newx)))
newx = matrix(newx, nrow = 1)
nfit <- as.matrix(as.matrix(cbind2(1, newx)) %*% nbeta)
if (loss %in% c("logit", "sqsvm", "hsvm")) {
switch(type, link = nfit, class = ifelse(nfit > 0, 1,
-1))
}
else {
nfit
}
}
所以我已经估算了一个模型,并以此来获得概率(目前在样本中)
fit_model1 <- gglasso(x=x,y=y,group=groups_x,loss="logit", lambda = lmbda)
predict_insample <- fit_model1 %>%
predict(newx = x, type = 'link')
probabilities <- (exp(predict_insample)/(1+exp(predict_insample )))
这是获取相应概率的正确方法吗?