【发布时间】:2021-06-18 11:59:29
【问题描述】:
首先让我说这是我第一次发布有关堆栈溢出的问题,所以我希望我能解释清楚。
我正在尝试计算多个逻辑回归简单模型的 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
【问题讨论】:
-
嗨,您的意思是使用
apply(而不是sapply)吗? -
我将 'sapply' 替换为 'apply' 但现在我收到另一个错误,显示为 'error in model.frame.default(formula = target_variable ~ . , data = temp_data, : 'data' must be一个data.frame,而不是一个矩阵或数组'
-
当您使用
sapply()时,第二个参数应该始终是函数。我想,正如上面的海报所示,您可能希望改用apply()。注意:我刚刚在上面看到了您的回复。会看看 -
然后我看到两个选项: -
apply不接受data.frame,但它接受矩阵。 (正如错误消息告诉我们的那样)。所以apply(as.matrix(training_data), 2, function (x) {工作的机会很大。 - 另一种选择是使用sapply并将您的 data.frame 转换为带有sapply(split(training_data,cols(training_data), function(x) {...的向量列表 -
我自己好像搞糊涂了。 multiple_simple_models 是否应该有 data = 或 temp_data 的训练数据
标签: r for-loop statistics apply proc-r-package