Veröffentlicht am :
Statistik CREATION_INTERNE

Vergleich von Regressionsmodellen mit PROC GLM und Makros

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Skript beginnt mit der Erstellung eines Datensatzes 'comp2010' aus Online-Daten (datalines/cards), wobei zusätzliche Variablen berechnet werden. Anschließend wird ein Makro `%hw6problem1` definiert, das das Verfahren `PROC GLM` zur Anpassung eines linearen Regressionsmodells kapselt. Ein zweites Makro, `%hw6problem2`, verwendet das erste Makro, um zwei Modelle (ein vollständiges und ein reduziertes) anzupassen, kombiniert deren Ausgabestatistiken und berechnet manuell einen F-Test, um die beiden Modelle zu vergleichen. Schließlich führt das Skript diesen Modellvergleich zweimal mit unterschiedlichen Konfigurationen aus und generiert einen PDF-Bericht.
Datenanalyse

Type : CREATION_INTERNE


Der Datensatz 'comp2010' wird direkt im Code mit einem DATA-Schritt und einer 'cards'-Anweisung für die Dateneingabe erstellt.

1 Codeblock
ODS
Erklärung :
Öffnet ein ODS-Ziel, um eine Ausgabedatei im PDF-Format zu generieren.
Kopiert!
1ods pdf file="HW6NickLipanovich.pdf";
2 Codeblock
DATA STEP Data
Erklärung :
Erstellt die Tabelle 'comp2010'. Liest die drei Variablen 'winper', 'score' und 'save' aus den Inline-Daten (cards) und berechnet drei zusätzliche Variablen: 'save2', 'scoresave' und 'differential'.
Kopiert!
1DATA comp2010;
2INPUT winper score save;
3 save2=save*save;
4 scoresave = score+save;
5 differential = 100*(save-(1-score));
6CARDS;
70.661016949 0.409090909 0.706730769
80.631578947 0.369158879 0.720379147
90.571428571 0.317596567 0.729613734
100.593220339 0.352040816 0.712871287
110.615384615 0.365714286 0.729885057
120.596153846 0.359605911 0.694581281
130.517241379 0.339622642 0.690821256
140.576923077 0.340909091 0.714285714
150.568627451 0.365979381 0.680412371
160.5625 0.388571429 0.649122807
170.519230769 0.349726776 0.650793651
180.465517241 0.256281407 0.705882353
190.446428571 0.293532338 0.668367347
200.568181818 0.404580153 0.65942029
210.510638298 0.315068493 0.68627451
220.436363636 0.308080808 0.663212435
230.442307692 0.337423313 0.62962963
240.5 0.283950617 0.707006369
250.55 0.324675325 0.70625
260.44 0.345945946 0.60989011
270.456521739 0.365853659 0.628930818
280.416666667 0.259259259 0.680851064
290.434782609 0.305389222 0.650887574
300.434782609 0.337423313 0.625
310.358490566 0.234972678 0.653631285
320.386363636 0.309859155 0.582733813
330.457142857 0.345132743 0.617391304
340.365853659 0.311258278 0.623287671
350.365853659 0.27480916 0.603053435
360.378378378 0.307692308 0.580357143
37;
38RUN;
3 Codeblock
PROC PRINT
Erklärung :
Zeigt den Inhalt der Tabelle 'comp2010' in der Ausgabe an.
Kopiert!
1PROC PRINT DATA=comp2010;
2RUN;
3QUIT;
4 Codeblock
MACRO
Erklärung :
Definiert ein Makro `%hw6problem1`, das das GLM-Verfahren (General Linear Model) ausführt. Das Makro passt ein Modell ('model') für eine abhängige Variable ('outcome') basierend auf Prädiktoren ('modelx') an. Es kann optional eine Klassifikationsvariable ('classx') enthalten. Die Modellstatistiken werden in einer Ausgabetabelle ('myoutstat') gespeichert.
Kopiert!
1%macro hw6problem1 (outcome,classx,modelx,myoutstat,indata);
2 %IF &classx=' ' %THEN
3 %DO;
4 PROC GLM noprint DATA=&indata outstat=&myoutstat;
5 model &outcome = &modelx;
6 RUN;
7 QUIT;
8 %END;
9 %ELSE
10 %DO;
11 PROC GLM noprint DATA=&indata outstat=&myoutstat;
12 class &classx;
13 model &outcome = &modelx;
14 RUN;
15 QUIT;
16 %END;
17 
18%mend;
5 Codeblock
MACRO Data
Erklärung :
Definiert ein Makro `%hw6problem2` zum Vergleich von zwei Modellen (ein vollständiges und ein reduziertes). Es ruft das Makro `%hw6problem1` zweimal auf, um jedes Modell anzupassen. Anschließend kombiniert es über DATA-Schritte die Ergebnisse, berechnet die F-Teststatistik und den zugehörigen p-Wert, um zu beurteilen, ob das vollständige Modell signifikant besser ist als das reduzierte Modell. Das Ergebnis des F-Tests wird anschließend angezeigt.
Kopiert!
1%macro hw6problem2 (outcome,classx1,classx2,modelx1,modelx2,myoutstat1,myoutstat2,indata);
2 %hw6problem1 (&outcome,&classx1,&modelx1,&myoutstat1,&indata);
3 %hw6problem1 (&outcome,&classx2,&modelx2,&myoutstat2,&indata);
4 DATA fullvsreduced;
5 SET &myoutstat1 &myoutstat2;
6 IF _type_="ERROR";
7 RUN;
8 PROC SORT DATA=fullvsreduced;
9 BY df;
10 RUN;
11 DATA fullvsreduced2;
12 SET fullvsreduced;
13 fullss=lag(ss);
14 fulldf=lag(df);
15 num = (ss-fullss)/(df-fulldf);
16 den = fullss/fulldf;
17 f = num/den;
18 pvalue=1-cdf('f', f, df-fulldf, fulldf);
19 keep f pvalue;
20 IF _n_=1 THEN delete;
21 RUN;
22 PROC PRINT DATA=fullvsreduced2;
23 RUN;
24%mend;
6 Codeblock
MACRO CALL
Erklärung :
Ruft das Modellvergleichsmakro `%hw6problem2` zweimal auf. Der erste Aufruf vergleicht ein Modell mit 'score' und 'save' als Prädiktoren mit einem einfacheren Modell mit 'differential'. Der zweite Aufruf kehrt die Reihenfolge des Vergleichs um. Die Ergebnisse werden in die Tabellen 'ssout' und 'dout' geschrieben.
Kopiert!
1%hw6problem2(winper,,,score save,differential,ssout,dout,comp2010);
2%hw6problem2(winper,,,differential,score save,dout,ssout,comp2010);
3 
7 Codeblock
ODS
Erklärung :
Schließt das ODS-PDF-Ziel und finalisiert somit die Dateierstellung.
Kopiert!
1ods pdf close;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.