Analyse de régression avec transformation de données

Niveau de difficulté
Débutant
Publié le :
Le script commence par créer un jeu de données 'sales' et explore la relation entre les ventes et l'année via un graphique. Il utilise ensuite la procédure TRANSREG pour trouver une transformation de puissance optimale (Box-Cox) pour la variable de vente afin de linéariser la relation. Plusieurs appels à TRANSREG sont faits pour illustrer l'effet de différents paramètres lambda. Après transformation, une analyse de régression est menée sur les données transformées, suivie d'une analyse des résidus pour valider le modèle. Une seconde partie du script répète un processus similaire sur un jeu de données 'bloodpressure', incluant l'identification et la suppression d'une valeur aberrante via PROC SQL avant de ré-exécuter l'analyse de régression.
Analyse des données

Type : CREATION_INTERNE


Les deux jeux de données, 'sales' et 'bloodpressure', sont créés directement dans le script à l'aide d'instructions 'cards'.

1 Bloc de code
DATA STEP Data
Explication :
Crée la table 'sales' avec les ventes ('salesy') par année ('yearx') à partir de données internes.
Copié !
1DATA sales;
2 INPUT yearx salesy;
3 CARDS;
4 0 98
5 1 135
6 2 162
7 3 178
8 4 221
9 5 232
10 6 283
11 7 300
12 8 374
13 9 395
14 ;
15RUN;
2 Bloc de code
PROC PRINT
Explication :
Affiche le contenu de la table 'sales'.
Copié !
1PROC PRINT DATA=sales;
2RUN;
3 Bloc de code
PROC GPLOT
Explication :
Génère un graphique des ventes en fonction de l'année pour visualiser la relation initiale.
Copié !
1PROC GPLOT;
2 plot yearx*salesy;
3RUN;
4 Bloc de code
PROC TRANSREG Data
Explication :
Utilise PROC TRANSREG pour trouver une transformation Box-Cox optimale pour 'salesy' afin de la linéariser par rapport à 'yearx'. Le résultat de la transformation est sauvegardé dans la table 'transout'.
Copié !
1PROC TRANSREG DATA=sales ss2 details;
2 title2 'Defaults';
3 model boxcox(salesy) = identity(yearx);
4 OUTPUT out=transout residuals;
5 RUN;
5 Bloc de code
PROC TRANSREG
Explication :
Exécute PROC TRANSREG avec différentes valeurs fixes pour le paramètre lambda (0.3, 0.4, 0.6, 0.7) de la transformation Box-Cox pour explorer leur impact.
Copié !
1PROC TRANSREG DATA=sales ss2 details;
2 title2 'Several Options Demonstrated';
3 model boxcox(salesy/ lambda=.3) = identity(yearx);
4RUN;
5PROC TRANSREG DATA=sales ss2 details;
6 title2 'Several Options Demonstrated';
7 model boxcox(salesy/ lambda=.4) = identity(yearx);
8RUN;
9PROC TRANSREG DATA=sales ss2 details;
10 title2 'Several Options Demonstrated';
11 model boxcox(salesy/ lambda=.6) = identity(yearx);
12RUN;
13PROC TRANSREG DATA=sales ss2 details;
14 title2 'Several Options Demonstrated';
15 model boxcox(salesy/ lambda=.7) = identity(yearx);
16RUN;
6 Bloc de code
PROC PRINT
Explication :
Affiche le contenu de la table 'transout' qui contient les données transformées.
Copié !
1PROC PRINT DATA=transout;
2RUN;
7 Bloc de code
PROC GPLOT
Explication :
Génère un graphique de la variable de vente transformée ('tsalesy') en fonction de l'année.
Copié !
1SYMBOL1 V=circle C=blue I=r;
2TITLE 'Estimated regression line transformed data';
3PROC GPLOT DATA=transout;
4 PLOT tsalesy*yearx;
5RUN;
6QUIT;
8 Bloc de code
PROC REG Data
Explication :
Effectue une régression linéaire sur les données transformées, calcule les intervalles de confiance et de prédiction, et sauvegarde les résultats dans 'outreg'.
Copié !
1PROC REG DATA=transout;
2 model tsalesy=yearx/ cli clm;
3 OUTPUT out=outreg predicted=yhat l95=lpred u95=upred l95m=lmean
4 u95m=umean;
5RUN;
6QUIT;
9 Bloc de code
PROC GPLOT
Explication :
Trace les résidus du modèle de régression par rapport aux valeurs prédites pour évaluer l'ajustement du modèle.
Copié !
1SYMBOL1 V=circle C=blue I=r;
2TITLE 'Residuals vs. fitted values ';
3PROC GPLOT DATA=outreg;
4 PLOT rsalesy*yhat ;
5RUN;
6QUIT;
10 Bloc de code
PROC UNIVARIATE
Explication :
Analyse la distribution des résidus ('Rsalesy') pour vérifier la normalité, avec graphiques à l'appui.
Copié !
1title ' ';
2PROC UNIVARIATE DATA=transout normal plot;
3 var Rsalesy;
4RUN;
11 Bloc de code
DATA STEP Data
Explication :
Crée la table 'bloodpressure' avec la tension artérielle ('bloodpressurey') par âge ('agex') à partir de données internes.
Copié !
1DATA bloodpressure;
2 INPUT agex bloodpressurey;
3 CARDS;
4 5 63
5 8 67
6 11 74
7 7 64
8 13 75
9 12 69
10 12 90
11 6 60
12 ;
13RUN;
12 Bloc de code
PROC PRINT
Explication :
Affiche le contenu de la table 'bloodpressure'.
Copié !
1PROC PRINT DATA=bloodpressure;
2RUN;
13 Bloc de code
PROC REG Data
Explication :
Effectue une première régression linéaire de la tension artérielle en fonction de l'âge et sauvegarde les résidus dans 'outreg1'.
Copié !
1PROC REG DATA=bloodpressure;
2 model bloodpressurey=agex;
3 OUTPUT out=outreg1 r=res;
4RUN;
14 Bloc de code
PROC SQL
Explication :
Supprime une observation considérée comme une valeur aberrante (tension de 90) de la table 'bloodpressure' à l'aide de PROC SQL.
Copié !
1 
2PROC SQL;
3delete from bloodpressure where bloodpressurey=90;
4QUIT;
5 
15 Bloc de code
PROC REG Data
Explication :
Effectue une nouvelle analyse de régression sur les données nettoyées avec un niveau alpha de 0.1, génère des graphiques et sauvegarde les résultats, y compris les limites de confiance, dans 'outreg1'.
Copié !
1PROC REG alpha=0.1 plots=fit DATA=bloodpressure;
2 model bloodpressurey=agex;
3 OUTPUT out=outreg1 lcl=lcl lclm=lclm ucl=ucl uclm=uclm r=res;
4RUN;
5QUIT;
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.