Publicado el :
Estadística CREATION_INTERNE

Ejemplo 18 de documentación para PROC MI

Este código también está disponible en: Deutsch Français
En espera de validación
El objetivo principal de este script es demostrar el uso de PROC MI en un escenario donde se supone que los datos faltantes son MNAR. Comienza con la creación de un conjunto de datos sintético 'Mono3' que incluye las variables 'Trt', 'Y0' e 'Y1', donde 'Y1' contiene valores faltantes introducidos intencionalmente. Luego, se utiliza PROC IML para simular parámetros de desplazamiento específicos para dos grupos ('Trt=0' y 'Trt=1'), que se almacenan en el conjunto de datos 'parm1'. Estos parámetros son cruciales para el ajuste MNAR en PROC MI. Finalmente, se invoca PROC MI con la opción `monotone reg` para la imputación por regresión y la opción `mnar adjust` para aplicar los desplazamientos simulados, produciendo un conjunto de datos imputado 'outex18'. Se incluyen pasos de PROC PRINT para visualizar los datos generados, los parámetros de desplazamiento y las observaciones imputadas.
Análisis de datos

Type : CREATION_INTERNE


El conjunto de datos 'Mono3' se crea directamente en el script a través de un paso DATA, utilizando las funciones `rannor` (números aleatorios normales) y `ranuni` (números aleatorios uniformes) para simular observaciones e introducir valores faltantes de manera controlada. El conjunto de datos 'parm1', que contiene los parámetros de desplazamiento para el ajuste MNAR, también se genera internamente mediante PROC IML simulando variables normales bivariadas.

