微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 for 循环计算多个简单逻辑回归模型的 AUC

如何解决使用 for 循环计算多个简单逻辑回归模型的 AUC

首先让我说这是我第一次发布关于堆栈溢出的问题,所以我希望我能解释清楚。

我正在尝试计算多重逻辑回归简单模型的 c-stat(曲线下面积)。

我有关于如何为一个简单模型执行此操作的代码我有一个二元响应变量(它是一个具有 0 和 1 级的因子)和 100 个预测变量,它们都是数字。在这里,我只使用了一个数字预测变量。此代码有效。

simple_model <- glm(target_variable ~ pred1,family = binomial,data = training_data)
pROC::auc(roc(training_data$target_variable,predict(simple_model,type = "response")))

现在我要做的是创建一个单独的数据框,其中一列包含预测变量的名称,第二列包含其 c 统计信息。

这是我迄今为止尝试过但没有任何成功的方法

        auc <- sapply(training_data,2,function (x) {
               temp_data <- cbind(training_data$target_variable,x)
               multiple_simple_models <- glm(target_variable ~ .,data = temp_data)
               proc::auc(roc(temp_data$target_variable,predict(multiple_simple_models,type = "response")))
})

但我收到一条错误消息:

Error in match.fun(FUN): '2' is not a function,character or symbol

解决方法

您的解决方案不远了!

正如您在上面的评论中所提出的,唯一未解决的问题是,由于“矩阵/数据框”预期问题,您无法处理代码 - 这是因为 glm() 需要一个数据框,或者至少可以强制到数据框保留列的名称。因此,您不能使用 cbind(),因为它会创建一个未命名的矩阵。

因此 - 假设您可以访问一个 target_variable 向量和一个包含 predictors 的数据框 - 我对您的代码的轻微修改将如下所示:

results <- sapply(predictors,function (p) {
     temp_data <- data.frame(p,target_variable)
     temp_model <- glm(target_variable ~ .,family = binomial,data = temp_data)
     pROC::auc(roc(target_variable,predict(temp_model,type = "response")))})

results_data <- data.frame(predictor = names(results),auc = results)

请注意,您需要额外的 results_data 行,因为 sapply() 本身会返回一个命名向量(它会尽可能自动简化其输出)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。