Este script modela el crecimiento de la población estadounidense. Primero demuestra cómo implementar el método de mínimos cuadrados reponderados iterativamente (IRLS) usando la función 'biweight' de Tukey directamente en PROC NLIN gracias a la variable especial `_weight_`. Luego compara este enfoque con el procedimiento estandarizado PROC ROBUSTREG usando un M-estimador.
Análisis de datos
Type : CREATION_INTERNE
Los datos de población (uspop) se crean directamente en el script mediante un paso DATA e instrucciones DATALINES.
1 Bloque de código
DATA STEP Data
Explicación : Creación del conjunto de datos 'uspop'. La instrucción INPUT usa ' @@' para leer múltiples observaciones en la misma línea de datos. Las variables 'year' y 'yearsq' (año al cuadrado) se generan para el modelo cuadrático.
¡Copiado!
title 'U.S. Population Growth';
data uspop;
input pop :6.3 @code_sas_json/8_SAS_Intro_ReadFile_MultiCol_@@.json;
retain year 1780;
year = year+10;
yearsq = year*year;
datalines;
3929 5308 7239 9638 12866 17069 23191 31443 39818 50155
62947 75994 91972 105710 122775 131669 151325 179323 203211
226542 248710
;
1
title 'U.S. Population Growth';
2
DATA uspop;
3
INPUT pop :6.3 @code_sas_json/8_SAS_Intro_ReadFile_MultiCol_@@.json;
title 'Beaton/Tukey Biweight Robust Regression using IRLS';
proc nlin data=uspop nohalve;
parms b0=20450.43 b1=-22.7806 b2=.0063456;
model pop=b0+b1*year+b2*year*year;
resid = pop-model.pop;
sigma = 2;
k = 4.685;
if abs(resid/sigma)<=k then _weight_=(1-(resid / (sigma*k))**2)**2;
else _weight_=0;
output out=c r=rbi;
run;
1
title 'Beaton/Tukey Biweight Robust Regression using IRLS';
2
PROC NLINDATA=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;
11
RUN;
3 Bloque de código
DATA STEP Data
¡Copiado!
data c;
set c;
sigma = 2;
k = 4.685;
if abs(rbi/sigma)<=k then _weight_=(1-(rbi /(sigma*k))**2)**2;
else _weight_=0;
run;
1
DATA 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;
7
RUN;
4 Bloque de código
PROC PRINT
¡Copiado!
proc print data=c;
run;
1
PROC PRINTDATA=c;
2
RUN;
5 Bloque de código
PROC ROBUSTREG Data
¡Copiado!
proc robustreg data=uspop method=m(scale=2);
model pop = year year*year;
output out=weights weight=w;
run;
1
PROC ROBUSTREGDATA=uspop method=m(scale=2);
2
model pop = year year*year;
3
OUTPUT out=weights weight=w;
4
RUN;
6 Bloque de código
PROC PRINT
¡Copiado!
proc print data=weights;
run;
1
PROC PRINTDATA=weights;
2
RUN;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.