IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS STAT Discussion :

Comment fonctionne une proc MI : imputation valeurs manquantes


Sujet :

SAS STAT

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 31
    Points : 17
    Points
    17
    Par défaut Comment fonctionne une proc MI : imputation valeurs manquantes
    Bonjour ,

    Je dois utiliser la proc MI pour imputer les valeurs manquantes de mon fichier. Seulement je ne comprend pas tout, c'est une procédure assez compliquée.

    En gros ça reprend le fichier initial (avec valeurs manquantes) et ça le genere jusqu'à le nombre d'iteration fixé soit atteint.

    Admettons, je fixe mon nimpute à 5 ca va me creer un fichier repété 5 fois.
    Ma question se porte sur l'itération à choisir. Dans mon exemple, les données manquantes sont différentes à partir de i=4. Comment doit je choisir?
    Et faut -il utiliser une proc mianalyze?

    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Les valeurs manquantes sont TOUTES les bonnes ! C'est justement l'idée de la proc MI.
    Pour résumer : quand tu imputes des données manquantes, tu masques leur caractère artificiel dans l'analyse qui suit. Pour y remédier, Donald Rubin a proposé un mécanisme appelé "imputation multiple" (Multiple Imputation=MI) qui propose de remplacer chaque valeur manquante non pas par une valeur mais par N ! (Il montre ensuite qu'on obtient des résultats corrects avec N=5 sans besoin de répéter davantage.)
    En obtenant ensuite N séries de résultats différents selon le jeu imputé, on traduit l'incertitude (une part de variance supplémentaire) qu'il y a à combler des trous dont on ne sait pas ce qu'ils devraient contenir ni comment ils se sont formés.
    D'où l'intérêt de la proc MIANALYZE, qui reprend les N séries de résultats et les combine en augmentant les variances des estimateurs de la variance due à l'imputation.

    Cela dit, si le seul but est de compléter une base, PROC MI avec NIMPUTE=1 peut aussi donner des résultats satisfaisants. Le reste des (très) nombreux paramètres permet d'obtenir des générateurs aléatoires très performants.

    Olivier
    Bon courage.
    Olivier

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Ok. Donc que je prenne le jeux de données avec i=1 ou i=4 c'est la même chose?

    Moi je veux seulement combler les "trous" de mon fichier dc je ne suis pas obligé ensuite de faire une proc mianalyse?

  4. #4
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Pour deux itérations différentes, as-tu constaté que la valeur imputée est la même? Si oui, tu filtres pour ne garder qu'une seule itération d'après D'olivier.


  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    En fait ça dépend, parfois les valeurs changent.
    On m'a expliqué que dans l'option var il fallait mettre la (les) variable(s) à valeurs manquantes ainsi que d'autre variables qui l'expliquent le mieux.
    Mais mes variables ne sont pas forcément liées entre elles. Personnellement j'avais compris que dans l'option var on mettait les variables à données manquantes et c'est tout .

  6. #6
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    La proc MI simule les valeurs manquantes, et produit en sortie une moyenne sur chacune variables, toutes imputations confondues. à mon avis, il suffit de remplacer les valeurs manquantes par la moyenne.

    Voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    data Fish1;
        title 'Fish Measurement Data';
        input Length1 Length2 Length3 @@;
        datalines;
     23.2 25.4 30.0    24.0 26.3 31.2    23.9 26.5 31.1
     26.3 29.0 33.5    26.5 29.0   .     26.8 29.7 34.7
     26.8   .    .     27.6 30.0 35.0    27.6 30.0 35.1
     28.5 30.7 36.2    28.4 31.0 36.2    28.7   .    .
     29.1 31.5   .     29.5 32.0 37.3    29.4 32.0 37.2
     29.4 32.0 37.2    30.4 33.0 38.3    30.4 33.0 38.5
     30.9 33.5 38.6    31.0 33.5 38.7    31.3 34.0 39.5
     31.4 34.0 39.2    31.5 34.5   .     31.8 35.0 40.6
     31.9 35.0 40.5    31.8 35.0 40.9    32.0 35.0 40.6
     32.7 36.0 41.5    32.8 36.0 41.6    33.5 37.0 42.6
     35.0 38.5 44.1    35.0 38.5 44.0    36.2 39.5 45.3
     37.4 41.0 45.9    38.0 41.0 46.5
     ;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    data fish1;
    set fish1;
    if missing(Length2) or missing(Length3) then top=1;
    run;
    ods output  ParameterEstimates= ParameterEstimates;/* recup de la table contenat la moyenne*/
    proc mi data=Fish1 seed=899603 out=outMI;
    monotone propensity;
    var Length1 Length2 Length3;
    run;
    data _null_;
    set ParameterEstimates;
    call symput('Mean'!!left(_n_),Mean);/* stockage dans une macro variables*/
    run;
    data fish2;
    set fish1;
    if missing(Length2) then Length2=&Mean1.;
    if missing(Length3) then Length3=&Mean2.;
    run;
    Bon courage!

  7. #7
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour à tous.
    Brice, si c'est pour imputer par des moyennes, ce n'est pas la peine de déranger la proc MI ni des macro-variables : une simple proc STDIZE suffit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROC STDIZE DATA=fish1 OUT=fish2 METHOD=MEAN REPONLY ;
      VAR _NUMERIC_ ;
    RUN ;
    L'intérêt de MI est d'utiliser des générateurs aléatoires complexes (des chaînes de Markov entre autres) pour prendre en compte à la fois l'incertitude de la donnée à remplacer (si on opte pour une imputation multiple) et les relations entre variables, s'il y en a.
    Lilouche, je crois me souvenir qu'on doit citer dans VAR les variables à imputer et au moins une qui sera remplie à toutes les observations, liée si possible aux données à imputer. Mais cette relation n'est pas indispensable pour obtenir une imputation.
    Que tu choisisses le jeu de données i=1 ou i=4 ne change effectivement rien si tu veux juste boucher les trous dans ta table. Je propose même de simplifier en ne générant qu'un jeu unique de données imputées : NIMPUTE=1 dans la proc MI. Et dans ce cas, MIANALYZE sera totalement inutile.
    Bon courage.
    Olivier

    PS : pour une imputation simple, tu n'es pas obligée d'opter pour MI. Il y a d'autres méthodes, comme d'imputer par la moyenne (cf. proc STDIZE plus haut) avec des variables de stratification bien choisies (citées dans BY) pour avoir une imputation par régression. Tu peux aussi faire du hotdeck -- trouver une macro ne doit pas être bien compliqué.
    Bon courage.
    Olivier

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Merci à vous pour vos réponses!! C'est plus clair maintenant.

    Bonne journée

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut combiner les imputations multiple
    Bonjour à tous,
    Je relance la discussion car je suis bloquée à l'étape de la combinaison des imputations multiples.
    Je finis par une base avec 5 imputations donc 5 valeurs pour chaque valeur manquante même après la proc mianalyze et je ne sais pas comment pouvoir combiner ces résultats en une base.
    Povez vous m'aider.
    En vous remerciant par avance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de PROC MI : imputation valeurs manquantes
    Par Mark531 dans le forum SAS STAT
    Réponses: 5
    Dernier message: 21/04/2015, 10h38
  2. Comment fonctionne une Progress Bar
    Par loulag07 dans le forum Débuter
    Réponses: 2
    Dernier message: 10/01/2008, 15h37
  3. [Débutante] Comment fonctionne une JTable?
    Par delph1983 dans le forum Composants
    Réponses: 38
    Dernier message: 14/03/2006, 16h49
  4. comment fonctionne une interface graphique???
    Par elekis dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 27/10/2004, 23h10
  5. Picklist: comment recuperer une partie de la valeur
    Par mesquest dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/06/2004, 08h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo