【问题标题】:Get predictions from clogitLasso() model?从 clogitLasso() 模型中获取预测?
【发布时间】:2019-01-18 22:21:31
【问题描述】:

我如何从clogitLasso model 获得预测?

它会给我一系列惩罚权重,以及与之相关的协变量系数,但我接下来想做的是选择其中一个权重并使用相关模型进行预测。然后我可以使用AUC 或类似的方式评估模型。

也可以接受使用不同库的建议。

(也有可能被退回到 CrossValidated,但这并不是一个真正的理论问题......)

【问题讨论】:

  • 我们需要一个可重现的例子。见stackoverflow.com/questions/5963269/…。另外,试试glmnet 包。
  • @hmhensen -- glmnet 没有提供分层,我们需要对案例对照匹配集进行编码。

标签: r logistic-regression prediction


【解决方案1】:

clogitLasso() 没有 predict() 函数,但我想多了。您可以自己将数据与系数进行矩阵乘法。

例如:

首先我们将模拟一些数据。 360 个观察值,180 个病例/对照对。 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)

我们需要选择我们想要测试预测的惩罚权重值——这里我们将选择第 10 个,只是因为。

我们将原始输入数据乘以系数(“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数据点在。在这种简化的情况下,不需要条件逻辑回归,常规逻辑回归就可以了。但是当存在层效应时,我无法从clogitLasso() 获得合理的预测结果,这是另一个问题。

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 2016-06-19
    • 2021-01-03
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多