从clogitLasso()模型获取预测吗?

时间:2019-01-18 22:21:31

标签: r logistic-regression prediction

我如何从clogitLasso model获得预测?

这将为我提供一系列惩罚权重以及与之相关的协变量系数,但是我接下来要做的就是选择这些权重之一,并使用相关模型进行预测。然后,我可以使用AUC或类似的方法来评估模型。

也可以使用其他库浏览建议。

(也有可能被CrossValidated弹跳,但这不是一个理论上的问题。。。)

1 个答案:

答案 0 :(得分:0)

predict()没有clogitLasso()函数,但是我对此太想了。您可以自己对数据乘以系数进行矩阵乘法。

例如:

首先,我们将模拟一些数据。 180个案例/对照对中的360个观察值。 case被编码为1/0,而set则对180对进行编号。有两个协变量:e1是噪声,x1与结果case相关。

library("clogitLasso")
set.seed(0)
N <- 360
mm <- data.frame(case=rep(c(1, 0), times=N/2))
mm$set <- rep(1:(N/2), each=2)
mm$e1 <- rnorm(n=N, mean=5, sd=10)
mm$x1 <- mm$case*10 + rnorm(n=N, mean=0, sd=3)

要从clogitLasso获得预测,我们需要先将协变量(均值= 0,sd = 1)标准化,然后再将数据放入模型中。 (否则clogitLasso会将系数转换回“原始标度”,在这里没有用。)

mm[, c("e1", "x1")] <- scale(mm[, c("e1", "x1")], center=TRUE, scale=TRUE)

然后建立模型:

model <- clogitLasso(X=as.matrix(mm[, c("e1", "x1")]), y=as.matrix(mm$case), 
    strata=mm$set, standardize=FALSE)

我们需要选择我们要测试预测值的权重的哪个值-在这里,我们将选择第十个,仅仅是因为。

然后我们将原始输入数据乘以系数(“ beta”)以尝试预测原始结果-case的值:

handMadePredictions <- as.matrix(mm[, c("e1", "x1")]) %*% model$beta[10, ]

这是线性预测变量,我们需要将其转换回预测的概率尺度:

logistic <- function(logOdds) {
  return(exp(logOdds) / (exp(logOdds) + 1))
}

handMadePredictions <- logistic(handMadePredictions)

原始数据case是一系列交替的1和0。我们可以看到,该模型从原始输入中很好地预测了这些结果。通过检查round(handMadePredictions)或使用混淆矩阵:

table("predicted"=round(handMadePredictions), "Case/control"=mm$case)

         Case/control
predicted   0   1
        0 172  12
        1   8 168

请注意,在此玩具示例中,没有没有层次效应-x1case之间的关联相同,无论如何数据点位于set中。在这种简化的情况下,不需要条件logistic回归,定期进行logistic回归就可以了。但是当存在层效应时,我无法从clogitLasso()得出合理的预测结果,这是另一个问题。