Publié le :
Statistique CREATION_INTERNE

Régression Robuste avec PROC NLIN (IRLS) et PROC ROBUSTREG

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce script modélise la croissance de la population américaine. Il démontre d'abord comment implémenter la méthode des moindres carrés repondérés itérativement (IRLS) en utilisant la fonction 'biweight' de Tukey directement dans PROC NLIN grâce à la variable spéciale `_weight_`. Il compare ensuite cette approche avec la procédure standardisée PROC ROBUSTREG utilisant un M-estimateur.
Analyse des données

Type : CREATION_INTERNE


Les données de population (uspop) sont créées directement dans le script via une étape DATA et des instructions DATALINES.

1 Bloc de code
DATA STEP Data
Explication :
Création du jeu de données 'uspop'. L'instruction INPUT utilise '@@' pour lire plusieurs observations sur une même ligne de données. Les variables 'year' et 'yearsq' (année au carré) sont générées pour le modèle quadratique.
Copié !
1title 'U.S. Population Growth';
2DATA uspop;
3 INPUT pop :6.3 @@;
4 retain year 1780;
5 year = year+10;
6 yearsq = year*year;
7 DATALINES;
83929 5308 7239 9638 12866 17069 23191 31443 39818 50155
962947 75994 91972 105710 122775 131669 151325 179323 203211
10226542 248710
11;
2 Bloc de code
PROC NLIN Data
Explication :
Exécution d'une régression non-linéaire. Le script implémente manuellement une régression robuste (IRLS) en définissant la variable spéciale `_weight_`. Les poids sont recalculés à chaque itération en fonction des résidus (`resid`) selon la fonction biweight de Tukey.
Copié !
1title 'Beaton/Tukey Biweight Robust Regression using IRLS';
2PROC NLIN DATA=uspop nohalve;
3 parms b0=20450.43 b1=-22.7806 b2=.0063456;
4 model pop=b0+b1*year+b2*year*year;
5 resid = pop-model.pop;
6 sigma = 2;
7 k = 4.685;
8 IF abs(resid/sigma)<=k THEN _weight_=(1-(resid / (sigma*k))**2)**2;
9 ELSE _weight_=0;
10 OUTPUT out=c r=rbi;
11RUN;
3 Bloc de code
DATA STEP Data
Explication :
Étape DATA pour recalculer ou vérifier les poids finaux basés sur les résidus (rbi) stockés dans la table de sortie de la PROC NLIN.
Copié !
1DATA c;
2 SET c;
3 sigma = 2;
4 k = 4.685;
5 IF abs(rbi/sigma)<=k THEN _weight_=(1-(rbi /(sigma*k))**2)**2;
6 ELSE _weight_=0;
7RUN;
4 Bloc de code
PROC PRINT
Explication :
Affichage des résultats de la régression manuelle (table 'c').
Copié !
1PROC PRINT DATA=c;
2RUN;
5 Bloc de code
PROC ROBUSTREG Data
Explication :
Utilisation de la procédure PROC ROBUSTREG dédiée à la régression robuste. Elle utilise ici la méthode d'estimation M. Les résultats sont stockés dans la table 'weights'.
Copié !
1PROC ROBUSTREG DATA=uspop method=m(scale=2);
2 model pop = year year*year;
3 OUTPUT out=weights weight=w;
4RUN;
6 Bloc de code
PROC PRINT
Explication :
Affichage des poids calculés par la procédure ROBUSTREG pour comparaison.
Copié !
1PROC PRINT DATA=weights;
2RUN;
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.