gglasso:预测“响应”类型

时间:2019-07-04 15:27:45

标签: r probability logistic-regression lasso

使用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 )))

这是获取相应概率的正确方法吗?

0 个答案:

没有答案