1 Bloque de código
DATA STEP Data
Explicación :
Este bloque de código crea un conjunto de datos SAS llamado 'Mono3'. Simula datos para dos grupos de tratamiento (Trt=0, Trt=1). Las variables 'Y0' e 'Y1' se generan con un componente aleatorio normal (`rannor`). Los valores faltantes se introducen aleatoriamente (con una probabilidad del 30%) en la variable 'Y1' utilizando la función `ranuni`. Los bucles `do j=1 to 5` y `do j=1 to 45` permiten crear tamaños de muestra diferentes para las observaciones iniciales y las siguientes, simulando potencialmente un estudio con desequilibrio de muestreo o una fase piloto seguida de una fase principal. La variable temporal 'j' se elimina antes de guardar el conjunto de datos.
¡Copiado!
1DATA Mono3;
2 DO Trt=0 to 1;
3 DO j=1 to 5;
4 y0=10 + rannor(999);
5 y1= y0 + 0.9*Trt + rannor(999);
6 IF (ranuni(999) < 0.3) THEN y1=.;
7 OUTPUT;
8 END; END;
9 DO Trt=0 to 1;
10 DO j=1 to 45;
11 y0=10 + rannor(999);
12 y1= y0 + 0.9*Trt + rannor(999);
13 IF (ranuni(999) < 0.3) THEN y1=.;
14 OUTPUT;
15 END; END;
16 drop j;
17RUN;
2 Bloque de código
PROC PRINT
Explicación :
Este bloque utiliza el procedimiento `PROC PRINT` para mostrar las primeras 10 observaciones del conjunto de datos 'Mono3'. Esto permite una verificación rápida de la estructura de los datos generados, incluida la presencia de valores faltantes en 'Y1'. Solo se muestran las variables 'Trt', 'Y0' e 'Y1'.
¡Copiado!
1PROC PRINT DATA=mono3(obs=10);
2 var Trt Y0 Y1;
3 title 'First 10 Obs in the Trial Data';
4RUN;
3 Bloque de código
PROC IML Data
Explicación :
Este bloque utiliza el lenguaje de matriz interactivo (IML) para simular los parámetros de desplazamiento necesarios para el ajuste MNAR en `PROC MI`. Genera 10 (nimpute) observaciones de variables normales bivariadas ('d') con medias y una matriz de covarianza especificadas. Estos valores se combinan luego con un identificador de imputación (`impu`) para formar la matriz `delta`. Finalmente, `delta` se guarda en el conjunto de datos SAS 'parm1', que contendrá las columnas '_Imputation_', 'Shift_C' (desplazamiento para el grupo de control, Trt=0) y 'Shift_T' (desplazamiento para el grupo de tratamiento, Trt=1). Estos valores representan los ajustes que se aplicarán a la distribución de los valores observados para la imputación.
¡Copiado!
1PROC IML;
2 
3 nimpute= 10;
4 call randseed( 15323);
5 mean= { -0.5 -1};
6 cov= { 0.01 0.001 , 0.001 0.01};
7 
8 /*---- Simulate nimpute bivariate normal variates ----*/
9 d= randnormal( nimpute, mean, cov);
10 
11 impu= j(nimpute, 1, 0);
12 DO j=1 to nimpute; impu[j,]= j; END;
13 delta= impu || d;
14 
15 /*--- Output shift parameters for groups ----*/
16 create parm1 from delta[colname={_Imputation_ Shift_C Shift_T}];
17 append from delta;
18QUIT;
4 Bloque de código
PROC PRINT
Explicación :
Este bloque utiliza `PROC PRINT` para mostrar el contenido completo del conjunto de datos 'parm1'. Este conjunto de datos contiene los parámetros de desplazamiento (`Shift_C`, `Shift_T`) simulados por PROC IML para cada imputación (`_Imputation_`). La visualización de estos parámetros permite verificar los valores que serán utilizados por `PROC MI` para ajustar las distribuciones durante la imputación MNAR.
¡Copiado!
1PROC PRINT DATA=parm1;
2 var _Imputation_ Shift_C Shift_T;
3 title 'Shift Parameters for Imputations';
4RUN;
5 Bloque de código
PROC MI Data
Explicación :
Este bloque es el núcleo del análisis, utilizando el procedimiento `PROC MI` para realizar la imputación múltiple. El conjunto de datos de entrada es 'Mono3', y el conjunto de datos de salida ('outex18') contendrá 10 versiones imputadas del conjunto de datos original. `seed` asegura la reproducibilidad. La instrucción `class Trt;` declara 'Trt' como variable categórica. `monotone reg;` especifica que la imputación se realizará utilizando un método de regresión monótona. La opción `mnar adjust` es crucial aquí: indica un ajuste para los datos faltantes no aleatorios para la variable 'Y1'. Se especifican dos ajustes: uno para el grupo 'Trt=0' usando los valores 'shift_c' del conjunto de datos 'parm1', y otro para el grupo 'Trt=1' usando los valores 'shift_t' de 'parm1'. Esto permite modelar diferentes mecanismos de datos faltantes para cada grupo. Las variables 'Trt', 'Y0' e 'Y1' se incluyen en el proceso de imputación.
¡Copiado!
1PROC MI DATA=Mono3 seed=1423741 nimpute=10 out=outex18;
2 class Trt;
3 monotone reg;
4 mnar adjust( y1 / adjustobs=(Trt='0') parms(shift=shift_c)=parm1)
5 adjust( y1 / adjustobs=(Trt='1') parms(shift=shift_t)=parm1);
6 var Trt y0 y1;
7RUN;
6 Bloque de código
PROC PRINT
Explicación :
Este bloque final utiliza `PROC PRINT` para mostrar las primeras 10 observaciones del conjunto de datos imputado 'outex18'. El conjunto de datos 'outex18' contiene todas las observaciones originales e imputadas, con una nueva variable '_Imputation_' que indica el índice de la imputación. Esto permite visualizar cómo se han completado los valores faltantes para la variable 'Y1' a través de las diferentes imputaciones. Se muestran las variables 'Trt', 'Y0' e 'Y1', así como la variable '_Imputation_'.
¡Copiado!
1PROC PRINT DATA=outex18(obs=10);
2 var _Imputation_ Trt Y0 Y1;
3 title 'First 10 Observations of the Imputed Data Set';
4RUN;
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.
Información de copyright : /****************************************************************/ /* S A S S A M P L E L I B R A R Y */ /* */ /* NAME: MIEX18 */ /* TITLE: Documentation Example 18 for PROC MI */ /* PRODUCT: STAT */ /* SYSTEM: ALL */ /* KEYS: multiple imputation */ /* PROCS: MI */ /* DATA: */ /* */ /* REF: PROC MI, EXAMPLE 18 */ /* MISC: */ /****************************************************************/