[résolu] Multiplication de matrice

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Mathilde Fer
Messages : 66
Enregistré le : 17 Nov 2015, 17:33

[résolu] Multiplication de matrice

Messagepar Mathilde Fer » 13 Juin 2016, 10:00

Bonjour,
Je cherche à effectuer une multplication de matrice avec pour ma matrice1 : espece*site et ma matrice 2 : espee*trait. Ainsi ma première matrice 1contient le nombre d'espèce par site et la matrice 2 contient les modalité se chaque trait pour chaque espèce. J'ai donc un problème pour ma multiplication de matrice... Ma matrice 1 est numérique contrairement à ma matrice 2 qui est composé caractère discret...
Et il possible de faire une multiplication de matrice ?

Merci d'avance
Math

Logez Maxime
Messages : 2832
Enregistré le : 26 Sep 2006, 11:35

Re: Multiplication de matrice

Messagepar Logez Maxime » 13 Juin 2016, 11:24

Bonjour,

C'est tout à fait possible du moment que ta matrice 1 contienne les espèces en colonne et que ta matrice 2 contiennent les mêmes espèces en lignes (traits en colonnes). Après tu peux très bien passer tes traits en % pour obtenir une matrice de prélèvements traits dont la somme par modalités de traits soit égale au nombre d'individus de ton tableau de départ. Pour transformer ton tableau de traits en % tu peux le faire par exemple avec la fonction prep.fuzzy.var du package ade4.

Cordialement,
Maxime

Mathilde Fer
Messages : 66
Enregistré le : 17 Nov 2015, 17:33

Re: Multiplication de matrice

Messagepar Mathilde Fer » 13 Juin 2016, 11:54

Voila ma commande

Code : Tout sélectionner

vegtax<-read.table("Sites_espece_2011_gislain_obj1.txt",header=T,row.names=1)
vegtax<-data.frame(t(vegtax))
vegtax<-as.matrix(vegtax)
vegtrait<-read.csv("Analyse_fonctionnelle_netoye.csv",header=T,row.names=1)
vegtrait<-as.matrix(vegtrait)

Lorsque je fais :

Code : Tout sélectionner

veg<-vegtax%*%vegtrait

Et comme les modalités de chacun de mes traits sont des valeur du type "cc", "ccr" etc... le message d'erreur suivant s'affiche :
Error in vegtax %*% vegtrait : non-conformable arguments

Si quelqu'un à une solution !

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Re: Multiplication de matrice

Messagepar Nicolas Péru » 13 Juin 2016, 12:33

Bonjour

Tu dois effectivement t'affranchir des problèmes liées aux valeurs texte.
ci-dessous un exemple reproductible

Code : Tout sélectionner

mat1 <- data.frame(fac1=gl(5,4,labels=LETTERS[1:5]),fac2=gl(4,5,labels=letters[1:4]))
mat1
   fac1 fac2
1     A    a
2     A    a
3     A    a
4     A    a
5     B    a
6     B    b
7     B    b
8     B    b
9     C    b
10    C    b
11    C    c
12    C    c
13    D    c
14    D    c
15    D    c
16    D    d
17    E    d
18    E    d
19    E    d
20    E    d
> as.matrix(mat1)
      fac1 fac2
 [1,] "A"  "a"
 [2,] "A"  "a"
 [3,] "A"  "a"
 [4,] "A"  "a"
 [5,] "B"  "a"
 [6,] "B"  "b"
 [7,] "B"  "b"
 [8,] "B"  "b"
 [9,] "C"  "b"
[10,] "C"  "b"
[11,] "C"  "c"
[12,] "C"  "c"
[13,] "D"  "c"
[14,] "D"  "c"
[15,] "D"  "c"
[16,] "D"  "d"
[17,] "E"  "d"
[18,] "E"  "d"
[19,] "E"  "d"
[20,] "E"  "d"


les multiplications de matrice :

Code : Tout sélectionner

> mat1%*%mat1
Erreur dans mat1 %*% mat1 :
  nécessite des arguments numériques/complexes matrice/vecteur
> mat1%*%t(mat1)
Erreur dans mat1 %*% t(mat1) :
  nécessite des arguments numériques/complexes matrice/vecteur
> as.matrix(mat1)%*%t(as.matrix(mat1))
Erreur dans as.matrix(mat1) %*% t(as.matrix(mat1)) :
  nécessite des arguments numériques/complexes matrice/vecteur


Une méthode qui marche (avec acm.disjonctif du package ade4) :

Code : Tout sélectionner

as.matrix(acm.disjonctif(mat1))%*%t(as.matrix(acm.disjonctif(mat1)))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1  2 2 2 2 1 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0
2  2 2 2 2 1 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0
3  2 2 2 2 1 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0
4  2 2 2 2 1 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0
5  1 1 1 1 2 1 1 1 0  0  0  0  0  0  0  0  0  0  0  0
6  0 0 0 0 1 2 2 2 1  1  0  0  0  0  0  0  0  0  0  0
7  0 0 0 0 1 2 2 2 1  1  0  0  0  0  0  0  0  0  0  0
8  0 0 0 0 1 2 2 2 1  1  0  0  0  0  0  0  0  0  0  0
9  0 0 0 0 0 1 1 1 2  2  1  1  0  0  0  0  0  0  0  0
10 0 0 0 0 0 1 1 1 2  2  1  1  0  0  0  0  0  0  0  0
11 0 0 0 0 0 0 0 0 1  1  2  2  1  1  1  0  0  0  0  0
12 0 0 0 0 0 0 0 0 1  1  2  2  1  1  1  0  0  0  0  0
13 0 0 0 0 0 0 0 0 0  0  1  1  2  2  2  1  0  0  0  0
14 0 0 0 0 0 0 0 0 0  0  1  1  2  2  2  1  0  0  0  0
15 0 0 0 0 0 0 0 0 0  0  1  1  2  2  2  1  0  0  0  0
16 0 0 0 0 0 0 0 0 0  0  0  0  1  1  1  2  1  1  1  1
17 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  1  2  2  2  2
18 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  1  2  2  2  2
19 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  1  2  2  2  2
20 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  1  2  2  2  2


HTH

Nicolas

Logez Maxime
Messages : 2832
Enregistré le : 26 Sep 2006, 11:35

Re: Multiplication de matrice

Messagepar Logez Maxime » 13 Juin 2016, 12:34

Il te faut discrétiser tes traits avant. Pour ça tus as la fonction acm.disjonctif dans le package ade4 :

Code : Tout sélectionner

 traits <- data.frame(X = sample(letters[1:3],20, rep = T), Y = sample(LETTERS[10:12], 20, rep = TRUE))
tdij <- acm.disjonctif(traits)
tdij
   X.a X.b X.c Y.J Y.K Y.L
1    0   1   0   1   0   0
2    0   1   0   1   0   0
3    0   1   0   0   0   1
4    1   0   0   0   0   1
5    1   0   0   1   0   0
6    1   0   0   0   1   0
7    0   0   1   0   0   1
8    0   0   1   0   1   0
9    1   0   0   0   0   1
10   0   1   0   0   1   0
11   0   0   1   0   1   0
12   0   0   1   1   0   0
13   1   0   0   1   0   0
14   0   1   0   0   0   1
15   0   1   0   1   0   0
16   0   1   0   1   0   0
17   1   0   0   1   0   0
18   0   0   1   0   1   0
19   0   0   1   1   0   0
20   0   1   0   0   1   0
Attention de passer ce data.frame en matrix au préalable.
Sinon avec des fonctions de base :

Code : Tout sélectionner

do.call(cbind, lapply(traits, function(x) xtabs(~ I(1:nrow(traits)) + x)))
Cordialement,
Maxime

Mathilde Fer
Messages : 66
Enregistré le : 17 Nov 2015, 17:33

Re: Multiplication de matrice

Messagepar Mathilde Fer » 16 Juin 2016, 11:32

Merci beaucoup le problème est résolu grâce à vos conseils


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot], Michel Carpentier, Serge Rapenne et 1 invité