使用 pROC 包发布计算 AUC
Issue computing AUC with pROC package
我正在尝试使用调用 R 中的 pROC 包的函数来计算许多不同结果的曲线下面积。
# Function used to compute area under the curve
proc_auc <- function(outcome_var, predictor_var) {
pROC::auc(outcome_var, predictor_var)}
为此,我打算在向量中引用结果名称(如下所示)。
# Create a vector of outcome names
outcome <- c('outcome_1', 'outcome_2')
但是,我在定义要输入到该函数中的变量时遇到问题。当我这样做时,我会生成错误:“roc.default(响应、预测变量、auc = TRUE,...)中的错误:'response' 必须有两个级别”。但是,我不知道为什么,因为我认为我只有两个级别...
如果有人能帮助我,我会很高兴!
这是 R 中鸢尾花数据集的可重现代码。
library(pROC)
library(datasets)
library(dplyr)
# Use iris dataset to generate binary variables needed for function
df <- iris %>% dplyr::mutate(outcome_1 = as.numeric(ntile(Sepal.Length, 4)==4),
outcome_2 = as.numeric(ntile(Petal.Length, 4)==4))%>%
dplyr::rename(predictor_1 = Petal.Width)
# Inspect binary outcome variables
df %>% group_by(outcome_1) %>% summarise(n = n()) %>% mutate(Freq = n/sum(n))
df %>% group_by(outcome_2) %>% summarise(n = n()) %>% mutate(Freq = n/sum(n))
# Function used to compute area under the curve
proc_auc <- function(outcome_var, predictor_var) {
pROC::auc(outcome_var, predictor_var)}
# Create a vector of outcome names
outcome <- c('outcome_1', 'outcome_2')
# Define variables to go into function
outcome_var <- df %>% dplyr::select(outcome[[1]])
predictor_var <- df %>% dplyr::select(predictor_1)
# Use function - first line works but not last line!
proc_auc(df$outcome_1, df$predictor_1)
proc_auc(outcome_var, predictor_var)
outcome_var
和 predictor_var
是具有一列的数据框,这意味着它们不能直接用作 auc
函数中的参数。
只需指定列名即可。
proc_auc(outcome_var$outcome_1, predictor_var$predictor_1)
您必须熟悉 dplyr 的 non-standard evaluation,这使得编程变得非常困难。特别是,您需要意识到传递变量名是一种 间接 ,并且有一种特殊的语法。
如果你想继续使用管道/非标准评估,你可以使用 roc_
函数,它遵循以前的函数命名约定,将变量名作为输入而不是实际的列名。
proc_auc2 <- function(data, outcome_var, predictor_var) {
pROC::auc(pROC::roc_(data, outcome_var, predictor_var))
}
此时您可以将实际的列名传递给这个新函数:
proc_auc2(df, outcome[[1]], "predictor_1")
# or equivalently:
df %>% proc_auc2(outcome[[1]], "predictor_1")
也就是说,对于大多数用例,您可能希望遵循@druskacik 的回答并使用标准 R 评估。
我正在尝试使用调用 R 中的 pROC 包的函数来计算许多不同结果的曲线下面积。
# Function used to compute area under the curve
proc_auc <- function(outcome_var, predictor_var) {
pROC::auc(outcome_var, predictor_var)}
为此,我打算在向量中引用结果名称(如下所示)。
# Create a vector of outcome names
outcome <- c('outcome_1', 'outcome_2')
但是,我在定义要输入到该函数中的变量时遇到问题。当我这样做时,我会生成错误:“roc.default(响应、预测变量、auc = TRUE,...)中的错误:'response' 必须有两个级别”。但是,我不知道为什么,因为我认为我只有两个级别...
如果有人能帮助我,我会很高兴!
这是 R 中鸢尾花数据集的可重现代码。
library(pROC)
library(datasets)
library(dplyr)
# Use iris dataset to generate binary variables needed for function
df <- iris %>% dplyr::mutate(outcome_1 = as.numeric(ntile(Sepal.Length, 4)==4),
outcome_2 = as.numeric(ntile(Petal.Length, 4)==4))%>%
dplyr::rename(predictor_1 = Petal.Width)
# Inspect binary outcome variables
df %>% group_by(outcome_1) %>% summarise(n = n()) %>% mutate(Freq = n/sum(n))
df %>% group_by(outcome_2) %>% summarise(n = n()) %>% mutate(Freq = n/sum(n))
# Function used to compute area under the curve
proc_auc <- function(outcome_var, predictor_var) {
pROC::auc(outcome_var, predictor_var)}
# Create a vector of outcome names
outcome <- c('outcome_1', 'outcome_2')
# Define variables to go into function
outcome_var <- df %>% dplyr::select(outcome[[1]])
predictor_var <- df %>% dplyr::select(predictor_1)
# Use function - first line works but not last line!
proc_auc(df$outcome_1, df$predictor_1)
proc_auc(outcome_var, predictor_var)
outcome_var
和 predictor_var
是具有一列的数据框,这意味着它们不能直接用作 auc
函数中的参数。
只需指定列名即可。
proc_auc(outcome_var$outcome_1, predictor_var$predictor_1)
您必须熟悉 dplyr 的 non-standard evaluation,这使得编程变得非常困难。特别是,您需要意识到传递变量名是一种 间接 ,并且有一种特殊的语法。
如果你想继续使用管道/非标准评估,你可以使用 roc_
函数,它遵循以前的函数命名约定,将变量名作为输入而不是实际的列名。
proc_auc2 <- function(data, outcome_var, predictor_var) {
pROC::auc(pROC::roc_(data, outcome_var, predictor_var))
}
此时您可以将实际的列名传递给这个新函数:
proc_auc2(df, outcome[[1]], "predictor_1")
# or equivalently:
df %>% proc_auc2(outcome[[1]], "predictor_1")
也就是说,对于大多数用例,您可能希望遵循@druskacik 的回答并使用标准 R 评估。