Veröffentlicht am :
Statistique CREATION_INTERNE

Bruchpunktmodell (Change Point Model) mit PROC MCMC

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Der Skript implementiert ein Bruchpunktmodell, um eine strukturelle Änderung in der Beziehung zwischen zwei Variablen zu identifizieren. Es beginnt mit der Erstellung eines internen Datensatzes und verwendet dann PROC MCMC, um die Parameter eines stückweisen linearen Modells zu schätzen, einschließlich der Position des Bruchpunkts 'cp'. Die Schätzergebnisse (Posteriori-Mittelwerte) werden anschließend über einen DATA _NULL_ Schritt in Makrovariablen gespeichert. Schließlich wird PROC SGPLOT zweimal verwendet: einmal zur Visualisierung der Rohdaten und ein zweites Mal, um die Daten, die geschätzten Regressionsgeraden auf beiden Seiten des Bruchpunkts und die Posteriori-Dichte der Bruchpunktposition zu überlagern.
Datenanalyse

Type : CREATION_INTERNE


Die Daten werden vollständig innerhalb des Skripts mithilfe eines DATA-Schritts mit einer DATALINES-Anweisung generiert. Es sind keine externen Daten erforderlich.

1 Codeblock
DATA STEP Data
Erklärung :
Dieser Block erstellt den Datensatz 'stagnant' aus internen Daten (Datalines). Die Option '@@' in der INPUT-Anweisung ermöglicht das Lesen mehrerer Beobachtungen aus einer einzigen Datenzeile.
Kopiert!
1title 'Change Point Model';
2DATA stagnant;
3 INPUT y x @code_sas_json/8_SAS_Intro_ReadFile_MultiCol_@@.json;
4 ind = _n_;
5 DATALINES;
6 1.12 -1.39 1.12 -1.39 0.99 -1.08 1.03 -1.08
7 0.92 -0.94 0.90 -0.80 0.81 -0.63 0.83 -0.63
8 0.65 -0.25 0.67 -0.25 0.60 -0.12 0.59 -0.12
9 0.51 0.01 0.44 0.11 0.43 0.11 0.43 0.11
10 0.33 0.25 0.30 0.25 0.25 0.34 0.24 0.34
11 0.13 0.44 -0.01 0.59 -0.13 0.70 -0.14 0.70
12-0.30 0.85 -0.33 0.85 -0.46 0.99 -0.43 0.99
13-0.65 1.19
14;
15RUN;
2 Codeblock
PROC SGPLOT
Erklärung :
Anfängliche Visualisierung der Rohdaten als Punktwolke, um die Beziehung zwischen x und y zu untersuchen.
Kopiert!
1 
2PROC SGPLOT
3DATA=stagnant;
4scatter x=x y=y;
5RUN;
6 
3 Codeblock
PROC MCMC
Erklärung :
Kern der Analyse. PROC MCMC wird verwendet, um ein bayesianisches Modell anzupassen. Der Code definiert die Parameter (alpha, cp, beta1, beta2, s2), ihre A-priori-Verteilungen und das lineare Modell, das besagt, dass sich die Steigung (beta) in Abhängigkeit von der Position von x relativ zum Bruchpunkt 'cp' ändert. Die Prozedur generiert Stichproben aus der A-posteriori-Verteilung der Parameter.
Kopiert!
1PROC MCMC DATA=stagnant outpost=postout seed=24860 ntu=1000
2 nmc=20000;
3 ods select PostSumInt;
4 ods OUTPUT PostSumInt=ds;
5 
6 array beta[2];
7 parms alpha cp beta1 beta2;
8 parms s2;
9 
10 prior cp ~ unif(-1.3, 1.1);
11 prior s2 ~ uniform(0, 5);
12 prior alpha beta: ~ normal(0, v = 1e6);
13 
14 j = 1 + (x >= cp);
15 mu = alpha + beta[j] * (x - cp);
16 model y ~ normal(mu, var=s2);
17RUN;
4 Codeblock
DATA STEP
Erklärung :
Dieser _NULL_ DATA-Schritt (erstellt keine Tabelle) liest die von PROC MCMC berechneten A-posteriori-Mittelwerte (gespeichert in der Tabelle 'ds') und weist sie Makrovariablen (z.B. &cp, &beta1, &beta2) zur späteren Verwendung zu.
Kopiert!
1DATA _null_;
2 SET ds;
3 call symputx(parameter, mean);
4RUN;
5 Codeblock
DATA STEP Data
Erklärung :
Erstellen Sie einen Datensatz 'b', um die Regressionslinien des angepassten Modells zu zeichnen. Er verwendet die Makrovariablen (&cp, &alpha, &beta1, &beta2), um die vorhergesagten Werte von y1 zu berechnen.
Kopiert!
1DATA b;
2 missing A;
3 INPUT x1 @code_sas_json/8_SAS_Intro_ReadFile_MultiCol_@@.json;
4 IF x1 eq .A THEN x1 = &cp;
5 IF _n_ <= 2 THEN y1 = &alpha + &beta1 * (x1 - &cp);
6 ELSE y1 = &alpha + &beta2 * (x1 - &cp);
7 DATALINES;
8 -1.5 A 1.2
9;
10RUN;
6 Codeblock
PROC KDE
Erklärung :
Wenden Sie das KDE-Verfahren (Kernel-Dichteschätzung) auf die MCMC-Ausgabe an, um die a-posteriori-Wahrscheinlichkeitsverteilung des Parameters 'cp' (den Bruchpunkt) zu schätzen.
Kopiert!
1 
2PROC KDE
3DATA=postout;
4univar cp / out=m1 (drop=count);
5RUN;
6 
7 Codeblock
DATA STEP Data
Erklärung :
Dieser Block passt den von PROC KDE berechneten Dichtewert an (skaliert und verschiebt ihn), damit er lesbar auf dem endgültigen Diagramm überlagert werden kann.
Kopiert!
1DATA m1;
2 SET m1;
3 density = (density / 25) - 0.653;
4RUN;
8 Codeblock
DATA STEP Data
Erklärung :
Kombiniere die Originaldaten ('stagnant'), die Linien des angepassten Modells ('b') und die Dichtedaten des Bruchpunkts ('m1') zu einem einzigen Datensatz für die finale Grafik.
Kopiert!
1DATA all;
2 SET stagnant b m1;
3RUN;
9 Codeblock
PROC SGPLOT
Erklärung :
Erstelle die vollständige finale Grafik, die überlagert: die ursprüngliche Punktwolke, die beiden Geradensegmente des Bruchpunktmodells und die Dichtekurve der A-posteriori-Verteilung des Parameters 'cp'.
Kopiert!
1PROC SGPLOT DATA=all noautolegend;
2 scatter x=x y=y;
3 series x=x1 y=y1 / lineattrs = graphdata2;
4 series x=value y=density / lineattrs = graphdata1;
5RUN;
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.
Urheberrechtsinformationen : S A S S A M P L E L I B R A R Y