Veröffentlicht am :
Statistik CREATION_INTERNE

Beispiel 3 für PROC GLMSELECT - Donoho und Johnstone Bumps-Funktion

Dieser Code ist auch verfügbar auf: English Français
Wartet auf Validierung
Der Skript beginnt mit der Generierung eines Datensatzes namens 'DoJoBumps'. Dieser Datensatz enthält eine Variable 'x', eine Variable 'bumps', die aus einer komplexen mathematischen Funktion (der Funktion 'Bumps') berechnet wird, und eine Variable 'bumpsWithNoise', die die Variable 'bumps' ist, der ein zufälliges Rauschen hinzugefügt wurde. Anschließend werden mehrere Grafiken mit PROC SGPLOT erstellt, um die Originaldaten, die verrauschten Daten und Glättungsversuche mit den Methoden LOESS und PBSPLINE zu visualisieren. Der Hauptschritt verwendet PROC GLMSELECT mit einem Spline-Effekt (SPLINE) auf der Variablen 'x', um die Variable 'bumpsWithNoise' zu modellieren. Die Methode zur Auswahl der Knoten (knots) ist 'multiscale'. Schließlich wird das Vorhersageergebnis des GLMSELECT-Modells gezeichnet und mit der ursprünglichen 'bumps'-Kurve verglichen, um die Qualität der Anpassung zu bewerten.
Datenanalyse

Type : CREATION_INTERNE


Das Dataset 'DoJoBumps' wird vollständig algorithmisch innerhalb des DATA-Schritts erstellt. Es hängt von keiner externen Datenquelle oder SASHELP ab. Die Daten werden generiert, um die Funktion 'Bumps' mit hinzugefügtem Rauschen zu simulieren.

1 Codeblock
DATA STEP Data
Erklärung :
Dieser DATA STEP-Block erstellt die Tabelle 'DoJoBumps'. Er generiert 2048 Beobachtungen. Für jede Beobachtung berechnet er einen Wert 'x' und ruft dann eine Unterroutine 'compute' auf, um den Wert 'bumps' basierend auf einer komplexen Formel mit 11 Koeffizienten (der Bumps-Funktion von Donoho und Johnstone) zu berechnen. Ein gaußsches Rauschen, dessen Startwert durch die Makrovariable 'random' festgelegt wird, wird hinzugefügt, um die Variable 'bumpsWithNoise' zu erstellen.
Kopiert!
1DATA DoJoBumps;
2 keep x bumps bumpsWithNoise;
3 
4 pi = arcos(-1);
5 
6 DO n=1 to 2048;
7 x=(2*n-1)/4096;
8 link compute;
9 bumpsWithNoise=bumps+rannor(&random)*sqrt(5);
10 OUTPUT;
11 END;
12 stop;
13 
14compute:
15 array t(11) _temporary_ (.1 .13 .15 .23 .25 .4 .44 .65 .76 .78 .81);
16 array b(11) _temporary_ ( 4 5 3 4 5 4.2 2.1 4.3 3.1 5.1 4.2);
17 array w(11) _temporary_ (.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005);
18 
19 bumps=0;
20 DO i=1 to 11;
21 bumps=bumps+b[i]*(1+abs((x-t[i])/w[i]))**-4;
22 END;
23 bumps=bumps*10.528514619;
24 return;
25RUN;
2 Codeblock
PROC SGPLOT
Erklärung :
Dieser Block verwendet PROC SGPLOT, um zwei Liniendiagramme zu überlagern: die Kurve der verrauschten Daten ('bumpsWithNoise') in Schwarz und die ursprüngliche unverrauschte Kurve ('bumps') in Rot. Dies ermöglicht die Visualisierung des Effekts des hinzugefügten Rauschens auf die Originalfunktion.
Kopiert!
1PROC SGPLOT DATA=DoJoBumps;
2 yaxis display=(nolabel);
3 series x=x y=bumpsWithNoise/lineattrs=(color=black);
4 series x=x y=bumps/lineattrs=(color=red);
5RUN;
3 Codeblock
PROC SGPLOT
Erklärung :
Dieser Block verwendet PROC SGPLOT, um die ursprüngliche "bumps"-Kurve mit einer LOESS-Glättungskurve zu vergleichen, die auf die verrauschten "bumpsWithNoise"-Daten angewendet wird. Die LOESS-Glättung ist eine nicht-parametrische Methode zur Schätzung des lokalen Trends und stellt einen ersten Versuch der Entrauschung dar.
Kopiert!
1PROC SGPLOT DATA=DoJoBumps;
2 yaxis display=(nolabel);
3 series x=x y=bumps;
4 loess x=x y=bumpsWithNoise / lineattrs=(color=red) nomarkers;
5RUN;
4 Codeblock
PROC SGPLOT
Erklärung :
"Dieser Block verwendet PROC SGPLOT, um die ursprüngliche 'bumps'-Kurve mit einer geglätteten Kurve mittels penalisiertem B-Spline (Penalized B-spline), angewendet auf die verrauschten Daten 'bumpsWithNoise', zu vergleichen. Dies ist eine weitere Glättungsmethode, die oft flexibler ist als LOESS."
Kopiert!
1PROC SGPLOT DATA=DoJoBumps;
2 yaxis display=(nolabel);
3 series x=x y=bumps;
4 pbspline x=x y=bumpsWithNoise /
5 lineattrs=(color=red) nomarkers;
6RUN;
5 Codeblock
PROC GLMSELECT
Erklärung :
Dieser Block ist das Herzstück der Analyse. Er verwendet PROC GLMSELECT, um die abhängige Variable 'bumpsWithNoise' zu modellieren. Die Anweisung 'EFFECT spl = spline(x ...)' definiert einen Spline-Effekt auf die Variable 'x'. Die 'Multiscale'-Methode wird für die Auswahl der Spline-Knoten verwendet, was für Funktionen mit mehreren Variationen effizient ist. Das Modell wird anschließend angepasst und die Vorhersagen werden in einer Tabelle 'out1' unter der Variable 'pBumps' gespeichert.
Kopiert!
1PROC GLMSELECT DATA=dojoBumps;
2 effect spl = spline(x / knotmethod=multiscale(endscale=8)
3 split details);
4 model bumpsWithNoise=spl;
5 OUTPUT out=out1 p=pBumps;
6RUN;
6 Codeblock
PROC SGPLOT
Erklärung :
Dieses letzte Block verwendet PROC SGPLOT, um die Anpassungsgüte des GLMSELECT-Modells zu visualisieren. Es überlagert die ursprüngliche 'Bumps'-Kurve mit der Kurve der vorhergesagten Werte ('pBumps') durch das Spline-Modell. Dies zeigt, wie gut das Modell die zugrunde liegende Struktur der Daten trotz des Rauschens wiederherstellen konnte.
Kopiert!
1PROC SGPLOT DATA=out1;
2 yaxis display=(nolabel);
3 series x=x y=bumps;
4 series x=x y=pBumps / lineattrs=(color=red);
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