Skip to content

Instantly share code, notes, and snippets.

@jsonbecker
Created October 17, 2013 19:17
Show Gist options
  • Save jsonbecker/7030622 to your computer and use it in GitHub Desktop.
Save jsonbecker/7030622 to your computer and use it in GitHub Desktop.
Quick function to calculate common statistics when evaluating a predictor of binary outcomes.
cutoff_matrix <- function(df, classifier, outcome, breaks=seq(1,0,-.01)){
results <- data.frame(cutoff=vector(mode='numeric', length=length(breaks)),
true_pos=vector(mode='numeric', length=length(breaks)),
true_neg=vector(mode='numeric', length=length(breaks)),
false_pos=vector(mode='numeric', length=length(breaks)),
false_neg=vector(mode='numeric', length=length(breaks)))
for(i in seq(1, length(breaks))){
value <- breaks[i]
j <- data.frame(table(df[[classifier]]>value, df[[outcome]]))
results[i,1] <- value
results[i,2] <- subset(j, Var1==TRUE & Var2=='Y')$Freq
results[i,3] <- subset(j, Var1==FALSE & Var2=='N')$Freq
results[i,4] <- subset(j, Var1==TRUE & Var2=='N')$Freq
results[i,5] <- subset(j, Var1==FALSE & Var2=='Y')$Freq
}
results <- mutate(results,
true_neg_rate = true_neg / (true_neg + false_neg),
true_pos_rate = true_pos / (true_pos + false_pos),
false_pos_rate = false_pos / (true_pos + false_pos),
false_neg_rate = false_neg / (true_neg + false_neg),
accuracy = (true_pos + true_neg) /
(true_pos + true_neg + false_pos + false_neg))
return(results)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment