Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS STAT
SAS STAT Forum d'entraide sur les fonctionnalités liées à la statistique sur SAS : statistique descriptive, test, régression, classification
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2011, 13h49   #1
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 17
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
Lilouche52 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 15h15   #2
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

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

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
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
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 15h35   #3
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 1
Points : 1
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?
Lilouche52 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 15h47   #4
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
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 : 956
Points : 1 366
Points : 1 366
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.

MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 20h29   #5
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 1
Points : 1
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 .
Lilouche52 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 22h48   #6
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
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 : 956
Points : 1 366
Points : 1 366
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!
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 06h41   #7
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

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

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
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é.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 08h01   #8
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 1
Points : 1
Merci à vous pour vos réponses!! C'est plus clair maintenant.

Bonne journée
Lilouche52 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h19.


 
 
 
 
Partenaires

Hébergement Web