Frage

Angesichts solcher Daten:

#Cutpoint         SN   (1-PPV)
5       0.56    0.01
7       0.78    0.19
9       0.91    0.58

Wie kann ich die ROC -Kurve mit R zeichnen, die ein ähnliches Ergebnis wie das angeschlossene erzielen? image?

Ich kenne ROCR -Paket, aber es nimmt keine solche Eingaben an.

War es hilfreich?

Lösung

Wenn Sie nur das Diagramm erstellen möchten (ohne diese dumme Interpolationspline zwischen den Punkten), zeichnen Sie einfach die Daten, die Sie auf die Standardweise geben Endpunkte der Kurve.

## 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)

Um den Code zu erklären: Der Erste plot() Call richtet die Handlungsregion ein, ohne überhaupt eine Verschwörung zu machen. Beachten Sie, dass ich das Diagramm dazu zwinge, den Bereich (0,1) in beiden Achsen abzudecken. Das par() Call sagt R, R abzubauen, die den Bereich der Daten abdecken - die Standardeinstellung erweitert sie um 4 Prozent des Bereichs auf jeder Achse.

Die nächste Zeile, with(dat, lines(....)) Zeichnet die ROC -Kurve und hier bereiten wir die Punkte bei (0,0) und (1,1) vor und fügen sie an, um die vollständige Kurve zu geben. Hier benutze ich type = "o" Um sowohl Punkte als auch Linien überpassend zu geben, werden die Punkte durch Zeichen 25 dargestellt, wodurch es mit einer Farbe, hier schwarz, gefüllt wird.

Dann füge ich den Punkten mithilfe der Punkte Etiketten hinzu text(....); das pos Das Argument wird verwendet, um das Etikett von den tatsächlichen Handlungskoordinaten wegzu positionieren. Ich nehme die Etiketten aus dem cutpoint Objekt im Datenrahmen.

Das abline() Anruf zeichnet die 1: 1 -Zeile (hier die 0, und 1 bedeuten einen Schnittpunkt von 0 und eine Steigung von 1 beziehungsweise.

Die endgültige Zeile setzt die Parameter der Plotten auf die von uns gespeicherten Standards zurück, in denen wir gespeichert sind op vor dem Plan (in der ersten Zeile).

Die resultierende Handlung sieht so aus:

enter image description here

Es ist kein genaues Faksimile und ich bevorzuge das Diagramm mit der Standardeinstellung für die Achsenbereiche (4 Prozent hinzugefügt):

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)

enter image description here

Wieder kein wahrer Faksimile, sondern eng.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top