Archives pour juin 2008

P-values robustes et NLMIXED

23 juin 2008

Allo tout le monde

 

Partie 1 :

 

J’ai appris récemment une façon d’obtenir des p-values plus robustes. Cette méthode est beaucoup plus sévère, car elle ne suppose rien à la base (on n’a pas besoin de normalité, ni rien d’autres). Elle s’applique donc en tout temps. Je l’ai utilisé dans un contexte où ma superviseure voulait voir si les résultats qu’elle avait obtenu était correcte puisqu’elle avait beaucoup de comparaisons qui étaient significatives. La façon la plus simple est de renommer notre variable qui contient les p-values avec le nom “raw_p”. Après, on applique tout simplement la procédure suivante :

 

PROC MULTTEST pdata = “nom du fichier” FDR;

RUN;

 

Le pdata n’est pas une erreur, ça dit à la procédure que le fichier que tu lui donnes contient tes p-values avec comme nom de variable “raw_p”. Par curiosité, allez voir comment ça se calcule, c’est tout simple, mais intéressant.  

 

Partie 2 :

 

J’ai aussi découvert une nouvelle procédure SAS qui à la base a été conçue pour des modèles non-linéaires, mais qui peut quand même être utilisée pour des modèles linéaires. En fait, cette méthode permet de tout faire parce que lorsque la fonction n’est pas disponible en option, il est possible d’écrire la log-vraisemblance. Ma superviseure l’a même déjà utilisé en mettant une combinaison de deux log-vraisemblances. Voici un exemple utilisant la distribution gamma. J’ai dû utiliser la log-vraisemblance puisque cette distribution n’est pas disponible dans les options.

 

Prenons une variable X prenant comme valeur : 0 pour le traitement 1 et 1 pour le traitement 2.

 

Prenons une variable Z qui compte un certain nombre de jours. (Je ne suis pas très inspirée pour les variables.)

 

On veut voir l’effet des traitements 1 et 2. 

 

Supposons que notre effet aléatoire est que tous les sujets étaient dans une même éprouvette.

 

PROC

 

NLMIXED DATA = donnees;

PARMS s2u?? nu = ?? to ?? by ? beta0 = ?? beta1 = ??;

eta = beta0 + x*beta1 + u;

mu = 1/eta;

ll = nu*(-y/mu – log(mu));

MODEL Z ~ general(ll);

RANDOM u ~ normal (0, s2u) subject = eprouvette;

ESTIMATE ‘Traitement 2‘ (beta0 + beta1)**(-1);

ESTIMATE ‘Traitement 1‘ (beta0)**(-1);RUN;

 

PARMS permet d’insérer des valeurs initiales qui peuvent être trouvées avec un PROC MIXED dont la moyenne est transformée de la même manière. Par exemple, comme mu est égale à l’inverse de la forme linéaire, on met l’inverse dans le PROC MIXED et on prend les valeurs estimées des paramètres (Intercept = beta0, l’autre estimation à beta1). Dans le PROC MIXED, on met aussi un effet aléatoire et s2u du PROC NLMIXED est égale à l’estimé de la variance de l’effet aléatoire dans le PROC MIXED. Finalement, le nu est égale à mu/var résiduelle. Encore une fois, la variance résiduelle est trouvée à l’aide du PROC MIXED. Le mu peut avoir deux valeurs différentes, il y a donc deux valeurs de nu possibles. En effet, si x = 0, mu1 = 1/beta0 et si x = 1, mu2 = 1/(beta0 + beta1).

 

En théorie, avant l’énoncé MODEL, il est possible d’écrire des commandes comme dans un DATA. Par contre, j’ai eu quelques problèmes avec cette possibilité de PROC NLMIXED donc si ça ne marche pas, ce n’est pas de ma faute :P .

 

Si vous avez quelque chose que vous comprenez pas, dites-le moi. Je sais que la procédure est assez complexe, mais un coup qu’on la comprend, elle permet de faire bien des choses. Seul avertissement, faites attention pour ne pas mettre n’importe quoi dans les valeurs initiales parce que ça prend pas grand chose pour qu’il se décide à ne pas vouloir converger.

 

Marie-Eve

 

 

Macro pour le test de linéaire, régression logistique

23 juin 2008

Bonjour tout le monde,

 

Dans ma deuxième chronique, je vais vous montrer ma macro que j’ai créé afin de tester l’hypothèse de linéarité lorsqu’on effectue de la régression logistique.

 

La voici :

 

/*Tester l’hypothèse de linéarité*/

 

%macro linearite(fichier=, ech= , vary=, var_expl= , maxvalue=);

 

proc sort data=&fichier;

 by &ech;

run;

 

data &fichier;

 set &fichier;

 intervalle=&max_value/10;

 if 0<=&var_expl<intervalle then nclasse=1;

 if intervalle<=&var_expl<2*intervalle then nclasse=2;

 if 2*intervalle<=&var_expl<3*intervalle then nclasse=3;

 if 3*intervalle<=&var_expl<4*intervalle then nclasse=4;

 if 4*intervalle<=&var_expl<5*intervalle then nclasse=5;

 if 5*intervalle<=&var_expl<6*intervalle then nclasse=6;

 if 6*intervalle<=&var_expl<7*intervalle then nclasse=7;

 if 7*intervalle<=&var_expl<8*intervalle then nclasse=8;

 if 8*intervalle<=&var_expl<9*intervalle then nclasse=9;

 if 9*intervalle<=&var_expl<=10*intervalle then nclasse=10;

run;

 

proc sort data=&fichier;

 by nclasse;

run;

 

proc means data=&fichier noprint;

 by nclasse;

 var &var_expl;

 output out=moy mean=moyenne;

run;

 

proc sort data=&fichier;

 by nclasse &vary;

run;

 

proc means data=&fichier noprint;

 where &vary=0;

 by nclasse;

 var &vary;

 output out=nombre0 n=nbr0;

run;

 

proc means data=&fichier noprint;

 where &vary=1;

 by nclasse;

 var &vary;

 output out=nombre1 n=nbr1;

run;

 

data nombre;

 merge nombre1 nombre0;

 by nclasse;

 logit_p=log(nbr0/nbr1);

 drop _TYPE_ _FREQ_;

run;

 

data &fichier;

 merge &fichier moy nombre;

 by nclasse;

 drop _TYPE_ _FREQ_ nbr0 nbr1;

run;

 

goptions reset=all;

symbol1 c=blue v=dot;

proc gplot data=&fichier;

  title“&vary*&var_expl”;

  plot pred*&var_expl;

run;quit;title;

 

goptions reset=all;

symbol1 c=green v=dot;

proc gplot data=&fichier;

  title“&vary*&var_expl”;

  plot logit_p*moyenne;

run;quit;title;

 

data &fichier;

 set &fichier;

 drop logit_p moyenne;

run;

 

%mend;

 

Si vous avez des questions, n’hésitez pas  !!!

 

Simon Olivier Fournier

 

P.S. Je vais essayer de vous envoyer d’autres choses que des macros les prochaines fois !!

Accents et +

23 juin 2008

Bon lundi matin tout le monde!!!

 

Comme promis à certains d’autres vous vendredi dernier, voici une option globale de SAS qui permet l’utilisation des accents de la langue française dans les titres… (il suffit de la mettre en avant de la procédure plot ou autre et elle demeure valide tant qu’on fait pas un reset=all)

 

goptions reset=all keymap=winansi devmap=winansi;

De plus,  juste pour Jean-Francois (hihihi), la procédure que je te parlais au resto s’appelle comme suit :

 

Proc insight data=toto;

Run;

 

Ainsi, le jeu de données apparaît dans une nouvelle fenêtre d’où il est possible, à partir des onglets en haut, de faire rapidement un histogramme, un boxplot ou un ajustement… ou plein d’autres chose. C’est très pratique quand on veut voir rapidement l’allure d’un jeu de données à l’aide de deux trois clics!!!

  

C’est pas mal tout pour cette fois-ci…

 

Maude

Scholar Google

23 juin 2008

Allo tout le monde

 

Ça fait longtemps que personne n’a écrit de chronique le saviez-vous :( . J’ai découvert récemment scholar google (www.scholar.google.com). Je ne sais pas si je suis la seule qui ne connaissais, mais je vous en parle quand même. Ce site permet de faire des recherches dans toutes les publications qui existent (du moins, je crois). C’est donc bien pratique pour rechercher des articles sur un sujet précis et surtout dans des revues statistiques. Il est aussi possible de faire des recherches avancées où on peut mettre le nom de la publication ou le nom de l’auteur. Ça permet de faire un tri de toutes les choses inutiles que google peut sortir.

 

Bon j’espère vous avoir appris quelque chose :P .

 

Bonne journée

 

Marie-Eve

Lecture de fichiers Excel (suite)

23 juin 2008

Allo à tous

 

J’aimerais, aujourd’hui, compléter ma première chronique. Effectivement, en utilisant à nouveau le DDE, j’ai découvert de nouvelles options qui sont très utiles surtout que lorsqu’on obtient des données de chercheurs, généralement leurs fichiers ne sont pas directement lisibles par SAS. Par expérience, ce n’est vraiment pas drôle quand il y a douze feuilles Excel à lire et qu’elles sont bourrées de caractères illisibles ou d’espace.

 

Les nouvelles options s’incluent dans la ligne INFILE du DATA. Elles doivent tous être incluses. On ne peut pas en utiliser seulement une sinon ça risque de ne pas marcher très bien.

 

NOTAB : Dis à SAS de ne pas convertir les ‘TAB’ qui sont présents dans le fichier Excel.

 

DLM = ‘09′x : Spécifie le “delimiter character”. Par défaut, c’est une virgule, mais la commande précédente permet de le changer pour le ‘TAB’ (‘09′x : représentation hexadécimale de ‘TAB’)

 

DSD : Spécifie que deux ‘delimiter character’ consécutif représente une donnée manquante.

 

Avec ces trois options, vous sauvez beaucoup de temps en ayant pas à changer tous les espaces incluent dans les fichiers. Je dois dire que j’ai sauvé quelques heures de travail ‘PLATE’.

 

En espérant que cela vous sera utile.

 

Bonne fin de semaine.

 

Marie-Eve