Publicado el :
Estadística CREATION_INTERNE

Comparación de modelos de regresión con PROC GLM y macros

Este código también está disponible en: Deutsch English Français
En espera de validación
El script comienza creando un conjunto de datos 'comp2010' a partir de datos en línea (datalines/cards), calculando variables adicionales. Luego, define una macro `%hw6problem1` que encapsula el procedimiento `PROC GLM` para ajustar un modelo de regresión lineal. Una segunda macro, `%hw6problem2`, utiliza la primera para ajustar dos modelos (uno completo y uno reducido), combina sus estadísticas de salida y calcula manualmente una prueba F para comparar los dos modelos. Finalmente, el script ejecuta esta comparación de modelos dos veces con diferentes configuraciones y genera un informe PDF.
Análisis de datos

Type : CREATION_INTERNE


El conjunto de datos 'comp2010' se crea directamente en el código utilizando un paso DATA con una instrucción 'cards' para la entrada de datos.

1 Bloque de código
ODS
Explicación :
Abre un destino ODS para generar un archivo de salida en formato PDF.
¡Copiado!
1ods pdf file="HW6NickLipanovich.pdf";
2 Bloque de código
DATA STEP Data
Explicación :
Crea la tabla 'comp2010'. Lee las tres variables 'winper', 'score' y 'save' de los datos en línea (cards) y calcula tres variables adicionales: 'save2', 'scoresave' y 'differential'.
¡Copiado!
1DATA comp2010;
2INPUT winper score save;
3 save2=save*save;
4 scoresave = score+save;
5 differential = 100*(save-(1-score));
6CARDS;
70.661016949 0.409090909 0.706730769
80.631578947 0.369158879 0.720379147
90.571428571 0.317596567 0.729613734
100.593220339 0.352040816 0.712871287
110.615384615 0.365714286 0.729885057
120.596153846 0.359605911 0.694581281
130.517241379 0.339622642 0.690821256
140.576923077 0.340909091 0.714285714
150.568627451 0.365979381 0.680412371
160.5625 0.388571429 0.649122807
170.519230769 0.349726776 0.650793651
180.465517241 0.256281407 0.705882353
190.446428571 0.293532338 0.668367347
200.568181818 0.404580153 0.65942029
210.510638298 0.315068493 0.68627451
220.436363636 0.308080808 0.663212435
230.442307692 0.337423313 0.62962963
240.5 0.283950617 0.707006369
250.55 0.324675325 0.70625
260.44 0.345945946 0.60989011
270.456521739 0.365853659 0.628930818
280.416666667 0.259259259 0.680851064
290.434782609 0.305389222 0.650887574
300.434782609 0.337423313 0.625
310.358490566 0.234972678 0.653631285
320.386363636 0.309859155 0.582733813
330.457142857 0.345132743 0.617391304
340.365853659 0.311258278 0.623287671
350.365853659 0.27480916 0.603053435
360.378378378 0.307692308 0.580357143
37;
38RUN;
3 Bloque de código
PROC PRINT
Explicación :
Muestra el contenido de la tabla 'comp2010' en la salida de resultados.
¡Copiado!
1PROC PRINT DATA=comp2010;
2RUN;
3QUIT;
4 Bloque de código
MACRO
Explicación :
Define una macro `%hw6problem1` que ejecuta el procedimiento GLM (General Linear Model). La macro ajusta un modelo ('model') para una variable dependiente ('outcome') en función de predictores ('modelx'). Opcionalmente puede incluir una variable de clasificación ('classx'). Las estadísticas del modelo se guardan en una tabla de salida ('myoutstat').
¡Copiado!
1%macro hw6problem1 (outcome,classx,modelx,myoutstat,indata);
2 %IF &classx=' ' %THEN
3 %DO;
4 PROC GLM noprint DATA=&indata outstat=&myoutstat;
5 model &outcome = &modelx;
6 RUN;
7 QUIT;
8 %END;
9 %ELSE
10 %DO;
11 PROC GLM noprint DATA=&indata outstat=&myoutstat;
12 class &classx;
13 model &outcome = &modelx;
14 RUN;
15 QUIT;
16 %END;
17 
18%mend;
5 Bloque de código
MACRO Data
Explicación :
Define una macro `%hw6problem2` para comparar dos modelos (uno completo y uno reducido). Llama dos veces a la macro `%hw6problem1` para ajustar cada modelo. Luego, a través de pasos DATA, combina los resultados, calcula el estadístico de la prueba F y el valor p asociado para evaluar si el modelo completo es significativamente mejor que el modelo reducido. El resultado de la prueba F se muestra a continuación.
¡Copiado!
1%macro hw6problem2 (outcome,classx1,classx2,modelx1,modelx2,myoutstat1,myoutstat2,indata);
2 %hw6problem1 (&outcome,&classx1,&modelx1,&myoutstat1,&indata);
3 %hw6problem1 (&outcome,&classx2,&modelx2,&myoutstat2,&indata);
4 DATA fullvsreduced;
5 SET &myoutstat1 &myoutstat2;
6 IF _type_="ERROR";
7 RUN;
8 PROC SORT DATA=fullvsreduced;
9 BY df;
10 RUN;
11 DATA fullvsreduced2;
12 SET fullvsreduced;
13 fullss=lag(ss);
14 fulldf=lag(df);
15 num = (ss-fullss)/(df-fulldf);
16 den = fullss/fulldf;
17 f = num/den;
18 pvalue=1-cdf('f', f, df-fulldf, fulldf);
19 keep f pvalue;
20 IF _n_=1 THEN delete;
21 RUN;
22 PROC PRINT DATA=fullvsreduced2;
23 RUN;
24%mend;
6 Bloque de código
MACRO CALL
Explicación :
Llama a la macro de comparación de modelos `%hw6problem2` dos veces. La primera llamada compara un modelo con 'score' y 'save' como predictores con un modelo más simple con 'differential'. La segunda llamada invierte el orden de la comparación. Los resultados se escriben en las tablas 'ssout' y 'dout'.
¡Copiado!
1%hw6problem2(winper,,,score save,differential,ssout,dout,comp2010);
2%hw6problem2(winper,,,differential,score save,dout,ssout,comp2010);
3 
7 Bloque de código
ODS
Explicación :
Cierra el destino ODS PDF, finalizando así la creación del archivo.
¡Copiado!
1ods pdf close;
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.