Comment Tracer la courbe ROC en R avec seulement connu SN / PPV / informations Cutoff
Question
Compte tenu de ces données:
#Cutpoint SN (1-PPV)
5 0.56 0.01
7 0.78 0.19
9 0.91 0.58
courbe Comment puis-je tracer ROC avec R qui produisent des résultats similaires comme attaché ?
Je sais package ROCR mais il ne prend pas une telle entrée.
La solution
Si vous voulez juste créer l'intrigue (sans que spline d'interpolation stupide entre les points), puis tracer uniquement les données que vous donnez de la manière standard, préfixer un point (0,0) et un à annexant (1,1) pour donner les points d'extrémité de la courbe.
## your data with different labels
dat <- data.frame(cutpoint = c(5, 7, 9),
TPR = c(0.56, 0.78, 0.91),
FPR = c(0.01, 0.19, 0.58))
## plot version 1
op <- par(xaxs = "i", yaxs = "i")
plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)
par(op)
Pour expliquer le code: Les premiers jeux d'appel de la région plot()
jusqu'à comploter, sans faire un tracé du tout. Notez que je force la parcelle pour couvrir la plage (0,1) dans les deux axes. L'appel par()
dit R à des axes de tracé qui couvrent la plage des données -. La valeur par défaut les étend de 4 pour cent de la gamme sur chaque axe
La ligne suivante, with(dat, lines(....))
dessine la courbe ROC et ici nous et ajouter les PREPEND points à (0,0) et (1,1) pour donner la courbe pleine. Ici, j'utilise type = "o"
pour donner des points et des lignes overplotted, les points sont représentés par le caractère 25 qui lui permet d'être rempli d'une couleur, ici noir.
Puis-je ajouter des étiquettes aux points à l'aide text(....)
; l'argument pos
est utilisé pour positionner l'étiquette à une distance à partir des coordonnées de tracé réelles. Je prends les étiquettes à partir de l'objet cutpoint
dans la trame de données.
L'appel abline()
tire le 1:. 1 ligne (ici la 0
, et 1
signifie une interception de 0
et une pente de 1
respectivement
La dernière ligne remet à zéro les paramètres complotant aux valeurs par défaut, nous enregistré dans op
avant de traçage (dans la première ligne).
Les intrigue résultant ressemble à ceci:
Il est pas un fac-similé exact et je préfère le tracé en utilisant la valeur par défaut pour les plages de l'axe (ajout de 4 pour cent):
plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)
Encore une fois, pas un vrai fac-similé mais proche.