2016-03-28 6 views
0

SAS (9.4) -Datensatz (d) enthält 3 Variablen: Y, Marker (= 0 und 1) und Gruppe (= 1 und 2). Wie man zwei ROC-Kurve auf dem gleichen Grundstück machen? Ich habe viel im Internet geschaut, aber leider die Erklärung nicht verstanden. Ich wäre sehr dankbar für die Hilfe! Also, wie setzt man hier eine Gruppenvariable? (P. S. Und AUC auch mit Konfidenzintervallen erhalten.)SAS. Wie macht man zwei ROC-Kurven (von zwei Vergleichsgruppen) auf der gleichen Kurve?

ods graphics on;

proc logistische Daten = d Plots = EFFECT Plots = ROC;

Modellmarker (Ereignis = '1') = Y;

laufen lassen;

ods Grafiken aus;

P.S. Jetzt füge ich ein Beispiel hinzu.

Y - es ist Gewicht der Person

Gruppe (= 1 und 2), wobei 1 männlich, 2 - weiblich

Marker (= 0 und 1), wobei 1 bedeutet, dass Gewichtsüberschuss und 0 bedeutet, dass Gewicht ist normal.

Ich brauche zwei ROC-Kurven (für Männer und Frauen) auf dem gleichen Grundstück zum Vergleich ihrer.

+0

Das ergibt für mich noch keinen Sinn. Ihre abhängige Variable ist Marker, wobei 1 für übergewichtig und 0 für normal steht. Ihre Prädiktorvariable Y ist Gewicht. Sie wollen also sehen, ob das Gewicht (Y) ein guter Indikator dafür ist, ob Sie übergewichtig sind (Marker)? Und sehen Sie, ob die ROC-Kurven für Männer und Frauen gleich sind? – Quentin

+0

Haben Sie die gleiche Anzahl von Männern und Frauen? – Quentin

+0

"Und sehen Sie, ob die ROC-Kurven für Männer und Frauen gleich sind?" JA! "Haben Sie die gleiche Anzahl von Männern und Frauen?" NEIN! – Beginner

Antwort

0

Sie haben zwei unabhängige Stichproben (Männer und Frauen), und wollen die ROC-Kurven von jeder Probe berechnet vergleichen . Wie ich es von http://support.sas.com/kb/45/339.html verstehe, kann SAS ROC-Kurven von unabhängigen Proben in einem PROC-Schritt nicht vergleichen. Sie müssen die Arbeit selbst erledigen.

Der Prozess ist:

  1. Run PROC LOGISTIC die ROC-Statistiken (Sensitivität/Spezifität an jedem Schnittpunkt) und AUCs mit Standardfehlern zu berechnen, für jede Probe.
  2. Erstellen Sie ein Diagramm der ROC-Statistik, die die beiden Kurven überlagert.
  3. Berechnen Sie eine Teststatistik und einen p-Wert aus den AUCs.

Unten ist mein Versuch an einem Beispiel. Ich bin nicht zuversichtlich, dass dies richtig ist, aber es ist meine Umsetzung meines Verständnisses der Informationen in der Support-Notiz. Bitte lesen Sie den Support-Hinweis.

Beispieldaten. Ich verstehe deine Daten immer noch nicht, also habe ich einige gemacht, die ich verstanden habe. Daten für 5 Frauen und 6 Männer. Jede Person hat einen Score in einem diagnostischen Test und einen Krankheitsstatus (1/0).

data have; 
    input Sex $1. Test Disease; 
    cards; 
F 10 0 
F 20 0 
F 30 1 
F 40 0 
F 50 1 
M 10 0 
M 20 1 
M 30 0 
M 40 1 
M 50 1 
M 60 1 
; 
run; 

Führen Sie PROC logistic aus und geben Sie die Statistik aus. Ich habe eine BY-Anweisung verwendet, anstatt getrennte PROC-Schritte für Männer und Frauen auszuführen.

ods output ROCassociation=AUCs(where=(ROCmodel="Test")); 
proc logistic data=have plots(only)=roc; 
    model Disease(event='1') = Test 
    /outroc=RocStats(where=(_source_="Test")) 
    ; 
    roc 'Test' Test; 
    by Sex; 
run; 
ods output close; 

Verwenden Sie SGPLOT, um die überlagerten ROC-Kurven zu plotten. Ich benutze 9.3, also muss ODS Grafikanweisung verwenden, um ein quadratisches Diagramm zu erzwingen. 9.4 eingeführt Aspekt = 1 Option zu SGPLOT. Es ist eine geradlinige Handlung, erinnert mich daran, wie sehr ich SGPLOT und GTL liebe. Ich glaube nicht, dass ich jemals zu GPLOT zurückkehren werde.

ods graphics/height=480px width=480px; 
proc sgplot data=RocStats; 
    xaxis values=(0 to 1 by 0.25) grid offsetmin=.05 offsetmax=.05; 
    yaxis values=(0 to 1 by 0.25) grid offsetmin=.05 offsetmax=.05; 
    lineparm x=0 y=0 slope=1/transparency=.7; 
    series x=_1mspec_ y=_sensit_/group=Sex; 
run; 

Berechnen Sie die Teststatistik. Der Support-Hinweis sagte, dies sei ein Test mit großen Stichproben. Die Teststatistik folgt der Chi-Quadrat-Verteilung mit 1 Freiheitsgrad.

data AUCtest(keep=AreaMale StdErrMale AreaFemale StdErrFemale ChiSq Prob); 
    set AUCs (keep=Sex Area StdErr 
      where=(Sex='M') 
      rename=(Area=AreaMale StdErr=StdErrMale) 
      ) 
    ; 
    set AUCs (keep=Sex Area StdErr 
      where=(Sex='F') 
      rename=(Area=AreaFemale StdErr=StdErrFemale) 
      ) 
    ; 
    ChiSq=(AreaMale-AreaFemale)**2/(StdErrMale**2 + StdErrFemale**2); 
    Prob=1-probChi(ChiSq,1); 
    format Prob pvalue6.; 
run; 

Noch einmal, nichts davon als Wahrheit nehmen. Benutzung auf eigene Gefahr, ich bin auch in der Lernphase.

+0

Alles funktioniert gut! Quentin, du bist sehr großzügig! Danke vielmals!!! (Ich denke, dass SAS bei der Lösung einfacher Medstat-Fragen unnötigerweise kompliziert ist.) P. S. Leider reicht mein "Ruf" nicht aus, um Ihre Antwort zu bewerten. – Beginner

+0

Froh, dass es geholfen hat. Selbst wenn du nicht genug Repräsentanten hast, um zu wählen, denke ich, dass du die Antwort immer noch akzeptieren kannst, indem du auf das Häkchen daneben klickst (was uns beide ein bisschen Rep verdient). Stimmen Sie der SAS-Entscheidung zu, ROC-Berechnungen in PROC LOGISTIC anstatt in einem separaten dedizierten PROC ROC zu platzieren, was definitiv zu Einschränkungen führt. – Quentin

0

Siehe die ROC-Anweisung und ROCCONTRAST-Anweisung. Gutes Beispiel in der SAS docs.

Sie nicht Beispieldaten gegeben hat, aber ich glaube, Sie wollen so etwas wie:

proc logistic data=d plots=EFFECT plots=ROC /nofit; 
    model marker (event='1') = Y Group; 
    roc 'Y' Y; 
    roc 'Group' Group; 
    roccontrast reference('Group')/estimate e;  
run; 
+0

Es ist nicht genau das, was ich brauche. Entschuldigung für unklare Erklärung. Nun, bitte, siehe P.S. über. – Beginner

+0

Einverstanden, das ist nicht was du willst, weil du zwei unabhängige Samples hast. Das obige würde funktionieren, wenn Sie ein Beispiel hätten und zwei Prädiktoren vergleichen wollten. Ich werde eine Antwort hinzufügen. – Quentin