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!
data DoJoBumps;
keep x bumps bumpsWithNoise;
pi = arcos(-1);
do n=1 to 2048;
x=(2*n-1)/4096;
link compute;
bumpsWithNoise=bumps+rannor(&random)*sqrt(5);
output;
end;
stop;
compute:
array t(11) _temporary_ (.1 .13 .15 .23 .25 .4 .44 .65 .76 .78 .81);
array b(11) _temporary_ ( 4 5 3 4 5 4.2 2.1 4.3 3.1 5.1 4.2);
array w(11) _temporary_ (.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005);
bumps=0;
do i=1 to 11;
bumps=bumps+b[i]*(1+abs((x-t[i])/w[i]))**-4;
end;
bumps=bumps*10.528514619;
return;
run;
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!
proc sgplot data=DoJoBumps;
yaxis display=(nolabel);
series x=x y=bumpsWithNoise/lineattrs=(color=black);
series x=x y=bumps/lineattrs=(color=red);
run;
1
PROC SGPLOTDATA=DoJoBumps;
2
yaxis display=(nolabel);
3
series x=x y=bumpsWithNoise/lineattrs=(color=black);
4
series x=x y=bumps/lineattrs=(color=red);
5
RUN;
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.
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."
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.
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!
proc sgplot data=out1;
yaxis display=(nolabel);
series x=x y=bumps;
series x=x y=pBumps / lineattrs=(color=red);
run;
1
PROC SGPLOTDATA=out1;
2
yaxis display=(nolabel);
3
series x=x y=bumps;
4
series x=x y=pBumps / lineattrs=(color=red);
5
RUN;
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
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.