bart bartProbit

Scénario Cas Limite : Prédiction de Réadmission Hospitalière avec Données Manquantes

Scénario de test & Cas d'usage

Contexte Métier

Un hôpital cherche à prédire la probabilité de réadmission d'un patient dans les 30 jours suivant sa sortie. Les dossiers des patients sont souvent incomplets, avec des valeurs manquantes pour certains tests médicaux. Ce scénario teste la robustesse de l'action face à des données imparfaites.
À propos du Set : bart

Modèles d'arbres de régression additive bayésienne.

Découvrir toutes les actions de bart
Préparation des Données

Création d'une table de données patient avec des valeurs manquantes intentionnelles dans les prédicteurs 'indice_bmi' et 'duree_sejour', ainsi qu'une variable de fréquence.

Copié !
1DATA casuser.HospitalReadmission_fr;
2 call streaminit(111);
3 DO patient_id = 1 to 2000;
4 age_patient = 40 + floor(rand('Uniform') * 50);
5 duree_sejour = 2 + floor(rand('Uniform') * 14);
6 indice_bmi = 18 + rand('Uniform') * 22;
7 nombre_procedures = 1 + floor(rand('Uniform') * 5);
8 poids_observation = 1 + floor(rand('Uniform') * 3); /* Variable de fréquence */
9 
10 /* Introduction de valeurs manquantes */
11 IF rand('Uniform') < 0.15 THEN call missing(duree_sejour);
12 IF rand('Uniform') < 0.20 THEN call missing(indice_bmi);
13 
14 z = -2.0 + (age_patient / 30) + (coalesce(duree_sejour, 5) / 7) - (coalesce(indice_bmi, 25) / 15) + (nombre_procedures / 3);
15 prob_readmission = cdf('Normal', z);
16 IF rand('Uniform') < prob_readmission THEN readmis_30j = 1;
17 ELSE readmis_30j = 0;
18 
19 OUTPUT;
20 END;
21RUN;

Étapes de réalisation

1
Chargement de la table avec données manquantes dans CAS.
Copié !
1 
2PROC CASUTIL;
3load
4DATA=casuser.HospitalReadmission_fr casout='HospitalReadmission_fr' replace;
5QUIT;
6 
2
Première exécution de bartProbit en utilisant la stratégie par défaut pour les valeurs manquantes ('SEPARATE') et en utilisant la variable de fréquence 'poids_observation'.
Copié !
1PROC CAS;
2 bart.bartProbit TABLE={name='HospitalReadmission_fr'},
3 target='readmis_30j',
4 inputs={'age_patient', 'duree_sejour', 'indice_bmi', 'nombre_procedures'},
5 missing='SEPARATE',
6 freq='poids_observation',
7 seed=222,
8 outputTables={names={ObsInfo='ObsInfo_Separate'}};
9RUN;
10QUIT;
3
Seconde exécution en excluant les observations avec des valeurs manquantes ('NONE') pour comparer le nombre d'observations utilisées.
Copié !
1PROC CAS;
2 bart.bartProbit TABLE={name='HospitalReadmission_fr'},
3 target='readmis_30j',
4 inputs={'age_patient', 'duree_sejour', 'indice_bmi', 'nombre_procedures'},
5 missing='NONE',
6 freq='poids_observation',
7 seed=222,
8 outputTables={names={ObsInfo='ObsInfo_None'}};
9RUN;
10QUIT;
4
Comparaison du nombre d'observations utilisées dans les deux approches en affichant les tables d'information sur les observations.
Copié !
1PROC CAS;
2 PRINT TABLE='ObsInfo_Separate';
3 PRINT TABLE='ObsInfo_None';
4RUN;
5QUIT;

Résultat Attendu


Les deux exécutions de l'action se terminent sans erreur. La table de résultats 'ObsInfo_Separate' montre que toutes les observations ont été utilisées ('Observations Used'), car les valeurs manquantes ont été traitées comme une catégorie distincte. En revanche, la table 'ObsInfo_None' montre un nombre inférieur d'observations utilisées, correspondant au nombre de lignes sans aucune valeur manquante. Cela valide le bon fonctionnement des options de gestion des données manquantes et de la pondération par fréquence.