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

MATLAB Discussion :

Régression avec plusieurs combinaisons


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Régression avec plusieurs combinaisons
    Bonjour à tous,

    Je suis débutant dans l'univers Matlab. J'ai besoin de Matlab pour arriver à corréler ma table y avec une combinaison de certaines de mes tables x. Chaque table contient 1 colonne et 16000 lignes.

    X = [x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14]

    y = Rating

    J'ai donc 15 tables x. Je cherche à tester toutes les combinaisons possibles (ex: x0 et x1 ou x3, x9 et x11) et en retirer celles qui ont des R2 élevés et des p value proche de 0.

    Je fais donc une régression:

    [B,bint,r,rint,stats] =* regress(y,[ones(size(X,1),1) X]).

    Seulement je n'ai aucune idée de la manière de procéder pour appliquer cette régression automatiquement à toutes les combinaisons possibles et mettre ensuite les r2, les beta et les p value dans un tableau. J'ai découvert Matlab il y a peu et même en passant une journée entière dessus je n'ai pas l'impression d'être proche de la solution. Est-ce que quelqu'un pourrait m'aider ?

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Déja tu peux rassembler tes tables-colonnes dans une unique matrice pour faciliter les boucles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X= [];for k=1:14; X(:,end+1)= eval(['x' num2str(k)] ); end
    Ensuite il te suffit de boucler sur les paires distinctes de colonnes de X, faire la regression sur ces colonnes, et stocker le résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    N= size(X,2);
    results= zeros(0,3);
    for i=1:; for j= 1:i-1;
        [B,bint,r,rint,stats] = regress(y,[ones(size(X,1),1) X(:,[i j])]);
        results(end+1)= [i,j,1-var(r)/var(y)]; % chaque ligne contient [i,j,R2(i,j))
    end;end
    disp(results);
    Tu peux jeter un coup d'oeuil à la fonction regstats qui offre plus de sorties pour le diagnostic de la régression.

    Enfin, j'ai supposé que tu voulais tester tes variables 2 par 2, mais dans l'absolue, sélectionner un nombre quelconque de variables significatives serait plus compliqué.

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour votre aide. J'y suis finalement arrivé à l'aide de la fonction combntns.

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    % Regression
    %%%%%%%%%%%%%%%%
     
      X = [x0 x1 x3 x4 x5 x6 x8 x9 x10 x11 x12 x13 x14 x15 x16];
     
     [l,c]= size(X) ;
     
     
     y = Rating;
     
     
     % initialisation des matrices (je les crée très grandes pour être sure..et
     % parce que je n'ai pas envie de réfléchir à la taille qu'elles vont avoir
     % :p )
    mat_beta=zeros(1000,1000);
    % mat_r=zeros(lx,c);
    mat_stats=zeros(10000,10000);
    mat_comb=zeros(1000,1000);
    % mat_bint=zeros(c,c*2) ;
    % mat_rint=zeros(lx,(c*2));
    % mat_pval=zeros(c,1);
    %  
    compteur=0;
     for i=14:c
     
         %  
    %  on part de 2 --> le nombre qu'il y en a ( cad le nombre de colonne de X
    %  (--> c)), on insère ce "i" dans la fonction combntns pour préciser combien de
    %  chiffres on prend ensemble parmi la série de 1-->c  (1:c) ds la fct combntns
     
    combos = combntns(1:c,i)  ; % compte les régressions)
         % voir help  :
    % % % % combos = combntns(1:5,3)
    % % % % combos =
    % % % %      1     2     3
    % % % %      1     2     4
    % % % %      1     2     5
    % % % %      1     3     4
    % % % %      1     3     5
    % % % %      1     4     5
    % % % %      2     3     4
    % % % %      2     3     5
    % % % %      2     4     5
    % % % %      3     4     5
     
     [ll,cc]= size(combos) ;
     
     % on passe en revue ligne par ligne de la combo
     
     
     for j=1:ll
     
         XX=[];
         %on regarde les éléments 
         for m=1:cc
             % on récupèré le chiffre qui est dans combo , qui est en fait un
             % indice qui permet de récupérer les mesures de perf qu'on veut
         ind=combos(j,m) ;
         xx=X(:,ind);
         XX=[XX xx] ; % on construit le XX au fur et a mesure
         end
     
         % on a maintenant une série de Mesure de perf --> on fait la régression 
         % et on stocke les résultats dans des autres matrices
     
        [B,bint,r,rint,stats] =  regress(y,[ones(size(XX,1),1) XX])  ;
        compteur=compteur+1 ; 
         mat_comb(compteur,1:i)= combos(j,:);
         mat_beta(1:i+1,compteur)=  B  ;
         mat_stats = stats ;
    Voilà comment j'ai procédé, seulement j'aimerais obtenir les R2 ajustés et les stocké dans mat_stats. Je dois rajouter quelque chose après mat_stats(...) = stats mais je ne sais pas quoi. Je continue à chercher si quelqu'un à une idée ?

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Ok problème résolu avec regstats

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

Discussions similaires

  1. Requête avec plusieurs combinaison
    Par nikolas92400 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/08/2014, 01h13
  2. Réponses: 2
    Dernier message: 30/09/2003, 15h57
  3. Réponses: 2
    Dernier message: 26/09/2003, 15h54
  4. ProgressBar avec plusieurs procédures
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/09/2002, 18h03
  5. Shortcut avec plusieurs touches
    Par scorpiwolf dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/07/2002, 15h57

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