Publié le :
Statistique CREATION_INTERNE

Calcul de poids d'équilibrage par entropie avec PROC PSMATCH

En attente de validation
Le script commence par générer un jeu de données synthétiques ('drugs') simulant des caractéristiques de patients (sexe, âge, IMC) et l'attribution d'un traitement ('Drug_X' ou 'Drug_A'). La génération des données inclut la création d'un score de propension pour influencer l'attribution du traitement. Ensuite, la procédure `PROC PSMATCH` est utilisée avec la méthode `EWEIGHT` (entropy weight) pour calculer des poids. Ces poids visent à équilibrer les distributions des covariables (`Gender`, `Age`, `BMI`) entre le groupe traité (`Drug_X`) et le groupe de contrôle. Enfin, la qualité de cet équilibrage est évaluée (`ASSESS`) et les poids sont sauvegardés dans une table de sortie pour une utilisation ultérieure.
Analyse des données

Type : CREATION_INTERNE


Le script génère intégralement ses propres données via une étape DATA. Il utilise des fonctions de nombres aléatoires (`ranuni`, `rannor`) pour simuler les caractéristiques des patients et l'attribution d'un traitement. Aucune donnée externe ou de la librairie SASHELP n'est utilisée.

1 Bloc de code
DATA STEP Data
Explication :
Crée une table 'drug1' avec 490 observations. Les variables 'Gender', 'Age', 'BMI' et un score de propension 'pscore' sont générées aléatoirement pour simuler des données de patients.
Copié !
1DATA drug1;
2 DO jorder=1 to 490;
3 IF (ranuni(99) < .55) THEN Gender='Male ';
4 ELSE Gender='Female';
5 
6 Age= 30 + 20*ranuni(99) + 3*rannor(9);
7 IF (Age < 25) THEN Age= 20 - (Age-25)/2;
8 Age= int(Age);
9 
10 BMI= 20 + 6*ranuni(99) + 0.02*Age + rannor(9);
11 IF (BMI < 18) THEN BMI= 18 - (BMI-18)/4;
12 BMI= int(BMI*100) / 100;
13 
14 pscore= 4. - 0.35*Age + 0.35*BMI + 0.01*rannor(99);
15 IF (Gender='Female') THEN pscore= pscore - 0.2;
16 
17 id1= ranuni(99);
18 OUTPUT;
19 END;
20RUN;
2 Bloc de code
PROC SORT Data
Explication :
Trie les données par score de propension ('pscore') puis utilise PROC RANK pour créer une nouvelle variable 'porder' qui contient le rang de chaque observation basé sur ce score, de manière décroissante.
Copié !
1PROC SORT DATA=drug1 out=drug2;
2 BY pscore;
3RUN;
4PROC RANK DATA=drug2 out=drug3 descending;
5 var pscore;
6 ranks porder;
7RUN;
3 Bloc de code
DATA STEP Data
Explication :
Crée la table 'drug4' et assigne un traitement ('Drug_X' ou 'Drug_A') aux patients. La probabilité de recevoir 'Drug_X' diminue à mesure que le rang 'porder' augmente, simulant une attribution de traitement non aléatoire basée sur le score de propension.
Copié !
1DATA drug4;
2 SET drug3;
3 IF (porder < 100) THEN DO;
4 IF (ranuni(99) < .45) THEN Drug= 'Drug_X';
5 ELSE Drug= 'Drug_A';
6 END;
7 ELSE IF (porder < 300) THEN DO;
8 IF (ranuni(99) < .30) THEN Drug= 'Drug_X';
9 ELSE Drug= 'Drug_A';
10 END;
11 ELSE IF (porder < 450) THEN DO;
12 IF (ranuni(99) < .15) THEN Drug= 'Drug_X';
13 ELSE Drug= 'Drug_A';
14 END;
15 ELSE Drug= 'Drug_A';
16RUN;
4 Bloc de code
DATA STEP Data
Explication :
Filtre les 4 premières observations (celles avec le plus haut score de propension). Ensuite, les données sont triées par un identifiant aléatoire 'id1' pour mélanger l'ordre, et un 'PatientID' séquentiel est finalement assigné.
Copié !
1DATA drug5;
2 SET drug4;
3 IF (porder > 4);
4RUN;
5 
6PROC SORT DATA=drug5;
7 BY id1;
8RUN;
9 
10DATA drug5;
11 SET drug5;
12 PatientID= _n_;
13RUN;
5 Bloc de code
PROC SORT Data
Explication :
Crée la table finale 'drugs' en triant par l'ordre de création initial 'jorder' et en ne conservant que les variables nécessaires pour l'analyse.
Copié !
1 
2PROC SORT
3DATA=drug5 out=drugs (keep=PatientID Drug Gender Age BMI);
4BY jorder;
5RUN;
6 
6 Bloc de code
PROC PSMATCH Data
Explication :
Utilise la procédure PSMATCH pour calculer des poids d'équilibrage par entropie ('eweight'). Le but est de créer des poids qui balancent les distributions des variables 'Gender', 'Age', et 'BMI' entre le groupe traité ('Drug_X') et le groupe contrôle. La commande 'assess' évalue la qualité de l'équilibrage, et 'output' sauvegarde les données avec les poids calculés dans la table 'OutEx10'.
Copié !
1PROC PSMATCH DATA=drugs;
2 class Drug Gender;
3 eweight treatvar=Drug(Treated='Drug_X') balancevars=(Gender Age BMI)
4 nlargestwgt=5;
5 assess var=(Age BMI)/ varinfo;
6 OUTPUT out=OutEx10 weight=eweight;
7RUN;
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


Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« "Dans les études observationnelles, l'attribution du traitement n'est jamais aléatoire, ce qui crée des biais de confusion. Traditionnellement, on utilise le score de propension pour l'appariement, mais la méthode EWEIGHT (Entropy Balancing) intégrée à la PROC PSMATCH représente une avancée majeure.

Contrairement au pondération classique (IPTW) qui peut générer des poids extrêmes et instables, l'équilibrage par entropie ajuste les poids de manière chirurgicale pour que les moments de la distribution (moyenne, variance) du groupe de contrôle correspondent exactement à ceux du groupe traité. L'instruction ASSESS devient alors votre tableau de bord critique : elle confirme visuellement que vos groupes sont devenus comparables, permettant une estimation de l'effet du traitement aussi fiable que si vous aviez réalisé un essai clinique randomisé »