I am going to use Ttanic data to show you how to get ROC curve.

Cutoff of p = some value In the following code, if you keep on changing the value of p you will get different plots. TN = True Negative FN = False Negative TP = True Positive FP = False Positive

p <- 0.5
t1$predsur <- ifelse(t1$predprob >= p, 1,0)
t1$cat <- ifelse(t1$predsur == 0 & t1$Survived == 0, "TN",
          ifelse(t1$predsur == 0 & t1$Survived == 1, "FN",
          ifelse(t1$predsur == 1 & t1$Survived == 0, "FP","TP")))
set.seed(12345)
ggplot(data = t1, aes(x = Survived, y = predprob, color = factor(cat)))+ 
geom_jitter(size = 2, alpha = 1/2) +
scale_colour_manual(values = c("red", "green","blue","purple")) +
geom_hline(yintercept = p) +
theme_bw()

What if there was a perfect classifier? I am going to cheat a little bit in this code. Rather than finding a perfect classifier (which is unlikely to exist), I’m simply going to color False Positive and False Negative points white.

set.seed(12345)
ggplot(data = t1, aes(x = Survived, y = predprob, color = factor(cat)))+ 
geom_jitter(size = 2, alpha = 1/2) +
scale_colour_manual(values = c("white", "white","blue","purple")) +
geom_hline(yintercept = p) +
theme_bw()

Plot ROC curve

plot(roc2) + abline(a = 0, b=1)
numeric(0)

Get the AUC

performance(roc1, measure = "auc")@y.values
[[1]]
[1] 0.8418274
LS0tCnRpdGxlOiAiUk9DIEN1cnZlIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpJIGFtIGdvaW5nIHRvIHVzZSBUdGFuaWMgZGF0YSB0byBzaG93IHlvdSBob3cgdG8gZ2V0IFJPQyBjdXJ2ZS4KCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCgojc2V0d2QoIkM6L1VzZXJzL3J6Yzc4Mi9Ecm9wYm94L1dvcmsvVGVhY2hpbmcvREEgNjgxMy9Db3Vyc2UgRG9jdW1lbnRzL0RhdGEiKQoKI2xvYWQoZmlsZSA9ICJ0aXRhbmljX3RyYWluLlJEYXRhIikKCmxpYnJhcnkodGl0YW5pYykKdDEgPC0gdGl0YW5pY190cmFpbgpjb2xuYW1lcyh0MSkKCgp0MSA8LSB0MVt0MSRFbWJhcmtlZCAhPSAiIixdCnQxIDwtIGNiaW5kKHQxW2MoMSw0LDY6MTEpXSxsYXBwbHkodDFbYygyLDMsNSwxMildLGZhY3RvcikpCgpibG9naXQgPC0gZ2xtKFN1cnZpdmVkIH4gU2V4ICsgUGNsYXNzICsgRW1iYXJrZWQgKyBTaWJTcCArIFBhcmNoICsgRmFyZSwKICAgICAgICAgICAgICBkYXRhID0gdDEsIGZhbWlseSA9ICJiaW5vbWlhbCIpCgp0MSRwcmVkcHJvYiA8LSBwcmVkaWN0KGJsb2dpdCwgbmV3ZGF0YSA9IHQxLCB0eXBlID0gInJlc3BvbnNlIikKaGVhZCh0MSRwcmVkcHJvYikKCmdncGxvdChkYXRhID0gdDEsIGFlcyh4ID0gU3Vydml2ZWQsIHkgPSBwcmVkcHJvYiwgY29sb3IgPSBTdXJ2aXZlZCkpICsgCmdlb21faml0dGVyKHNpemUgPSAyKSArCmdlb21fdmlvbGluKGFlcyhmaWxsID0gU3Vydml2ZWQpLGFscGhhID0gMS8xMCkgKwp0aGVtZV9idygpCmBgYAoKQ3V0b2ZmIG9mIHAgPSBzb21lIHZhbHVlCkluIHRoZSBmb2xsb3dpbmcgY29kZSwgaWYgeW91IGtlZXAgb24gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHAgeW91IHdpbGwgZ2V0IGRpZmZlcmVudCBwbG90cy4KVE4gPSBUcnVlIE5lZ2F0aXZlCkZOID0gRmFsc2UgTmVnYXRpdmUKVFAgPSBUcnVlIFBvc2l0aXZlCkZQID0gRmFsc2UgUG9zaXRpdmUKCmBgYHtyfQpwIDwtIDAuNQp0MSRwcmVkc3VyIDwtIGlmZWxzZSh0MSRwcmVkcHJvYiA+PSBwLCAxLDApCnQxJGNhdCA8LSBpZmVsc2UodDEkcHJlZHN1ciA9PSAwICYgdDEkU3Vydml2ZWQgPT0gMCwgIlROIiwKICAgICAgICAgIGlmZWxzZSh0MSRwcmVkc3VyID09IDAgJiB0MSRTdXJ2aXZlZCA9PSAxLCAiRk4iLAogICAgICAgICAgaWZlbHNlKHQxJHByZWRzdXIgPT0gMSAmIHQxJFN1cnZpdmVkID09IDAsICJGUCIsIlRQIikpKQoKc2V0LnNlZWQoMTIzNDUpCmdncGxvdChkYXRhID0gdDEsIGFlcyh4ID0gU3Vydml2ZWQsIHkgPSBwcmVkcHJvYiwgY29sb3IgPSBmYWN0b3IoY2F0KSkpKyAKZ2VvbV9qaXR0ZXIoc2l6ZSA9IDIsIGFscGhhID0gMS8yKSArCnNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gYygicmVkIiwgImdyZWVuIiwiYmx1ZSIsInB1cnBsZSIpKSArCmdlb21faGxpbmUoeWludGVyY2VwdCA9IHApICsKdGhlbWVfYncoKQoKYGBgCgpXaGF0IGlmIHRoZXJlIHdhcyBhIHBlcmZlY3QgY2xhc3NpZmllcj8gSSBhbSBnb2luZyB0byBjaGVhdCBhIGxpdHRsZSBiaXQgaW4gdGhpcyBjb2RlLiBSYXRoZXIgdGhhbiBmaW5kaW5nIGEgcGVyZmVjdCBjbGFzc2lmaWVyICh3aGljaCBpcyB1bmxpa2VseSB0byBleGlzdCksIEknbSBzaW1wbHkgZ29pbmcgdG8gY29sb3IgRmFsc2UgUG9zaXRpdmUgYW5kIEZhbHNlIE5lZ2F0aXZlIHBvaW50cyB3aGl0ZS4KCmBgYHtyfQpzZXQuc2VlZCgxMjM0NSkKZ2dwbG90KGRhdGEgPSB0MSwgYWVzKHggPSBTdXJ2aXZlZCwgeSA9IHByZWRwcm9iLCBjb2xvciA9IGZhY3RvcihjYXQpKSkrIApnZW9tX2ppdHRlcihzaXplID0gMiwgYWxwaGEgPSAxLzIpICsKc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjKCJ3aGl0ZSIsICJ3aGl0ZSIsImJsdWUiLCJwdXJwbGUiKSkgKwpnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBwKSArCnRoZW1lX2J3KCkKYGBgCgoKUGxvdCBST0MgY3VydmUKCmBgYHtyfQpsaWJyYXJ5KFJPQ1IpCgpyb2MxIDwtIHByZWRpY3Rpb24odDEkcHJlZHByb2IsdDEkU3Vydml2ZWQpCnJvYzIgPC0gcGVyZm9ybWFuY2Uocm9jMSxtZWFzdXJlID0gInRwciIsIHgubWVhc3VyZSA9ICJmcHIiKQoKcGxvdChyb2MyKSArIGFibGluZShhID0gMCwgYj0xKQoKCmBgYAoKR2V0IHRoZSBBVUMKCmBgYHtyfQpwZXJmb3JtYW5jZShyb2MxLCBtZWFzdXJlID0gImF1YyIpQHkudmFsdWVzCmBgYAoK