Matrices#
Une matrice est un objet constitué de données en deux dimensions, soit des lignes et des colonnes. Chaque élément de la matrice est situé à l’intersection d’une ligne et d’une colonne.
A<- matrix(c(6,8,1,1,4,2), nrow = 2, ncol = 3)
A
6 | 1 | 4 |
8 | 1 | 2 |
Il arrive souvent qu’on veuille transposer une matrice. Pour ce faire, il suffit de l’inclure à l’intérieur de t(matrice)
t(A)
6 | 8 |
1 | 1 |
4 | 2 |
Note Lorsqu’on transpose un vecteur, R transforme ce vecteur en une matrice à une seule dimension:
vec<-1:5
t(vec)
1 | 2 | 3 | 4 | 5 |
Note la fonction dim()
donne les dimensions d’une matrice. Si l’on vérifie la dimension du vecteur.
dim(vec)
NULL
Bien évidemment il nous retourne une valeur nulle. Mais lorsqu’on transforme ce vecteur en matrice, on obtient;
dim(t(vec))
- 1
- 5
Ce qui veut dire que notre matrice est composée d’une seule ligne et cinq colonnes
Extraction d’un élément d’une matrice#
Si l’on veut extraire un élément d’une matrice, il suffit d’indiquer ses coordonnées [ligne, colonne]
A[1,3]
A
6 | 1 | 4 |
8 | 1 | 2 |
Lorsqu’on veut extraire un élément qui n’existe pas dans la matrice, on obtien alors le message d’erreur subscript out of bounds
. Un message d’erreur que nous verrons souvent!
A[1,4]
Error in A[1, 4]: subscript out of bounds
Traceback:
Si l’on omet de mettre une valeur au numéro de colonne ou de ligne, on obtient la ligne ou la colonne complète
A[,1]
- 6
- 8
Lorsqu’on crée une matrice, nous ne sommes pas obligés d’indiquer le nombre de colonnes ou de lignes en même temps. Un seul argument suffit.
B<-matrix(seq(1,9.5,.5), 3)
B
1.0 | 2.5 | 4.0 | 5.5 | 7.0 | 8.5 |
1.5 | 3.0 | 4.5 | 6.0 | 7.5 | 9.0 |
2.0 | 3.5 | 5.0 | 6.5 | 8.0 | 9.5 |
Si l’on veut extraire la deuxième et la quatrième colonne
B[,c(2,4)]
2.5 | 5.5 |
3.0 | 6.0 |
3.5 | 6.5 |
B<-t(B)
B
1.0 | 1.5 | 2.0 |
2.5 | 3.0 | 3.5 |
4.0 | 4.5 | 5.0 |
5.5 | 6.0 | 6.5 |
7.0 | 7.5 | 8.0 |
8.5 | 9.0 | 9.5 |
Si l’on veut extraire la troisième et la cinquième ligne;
B[c(3,5),]
4 | 4.5 | 5 |
7 | 7.5 | 8 |
diag#
Cette fonction crée une matrice identité, c’est une matrice carrée avec des 1 sur la diagonale et des 0 partout ailleurs.
diag(5)
1 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 1 |
Opértaion sur les matrices#
On peut aussi appliquer des fonctions mathématiques sur des matrices comme nous l’avons fait avec des vecteurs
A**2
36 | 1 | 16 |
64 | 1 | 4 |
B/2
0.50 | 1.25 | 2.00 | 2.75 | 3.50 | 4.25 |
0.75 | 1.50 | 2.25 | 3.00 | 3.75 | 4.50 |
1.00 | 1.75 | 2.50 | 3.25 | 4.00 | 4.75 |
C<-B*2
B+C
3.0 | 7.5 | 12.0 | 16.5 | 21.0 | 25.5 |
4.5 | 9.0 | 13.5 | 18.0 | 22.5 | 27.0 |
6.0 | 10.5 | 15.0 | 19.5 | 24.0 | 28.5 |
Créons une matrice A=5X3
. Cette matrice contient les températures en Fahrenheit des trois villes « Fairbanks », »San Francisco » et « Chicago » (nom de colonnes). Les lignes sont les données du mois de mars 2012 au mois de mars 2016.
A<-matrix(c(30,32,31,27,36,72,60,78,67,71,55,57,56,55,49),ncol=3)
A
30 | 72 | 55 |
32 | 60 | 57 |
31 | 78 | 56 |
27 | 67 | 55 |
36 | 71 | 49 |
Convertissons ces données en Celsius avec la formule suivante;
\begin{equation}\label{eq:} ℃= \frac{℉-32}{1.8000} \end{equation}
A<-round((A-32)/1.8,0)
A
-1 | 22 | 13 |
0 | 16 | 14 |
-1 | 26 | 13 |
-3 | 19 | 13 |
2 | 22 | 9 |
On peut donner des noms à chacune des colonnes avec la fonction colnames()
colnames(A)<-c("Fairbanks","San Francisco","Chicago")
et des nom aux lignes avec la fonction rownames()
rownames(A)<-paste("3/",12:16,sep='')
La fonction paste
ci-haut permet de concatener des caractères
paste("3/",12:16,sep='___')
- '3/___12'
- '3/___13'
- '3/___14'
- '3/___15'
- '3/___16'
A
Fairbanks | San Francisco | Chicago | |
---|---|---|---|
3/12 | -1 | 22 | 13 |
3/13 | 0 | 16 | 14 |
3/14 | -1 | 26 | 13 |
3/15 | -3 | 19 | 13 |
3/16 | 2 | 22 | 9 |
Créons une autre matrice B
B<-matrix(c(88,85,83,81,78,62,61,54,60,65,90,92,91,89,90),ncol=3)
colnames(B)<-c("Los Angeles","Seattle","Honolulu")
rownames(B)<-paste("3/",12:16,sep='')
B<-round((B-32)/1.8,0)
B
Los Angeles | Seattle | Honolulu | |
---|---|---|---|
3/12 | 31 | 17 | 32 |
3/13 | 29 | 16 | 33 |
3/14 | 28 | 12 | 33 |
3/15 | 27 | 16 | 32 |
3/16 | 26 | 18 | 32 |
cbind#
La fonction cbind
permet de concaténer deux matrices ensemble en colonne
cbind(A,B)
Fairbanks | San Francisco | Chicago | Los Angeles | Seattle | Honolulu | |
---|---|---|---|---|---|---|
3/12 | -1 | 22 | 13 | 31 | 17 | 32 |
3/13 | 0 | 16 | 14 | 29 | 16 | 33 |
3/14 | -1 | 26 | 13 | 28 | 12 | 33 |
3/15 | -3 | 19 | 13 | 27 | 16 | 32 |
3/16 | 2 | 22 | 9 | 26 | 18 | 32 |
rbind#
La fonction rbind
permet de concaténer deux matrices ensemble une par-dessus l’autre
rbind(A,B)
Fairbanks | San Francisco | Chicago | |
---|---|---|---|
3/12 | -1 | 22 | 13 |
3/13 | 0 | 16 | 14 |
3/14 | -1 | 26 | 13 |
3/15 | -3 | 19 | 13 |
3/16 | 2 | 22 | 9 |
3/12 | 31 | 17 | 32 |
3/13 | 29 | 16 | 33 |
3/14 | 28 | 12 | 33 |
3/15 | 27 | 16 | 32 |
3/16 | 26 | 18 | 32 |
matrcice en vecteur#
On peut aussi transformer une matrice en un vecteur;
Reprenons la matrice que nous avons créée avec la fonction rbind
. On lui donne le nom « mat_comb »
mat_comb<-cbind(A,B)
On la transforme en vecteur avec c(nomMatrice)
c(mat_comb)
- -1
- 0
- -1
- -3
- 2
- 22
- 16
- 26
- 19
- 22
- 13
- 14
- 13
- 13
- 9
- 31
- 29
- 28
- 27
- 26
- 17
- 16
- 12
- 16
- 18
- 32
- 33
- 33
- 32
- 32
Quelques fonctions statistiques sur les matrices#
mat_comb
Fairbanks | San Francisco | Chicago | Los Angeles | Seattle | Honolulu | |
---|---|---|---|---|---|---|
3/12 | -1 | 22 | 13 | 31 | 17 | 32 |
3/13 | 0 | 16 | 14 | 29 | 16 | 33 |
3/14 | -1 | 26 | 13 | 28 | 12 | 33 |
3/15 | -3 | 19 | 13 | 27 | 16 | 32 |
3/16 | 2 | 22 | 9 | 26 | 18 | 32 |
Lorsqu’on applique la fonction min
, on obtient alors la valeur minimale de toutes les valeurs contenues dans la matrice
min(mat_comb)
max(mat_comb)
range(mat_comb)
- -3
- 33
sd(mat_comb)
Les statistiques que nous venons d’obtenir, sont applquées à toutes les valeurs de la matrice. Et si nous voulions des statistiques par ligne ou par colonne
rowMeans(mat_comb)
- 3/12
- 19
- 3/13
- 18
- 3/14
- 18.5
- 3/15
- 17.3333333333333
- 3/16
- 18.1666666666667
colMeans(mat_comb)
- Fairbanks
- -0.6
- San Francisco
- 21
- Chicago
- 12.4
- Los Angeles
- 28.2
- Seattle
- 15.8
- Honolulu
- 32.4
Corrélation#
cor(mat_comb)
Fairbanks | San Francisco | Chicago | Los Angeles | Seattle | Honolulu | |
---|---|---|---|---|---|---|
Fairbanks | 1.00000000 | 0.07356124 | -0.6918586 | -0.24325462 | 0.38624364 | 0.05025189 |
San Francisco | 0.07356124 | 1.00000000 | -0.3084798 | -0.06947125 | -0.49810768 | 0.00000000 |
Chicago | -0.69185856 | -0.30847978 | 1.0000000 | 0.64005690 | -0.48366537 | 0.51512220 |
Los Angeles | -0.24325462 | -0.06947125 | 0.6400569 | 1.00000000 | -0.04559608 | 0.14237370 |
Seattle | 0.38624364 | -0.49810768 | -0.4836654 | -0.04559608 | 1.00000000 | -0.72057669 |
Honolulu | 0.05025189 | 0.00000000 | 0.5151222 | 0.14237370 | -0.72057669 | 1.00000000 |
summary#
summary(mat_comb)
Fairbanks San Francisco Chicago Los Angeles Seattle
Min. :-3.0 Min. :16 Min. : 9.0 Min. :26.0 Min. :12.0
1st Qu.:-1.0 1st Qu.:19 1st Qu.:13.0 1st Qu.:27.0 1st Qu.:16.0
Median :-1.0 Median :22 Median :13.0 Median :28.0 Median :16.0
Mean :-0.6 Mean :21 Mean :12.4 Mean :28.2 Mean :15.8
3rd Qu.: 0.0 3rd Qu.:22 3rd Qu.:13.0 3rd Qu.:29.0 3rd Qu.:17.0
Max. : 2.0 Max. :26 Max. :14.0 Max. :31.0 Max. :18.0
Honolulu
Min. :32.0
1st Qu.:32.0
Median :32.0
Mean :32.4
3rd Qu.:33.0
Max. :33.0
Si on veut par ligne, rappelons-nous que nous avons appris à transposer les matrices!
summary(t(mat_comb))
3/12 3/13 3/14 3/15
Min. :-1.00 Min. : 0.00 Min. :-1.00 Min. :-3.00
1st Qu.:14.00 1st Qu.:14.50 1st Qu.:12.25 1st Qu.:13.75
Median :19.50 Median :16.00 Median :19.50 Median :17.50
Mean :19.00 Mean :18.00 Mean :18.50 Mean :17.33
3rd Qu.:28.75 3rd Qu.:25.75 3rd Qu.:27.50 3rd Qu.:25.00
Max. :32.00 Max. :33.00 Max. :33.00 Max. :32.00
3/16
Min. : 2.00
1st Qu.:11.25
Median :20.00
Mean :18.17
3rd Qu.:25.00
Max. :32.00