Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Invité de passage
    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 : 1
    Points
    1

    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 Olivier Decourt
    Formateur en informatique
    Inscrit en
    avril 2008
    Messages
    1 741
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier Decourt
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 741
    Points : 3 781
    Points
    3 781

    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

  3. #3
    Invité de passage
    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 : 1
    Points
    1

    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 Expert
    Avatar de MEGAMIND2
    Homme Profil pro Brice Beare
    Paris
    Inscrit en
    janvier 2011
    Messages
    992
    Détails du profil
    Informations personnelles :
    Nom : Homme Brice Beare
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : janvier 2011
    Messages : 992
    Points : 1 438
    Points
    1 438

    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
    Invité de passage
    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 : 1
    Points
    1

    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 Expert
    Avatar de MEGAMIND2
    Homme Profil pro Brice Beare
    Paris
    Inscrit en
    janvier 2011
    Messages
    992
    Détails du profil
    Informations personnelles :
    Nom : Homme Brice Beare
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : janvier 2011
    Messages : 992
    Points : 1 438
    Points
    1 438

    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 :
    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 :
    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 Olivier Decourt
    Formateur en informatique
    Inscrit en
    avril 2008
    Messages
    1 741
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier Decourt
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 741
    Points : 3 781
    Points
    3 781

    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 :
    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é.

  8. #8
    Invité de passage
    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 : 1
    Points
    1

    Par défaut

    Merci à vous pour vos réponses!! C'est plus clair maintenant.

    Bonne journée

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •