使用for循环计算多个简单逻辑回归模型的AUC
Calculating AUC for multiple simple logistic regression models using a for loop
首先让我说这是我第一次发布有关堆栈溢出的问题,所以我希望我解释得很好。
我正在尝试计算多个逻辑回归简单模型的 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 stat。
这是我迄今为止尝试过但没有成功的方法:
auc <- sapply(training_data, 2, function (x) {
temp_data <- cbind(training_data$target_variable, x)
multiple_simple_models <- glm(target_variable ~ ., family = binomial, 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
您的解决方案已经不远了!
正如您在上面的评论中提出的,唯一未解决的问题是由于 'matrix / data frame' 预期问题,您无法处理代码 - 这是因为 glm()
需要一个数据框,或者至少可以将某些东西强制转换为数据框 and 并保留列的名称。因此,您不能使用 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()
本身是一个 returns 命名向量(它会尽可能自动简化其输出)
首先让我说这是我第一次发布有关堆栈溢出的问题,所以我希望我解释得很好。
我正在尝试计算多个逻辑回归简单模型的 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 stat。
这是我迄今为止尝试过但没有成功的方法:
auc <- sapply(training_data, 2, function (x) {
temp_data <- cbind(training_data$target_variable, x)
multiple_simple_models <- glm(target_variable ~ ., family = binomial, 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
您的解决方案已经不远了!
正如您在上面的评论中提出的,唯一未解决的问题是由于 'matrix / data frame' 预期问题,您无法处理代码 - 这是因为 glm()
需要一个数据框,或者至少可以将某些东西强制转换为数据框 and 并保留列的名称。因此,您不能使用 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()
本身是一个 returns 命名向量(它会尽可能自动简化其输出)