Le script commence par générer un jeu de données nommé 'DoJoBumps'. Ce jeu de données contient une variable 'x', une variable 'bumps' calculée à partir d'une fonction mathématique complexe (la fonction 'Bumps'), et une variable 'bumpsWithNoise' qui est la variable 'bumps' à laquelle un bruit aléatoire a été ajouté. Ensuite, plusieurs graphiques sont produits avec PROC SGPLOT pour visualiser les données originales, les données bruitées, et des tentatives de lissage avec des méthodes LOESS et PBSPLINE. L'étape principale utilise PROC GLMSELECT avec un effet de spline (SPLINE) sur la variable 'x' pour modéliser la variable 'bumpsWithNoise'. La méthode de sélection des nœuds (knots) est 'multiscale'. Enfin, le résultat de la prédiction du modèle GLMSELECT est tracé et comparé à la courbe 'bumps' originale pour évaluer la qualité de l'ajustement.
Analyse des données
Type : CREATION_INTERNE
Le jeu de données 'DoJoBumps' est entièrement créé de manière algorithmique à l'intérieur de l'étape DATA. Il ne dépend d'aucune source de données externe ni de SASHELP. Les données sont générées pour simuler la fonction 'Bumps' avec du bruit ajouté.
1 Bloc de code
DATA STEP Data
Explication : Ce bloc DATA STEP crée la table 'DoJoBumps'. Il génère 2048 observations. Pour chaque observation, il calcule une valeur 'x', puis appelle une sous-routine 'compute' pour calculer la valeur 'bumps' basée sur une formule complexe impliquant 11 coefficients (la fonction Bumps de Donoho et Johnstone). Un bruit gaussien, dont la graine est fixée par la macro-variable 'random', est ajouté pour créer la variable 'bumpsWithNoise'.
Copié !
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;
Explication : Ce bloc utilise PROC SGPLOT pour superposer deux graphiques en série : la courbe des données bruitées ('bumpsWithNoise') en noir et la courbe originale non bruitée ('bumps') en rouge. Cela permet de visualiser l'effet du bruit ajouté sur la fonction originale.
Copié !
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 Bloc de code
PROC SGPLOT
Explication : Ce bloc utilise PROC SGPLOT pour comparer la courbe originale 'bumps' avec une courbe de lissage LOESS appliquée aux données bruitées 'bumpsWithNoise'. Le lissage LOESS est une méthode non paramétrique pour estimer la tendance locale et voir une première tentative de débruitage.
Explication : Ce bloc utilise PROC SGPLOT pour comparer la courbe originale 'bumps' avec une courbe de lissage par spline pénalisée (Penalized B-spline) appliquée aux données bruitées 'bumpsWithNoise'. C'est une autre méthode de lissage, souvent plus flexible que LOESS.
Explication : Ce bloc est le cœur de l'analyse. Il utilise PROC GLMSELECT pour modéliser la variable dépendante 'bumpsWithNoise'. L'instruction 'EFFECT spl = spline(x ...)' définit un effet de spline sur la variable 'x'. La méthode 'multiscale' est utilisée pour la sélection des nœuds de la spline, ce qui est efficace pour les fonctions à variations multiples. Le modèle est ensuite ajusté et les prédictions sont sauvegardées dans une table 'out1' sous la variable 'pBumps'.
Explication : Ce dernier bloc utilise PROC SGPLOT pour visualiser la qualité de l'ajustement du modèle GLMSELECT. Il superpose la courbe 'bumps' originale avec la courbe des valeurs prédites ('pBumps') par le modèle de spline. Cela montre comment le modèle a réussi à retrouver la structure sous-jacente des données malgré le bruit.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : S A S S A M P L E L I B R A R Y
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.