Publié le :
Statistique CREATION_INTERNE

Exemple 3 pour PROC GLMSELECT - Fonction Bumps de Donoho et Johnstone

Ce code est également disponible en : Deutsch English
En attente de validation
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é !
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 Bloc de code
PROC SGPLOT
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é !
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 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.
Copié !
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 Bloc de code
PROC SGPLOT
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.
Copié !
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 Bloc de code
PROC GLMSELECT
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'.
Copié !
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 Bloc de code
PROC SGPLOT
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é !
1PROC SGPLOT DATA=out1;
2 yaxis display=(nolabel);
3 series x=x y=bumps;
4 series x=x y=pBumps / lineattrs=(color=red);
5RUN;
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