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
A matrix: 2 × 3 of type dbl
614
812

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)
A matrix: 3 × 2 of type dbl
68
11
42

Note Lorsqu’on transpose un vecteur, R transforme ce vecteur en une matrice à une seule dimension:

vec<-1:5
t(vec)
A matrix: 1 × 5 of type int
12345

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. 1
  2. 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]
4
A
A matrix: 2 × 3 of type dbl
614
812

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]
  1. 6
  2. 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.02.54.05.57.08.5
1.53.04.56.07.59.0
2.03.55.06.58.09.5

Si l’on veut extraire la deuxième et la quatrième colonne

B[,c(2,4)]
2.55.5
3.06.0
3.56.5
B<-t(B)
B
1.01.52.0
2.53.03.5
4.04.55.0
5.56.06.5
7.07.58.0
8.59.09.5

Si l’on veut extraire la troisième et la cinquième ligne;

B[c(3,5),]
4 4.55
7 7.58

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)
10000
01000
00100
00010
00001

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
361 16
641 4
B/2
0.501.252.002.753.504.25
0.751.502.253.003.754.50
1.001.752.503.254.004.75
C<-B*2
B+C
3.0 7.512.016.521.025.5
4.5 9.013.518.022.527.0
6.0 10.515.019.524.028.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
307255
326057
317856
276755
367149

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
-12213
01614
-12613
-31913
222 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='___')
  1. '3/___12'
  2. '3/___13'
  3. '3/___14'
  4. '3/___15'
  5. '3/___16'
A
FairbanksSan FranciscoChicago
3/12-12213
3/13 01614
3/14-12613
3/15-31913
3/16 222 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 AngelesSeattleHonolulu
3/12311732
3/13291633
3/14281233
3/15271632
3/16261832

cbind#

La fonction cbind permet de concaténer deux matrices ensemble en colonne

cbind(A,B)
FairbanksSan FranciscoChicagoLos AngelesSeattleHonolulu
3/12-12213311732
3/13 01614291633
3/14-12613281233
3/15-31913271632
3/16 222 9261832

rbind#

La fonction rbind permet de concaténer deux matrices ensemble une par-dessus l’autre

rbind(A,B)
FairbanksSan FranciscoChicago
3/12-12213
3/13 01614
3/14-12613
3/15-31913
3/16 222 9
3/12311732
3/13291633
3/14281233
3/15271632
3/16261832

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. -1
  2. 0
  3. -1
  4. -3
  5. 2
  6. 22
  7. 16
  8. 26
  9. 19
  10. 22
  11. 13
  12. 14
  13. 13
  14. 13
  15. 9
  16. 31
  17. 29
  18. 28
  19. 27
  20. 26
  21. 17
  22. 16
  23. 12
  24. 16
  25. 18
  26. 32
  27. 33
  28. 33
  29. 32
  30. 32

Quelques fonctions statistiques sur les matrices#

mat_comb
FairbanksSan FranciscoChicagoLos AngelesSeattleHonolulu
3/12-12213311732
3/13 01614291633
3/14-12613281233
3/15-31913271632
3/16 222 9261832

Lorsqu’on applique la fonction min, on obtient alors la valeur minimale de toutes les valeurs contenues dans la matrice

min(mat_comb)
-3
max(mat_comb)
33
range(mat_comb)
  1. -3
  2. 33
sd(mat_comb)
11.1923619275487

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)
FairbanksSan FranciscoChicagoLos AngelesSeattleHonolulu
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