Les posteurs les plus actifs de la semaine
zouzou
 
niaboc
 
Eric Wajnberg
 
lenny868
 
RapidosFlash
 
Volivoile
 
Nik
 
Florent Aubry
 
c@ssoulet
 


Test du Chi2

Aller en bas

Test du Chi2

Message par StatLife le Mer 11 Sep 2013 - 13:46

Bonjour à tous et merci de prendre le temps de lire mon message,

Je vais essayer d'être clair:

Je dispose de 15 variables qualitatives: v1 v2...v15 et j'aimerais faire un test du chi2 pour chacun des couples possible.
Grâce à Excel, j'ai pu obtenir l'ensemble des couples que j'ai copier coller dans une proc freq avec option du test du Chi2 comme ci dessous:

proc freq data=table;
tables v1*v2 v1*v3…v14*v15 /noprint chisq ;
weight kish ;run;

ça marche bien mais ça me sort 15*16/2 tableaux alors que je n'en voudrais qu'un seul résumant l'info dont j'ai besoin afin que cela soit lisible.

Si vous avez une solution, je suis preneur !

Merci encore

très cordialement

Pierre


StatLife

Nombre de messages : 12
Date d'inscription : 11/09/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Test du Chi2

Message par niaboc le Mer 11 Sep 2013 - 15:12

J'ai retrouvé un ancien programme que j'avais utilisé et qui marche toujours (j'ai testé sur une table de la sashelp) :



Code:

%macro corr(table);

   PROC CONTENTS DATA =&table   OUT = work.dico noprint;
   RUN;
   PROC SQL noprint;
   SELECT name INTO : listeVar SEPARATED BY " "
   FROM work.dico
   where TYPE=2
   ORDER BY varnum;
   quit;

   %put &listevar;

   %let lm=1;
   %let i=1;
   %do %until(&lm=0);
   %let lm=%length(%scan(&listeVar,&i)) ;
   %let i=%eval(&i+1) ;
   %end ;
   %let nbvar=%eval(&i-2);

      %let varnum1=%scan(&listeVar,1);
         %let varnum2=%scan(&listeVar,2);

         proc freq data=&table;
         tables &varnum1 * &varnum2 / chisq;
         ods output ChiSq=chi2;
         run;

         data coeff;
         set chi2;
         where Statistic in ("Chi-Square","Cramer's V","Khi-2","V de Cramer");
         run;

   %do i=1 %to %eval(&nbvar-1);
      %let varnum&i=%scan(&listeVar,&i);
   %do j=%eval(&i+1) %to &nbvar;
         %let varnum&j=%scan(&listeVar,&j);

         proc freq data=&table;
         tables &&varnum&i * &&varnum&j / chisq;
         ods output ChiSq=chi2;
         run;

         data coeff2;
         set chi2;
         where Statistic in ("Chi-Square","Cramer's V","Khi-2","V de Cramer");
         run;

         data coeff;
         set coeff coeff2;
         run;
      %end;
   %end;

   data coeff;
   set coeff;
   if _n_>2 then output;
   run;

   data coeff1;
   set coeff;
   if Statistic in ("Chi-Square","Khi-2") then output;
   run;
   data coeff1;
   set coeff1;
   rename Prob=chi2;
   drop Statistic value;
   run;

   data coeff2;
   set coeff;
   if Statistic in ("Cramer's V","V de Cramer") then output;
   run;
   data coeff2;
   set coeff2;
   rename value=cramer;
   drop Statistic DF Prob;
   run;

   proc sort data=coeff1;
   by Table;
   run;
   proc sort data=coeff2;
   by Table;
   run;

   data coeff;
   merge coeff1 coeff2;
   by Table;
   run;

   PROC SQL ;
      DROP TABLE work.dico;
      DROP TABLE work.chi2;
      drop table work.coeff1;
      drop table work.coeff2;
   QUIT ;

%mend corr;

%corr(sashelp.revhub2);
A partir de ta table, ça va chercher toutes les variables qualitatives et ça calcule la p-value du chi-2 et la valeur du V de Cramer.

Dis-moi si ça marche bien chez toi.
avatar
niaboc

Nombre de messages : 951
Age : 31
Localisation : Paris
Date d'inscription : 05/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Test du Chi2

Message par niaboc le Mer 11 Sep 2013 - 15:18

La table finale se trouve dans la work et se nomme coeff.
Tu as donc autant de lignes que de croisements possibles et 4 colonnes : les variables en jeu, le nombre de degré de liberté, la p-value du test de khi-2 et la valeur du V de Cramer
avatar
niaboc

Nombre de messages : 951
Age : 31
Localisation : Paris
Date d'inscription : 05/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Test du Chi2

Message par niaboc le Mer 11 Sep 2013 - 15:27

J'ai remodifié le programme parce que j'étais encore plus débutant que maintenant à l'époque :

Code:
%macro corr(table);

   proc sql;
      drop table work.coeff;
   quit;

   PROC CONTENTS DATA =&table  OUT = work.dico noprint;
   RUN;
   PROC SQL noprint;
      SELECT name INTO : listeVar SEPARATED BY " "
      FROM work.dico
      where TYPE=2
      ORDER BY varnum;
   quit;

   %put &listevar;

   %let lm=1;
   %let i=1;
   %do %until(&lm=0);
      %let lm=%length(%scan(&listeVar,&i)) ;
      %let i=%eval(&i+1) ;
   %end ;
   %let nbvar=%eval(&i-2);

   %do i=1 %to %eval(&nbvar-1);
      %let varnum&i=%scan(&listeVar,&i);
        %do j=%eval(&i+1) %to &nbvar;
          %let varnum&j=%scan(&listeVar,&j);

           proc freq data=&table;
              tables &&varnum&i * &&varnum&j / chisq;
              ods output ChiSq=chi2;
           run;

           data coeff2;
              set chi2;
              where Statistic in ("Chi-Square","Cramer's V","Khi-2","V de Cramer");
           run;

           proc append data=coeff2 base=coeff;
          run;
      %end;
   %end;

   data coeff1;
      set coeff;
      if Statistic in ("Chi-Square","Khi-2") then output;
   run;
   data coeff1;
      set coeff1;
      rename Prob=chi2;
      drop Statistic value;
   run;

   data coeff2;
      set coeff;
      if Statistic in ("Cramer's V","V de Cramer") then output;
   run;
   data coeff2;
      set coeff2;
      rename value=cramer;
      drop Statistic DF Prob;
   run;

   proc sort data=coeff1;
      by Table;
   run;
   proc sort data=coeff2;
      by Table;
   run;

   data coeff;
      merge coeff1 coeff2;
      by Table;
   run;

   PROC SQL ;
      DROP TABLE work.dico;
      DROP TABLE work.chi2;
      drop table work.coeff1;
      drop table work.coeff2;
   QUIT ;

%mend corr;

%corr(sashelp.revhub2);
avatar
niaboc

Nombre de messages : 951
Age : 31
Localisation : Paris
Date d'inscription : 05/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Merci

Message par StatLife le Mer 11 Sep 2013 - 17:50

Merci beaucoup niaboc!!!

Le programme tourne impeccable et me retourne exactement ce que je voulais!

A la prochaine sur le forum, bonne continuation

Pierre


StatLife

Nombre de messages : 12
Date d'inscription : 11/09/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Test du Chi2

Message par Bassma le Mer 9 Mai 2018 - 0:17

Bonjour ! j'ai le même problème , mais je ne sais pas comment fonctionne ce programme :/

Bassma

Nombre de messages : 1
Date d'inscription : 01/05/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Test du Chi2

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum