Publié le :
Statistique CREATION_INTERNE

Exemple 18 de documentation pour PROC MI

Ce code est également disponible en : Deutsch Español
En attente de validation
L'objectif principal de ce script est de démontrer l'utilisation de PROC MI dans un scénario où les données manquantes sont supposées être MNAR. Il commence par la création d'un jeu de données synthétique 'Mono3' incluant des variables 'Trt', 'Y0' et 'Y1', où 'Y1' contient des valeurs manquantes introduites de manière intentionnelle. Ensuite, PROC IML est utilisé pour simuler des paramètres de décalage spécifiques pour deux groupes ('Trt=0' et 'Trt=1'), qui sont stockés dans le jeu de données 'parm1'. Ces paramètres sont cruciaux pour l'ajustement MNAR dans PROC MI. Enfin, PROC MI est invoquée avec l'option `monotone reg` pour l'imputation par régression et l'option `mnar adjust` pour appliquer les décalages simulés, produisant un jeu de données imputé 'outex18'. Des étapes de PROC PRINT sont incluses pour visualiser les données générées, les paramètres de décalage et les observations imputées.
Analyse des données

Type : CREATION_INTERNE


Le jeu de données 'Mono3' est créé directement dans le script via un DATA step, utilisant les fonctions `rannor` (nombres aléatoires normaux) et `ranuni` (nombres aléatoires uniformes) pour simuler des observations et introduire des valeurs manquantes de manière contrôlée. Le jeu de données 'parm1', contenant les paramètres de décalage pour l'ajustement MNAR, est également généré de manière interne par PROC IML en simulant des variables normales bivariées.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc de code crée un jeu de données SAS nommé 'Mono3'. Il simule des données pour deux groupes de traitement (Trt=0, Trt=1). Les variables 'Y0' et 'Y1' sont générées avec une composante aléatoire normale (`rannor`). Des valeurs manquantes sont introduites aléatoirement (avec une probabilité de 30%) dans la variable 'Y1' en utilisant la fonction `ranuni`. Le bouclage `do j=1 to 5` et `do j=1 to 45` permet de créer des effectifs différents pour les observations initiales et les observations suivantes, simulant potentiellement une étude avec un déséquilibre d'échantillonnage ou une phase pilote suivie d'une phase principale. La variable temporaire 'j' est supprimée avant la sauvegarde du jeu de données.
Copié !
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 Bloc de code
PROC PRINT
Explication :
Ce bloc utilise la procédure `PROC PRINT` pour afficher les 10 premières observations du jeu de données 'Mono3'. Cela permet une vérification rapide de la structure des données générées, y compris la présence des valeurs manquantes dans 'Y1'. Seules les variables 'Trt', 'Y0' et 'Y1' sont affichées.
Copié !
1PROC PRINT DATA=mono3(obs=10);
2 var Trt Y0 Y1;
3 title 'First 10 Obs in the Trial Data';
4RUN;
3 Bloc de code
PROC IML Data
Explication :
Ce bloc utilise le langage de matrice interactif (IML) pour simuler les paramètres de décalage nécessaires à l'ajustement MNAR dans `PROC MI`. Il génère 10 (nimpute) observations de variables normales bivariées ('d') avec des moyennes et une matrice de covariance spécifiées. Ces valeurs sont ensuite combinées avec un identifiant d'imputation (`impu`) pour former la matrice `delta`. Enfin, `delta` est sauvegardée dans le jeu de données SAS 'parm1', qui contiendra les colonnes '_Imputation_', 'Shift_C' (décalage pour le groupe contrôle, Trt=0) et 'Shift_T' (décalage pour le groupe traitement, Trt=1). Ces valeurs représentent les ajustements qui seront appliqués à la distribution des valeurs observées pour l'imputation.
Copié !
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 Bloc de code
PROC PRINT
Explication :
Ce bloc utilise `PROC PRINT` pour afficher le contenu complet du jeu de données 'parm1'. Ce jeu de données contient les paramètres de décalage (`Shift_C`, `Shift_T`) simulés par PROC IML pour chaque imputation (`_Imputation_`). L'affichage de ces paramètres permet de vérifier les valeurs qui seront utilisées par `PROC MI` pour ajuster les distributions lors de l'imputation MNAR.
Copié !
1PROC PRINT DATA=parm1;
2 var _Imputation_ Shift_C Shift_T;
3 title 'Shift Parameters for Imputations';
4RUN;
5 Bloc de code
PROC MI Data
Explication :
Ce bloc est le cœur de l'analyse, utilisant la procédure `PROC MI` pour effectuer l'imputation multiple. Le jeu de données d'entrée est 'Mono3', et le jeu de données de sortie ('outex18') contiendra 10 versions imputées du jeu de données original. `seed` assure la reproductibilité. L'instruction `class Trt;` déclare 'Trt' comme variable catégorielle. `monotone reg;` spécifie que l'imputation sera réalisée en utilisant une méthode de régression monotone. L'option `mnar adjust` est cruciale ici : elle indique un ajustement pour les données manquantes non aléatoires pour la variable 'Y1'. Deux ajustements sont spécifiés : un pour le groupe 'Trt=0' utilisant les valeurs 'shift_c' du jeu de données 'parm1', et un autre pour le groupe 'Trt=1' utilisant les valeurs 'shift_t' de 'parm1'. Cela permet de modéliser des mécanismes de données manquantes différents pour chaque groupe. Les variables 'Trt', 'Y0' et 'Y1' sont incluses dans le processus d'imputation.
Copié !
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 Bloc de code
PROC PRINT
Explication :
Ce bloc final utilise `PROC PRINT` pour afficher les 10 premières observations du jeu de données imputé 'outex18'. Le jeu de données 'outex18' contient toutes les observations originales et imputées, avec une nouvelle variable '_Imputation_' indiquant l'indice de l'imputation. Cela permet de visualiser comment les valeurs manquantes ont été complétées pour la variable 'Y1' à travers les différentes imputations. Les variables 'Trt', 'Y0' et 'Y1' sont affichées, ainsi que la variable '_Imputation_'.
Copié !
1PROC PRINT DATA=outex18(obs=10);
2 var _Imputation_ Trt Y0 Y1;
3 title 'First 10 Observations of the Imputed Data Set';
4RUN;
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.
Informations 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: */ /****************************************************************/