TD 1

Exercice 1

1)

Créer les trois vecteurs ci-dessous à l’aide des fonctions rep(), seq(), unlist() et lapply():

[1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

[1] 1 1 1 2 2 2 3 3 3 4 4 4

[1] 1 1 2 2 2 3 3 3 3 4 4 4 4 4

rep(1:5, 3)
##  [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
rep(1:4, each = 3)   
##  [1] 1 1 1 2 2 2 3 3 3 4 4 4
unlist(lapply(1:4, function(k) rep(k, k+1)))
##  [1] 1 1 2 2 2 3 3 3 3 4 4 4 4 4

2)

A l’aide des fonctions paste(), lapply() et unlist(), générer le vecteur suivant:

[1] “A1)” “A2)” “A3)” “A4)” “A5)” “A6)” “A7)” “A8)” “A9)” “A10)”

unlist(lapply(1:10, function(k) paste('A', k, ')', sep = "")))
##  [1] "A1)"  "A2)"  "A3)"  "A4)"  "A5)"  "A6)"  "A7)"  "A8)"  "A9)"  "A10)"

3)

Le vecteur letters contient les 26 lettres de l’alphabet. Trouver la position de la lettre q, puis créer le vecteur de la forme

“a1” “b2” … “q??”

numbers <- 1:26
indice_q <- numbers[letters == "q"]
unlist(lapply(1:indice_q, function(k) paste(letters[k], numbers[k], sep = '')))
##  [1] "a1"  "b2"  "c3"  "d4"  "e5"  "f6"  "g7"  "h8"  "i9"  "j10" "k11" "l12"
## [13] "m13" "n14" "o15" "p16" "q17"

Exercice 2

Ecrire le code R permettant de

  • Créer la matrice

    [,1] [,2] [,3] [,4]

[1,] 1 5 5 0

[2,] 0 5 6 1

[3,] 3 0 3 3

[4,] 4 4 4 2

et de l’afficher

  • Afficher le vecteur contenant les éléments diagonaux de la matrice
  • Sélectionner les deux premières lignes
  • Sélectionner les deux dernières colonnes
  • Sélectionner toutes les colonnes sauf la 3ème
  • Calculer le déterminant de la matrice
mat <- matrix(c(1,5,5,0,0,5,6,1,3,0,3,3,4,4,4,2), nrow = 4, byrow = T)
mat
##      [,1] [,2] [,3] [,4]
## [1,]    1    5    5    0
## [2,]    0    5    6    1
## [3,]    3    0    3    3
## [4,]    4    4    4    2
diag(mat)
## [1] 1 5 3 2
mat[1:2, ]
##      [,1] [,2] [,3] [,4]
## [1,]    1    5    5    0
## [2,]    0    5    6    1
mat[, 3:4]
##      [,1] [,2]
## [1,]    5    0
## [2,]    6    1
## [3,]    3    3
## [4,]    4    2
mat[, -3]
##      [,1] [,2] [,3]
## [1,]    1    5    0
## [2,]    0    5    1
## [3,]    3    0    3
## [4,]    4    4    2
det(mat)
## [1] 60

Exercice 3

1)

Charger et afficher les 5 premières observations du jeu de données iris.

data("iris")
iris[1:5, ]
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa

2)

Créer un sous jeu de données iris_V1 contenant les observations associées à la modalité versicolor sur la variable species. Afficher les observations 10 à 15.

iris_V1 <- iris[iris$Species=='versicolor',  ]
iris_V1[10:15, ]
##    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 60          5.2         2.7          3.9         1.4 versicolor
## 61          5.0         2.0          3.5         1.0 versicolor
## 62          5.9         3.0          4.2         1.5 versicolor
## 63          6.0         2.2          4.0         1.0 versicolor
## 64          6.1         2.9          4.7         1.4 versicolor
## 65          5.6         2.9          3.6         1.3 versicolor

4)

Créer iris_V2 en triant par ordre décroissant les données de iris_V1 suivant la variable Sepal.length. On utilisera la fonction order.

iris_V2 <- iris_V1[order(iris_V1$Sepal.Length, decreasing = TRUE), ]
iris_V2[1:10, ]
##    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 51          7.0         3.2          4.7         1.4 versicolor
## 53          6.9         3.1          4.9         1.5 versicolor
## 77          6.8         2.8          4.8         1.4 versicolor
## 66          6.7         3.1          4.4         1.4 versicolor
## 78          6.7         3.0          5.0         1.7 versicolor
## 87          6.7         3.1          4.7         1.5 versicolor
## 59          6.6         2.9          4.6         1.3 versicolor
## 76          6.6         3.0          4.4         1.4 versicolor
## 55          6.5         2.8          4.6         1.5 versicolor
## 52          6.4         3.2          4.5         1.5 versicolor

Exercice 4

1)

Calculer les statistiques descriptives (moyenne, écart-type, minimum et maximum) pour chacune des trois variables du jeu de données ethanol du package MASS.

library(lattice)
data(ethanol)
apply(ethanol, 2, mean)
##        NOx          C          E 
##  1.9573750 12.0340909  0.9264773
apply(ethanol, 2, sd)
##       NOx         C         E 
## 1.1327102 3.9324727 0.2035688
apply(ethanol, 2, min)
##   NOx     C     E 
## 0.370 7.500 0.535
apply(ethanol, 2, max)
##    NOx      C      E 
##  4.028 18.000  1.232

2)

Calculer les quartiles pour chacune des trois variables à l’aide des fonctions apply et quantile

apply(ethanol, 2, function(x) quantile(x, probs = c(0.25, 0.5, 0.75)))
##        NOx      C       E
## 25% 0.9530  8.625 0.76175
## 50% 1.7545 12.000 0.93200
## 75% 3.0030 15.000 1.10975

3)

Créer un data frame stat_desc qui agrège les résultats des questions précédentes, c’est à dire de la forme:

statistique NOx C E
moyenne 1.957 12.03 0.9265
Ecart-type 1.133 3.932 0.2036
minimum 0.37 7.5 0.535
maximum 4.028 18 1.232
1er quartiles 0.953 8.625 0.7618
médiane 1.754 12 0.932
3ème quartile 3.003 15 1.11
library(pander)
stat_desc_temp <- as.data.frame(apply(ethanol, 2, function(x) c(mean(x), sd(x), min(x), max(x), quantile(x, probs = c(0.25, 0.5, 0.75)))))
stat_desc <- data.frame(statistique = c('moyenne', 'écart-type', 'minimum', 'maximum', '1er quartiles', 'médiane', '3ème quartile'), stat_desc_temp)
rownames(stat_desc) <- c()
#pander(stat_desc)
stat_desc
##     statistique      NOx         C         E
## 1       moyenne 1.957375 12.034091 0.9264773
## 2    écart-type 1.132710  3.932473 0.2035688
## 3       minimum 0.370000  7.500000 0.5350000
## 4       maximum 4.028000 18.000000 1.2320000
## 5 1er quartiles 0.953000  8.625000 0.7617500
## 6       médiane 1.754500 12.000000 0.9320000
## 7 3ème quartile 3.003000 15.000000 1.1097500

Exercice 5

1)

Charger le jeu de données Aids2 du package MASS et produire un résumé statistique en appliquant la fonction summary.

library(MASS)
data(Aids2)
summary(Aids2)
##    state      sex           diag           death       status      T.categ    
##  NSW  :1780   F:  89   Min.   : 8302   Min.   : 8469   A:1082   hs     :2465  
##  Other: 249   M:2754   1st Qu.:10163   1st Qu.:10672   D:1761   blood  :  94  
##  QLD  : 226            Median :10665   Median :11235            hsid   :  72  
##  VIC  : 588            Mean   :10584   Mean   :10990            other  :  70  
##                        3rd Qu.:11103   3rd Qu.:11504            id     :  48  
##                        Max.   :11503   Max.   :11504            haem   :  46  
##                                                                 (Other):  48  
##       age       
##  Min.   : 0.00  
##  1st Qu.:30.00  
##  Median :37.00  
##  Mean   :37.41  
##  3rd Qu.:43.00  
##  Max.   :82.00  
## 

2)

Créer un vecteur, de taille légal au nombre de variables, indiquant par un booléen si la variable est numérique ou pas. Afficher ce vecteur.

unlist(lapply(Aids2[1, ], is.numeric))
##   state     sex    diag   death  status T.categ     age 
##   FALSE   FALSE    TRUE    TRUE   FALSE   FALSE    TRUE

3)

Créer un jeu de données Aids2-qual contenant les variables qualitative de Aids2.

Aids_qual <- Aids2[, !unlist(lapply(Aids2[1, ], is.numeric))]

4)

Donner les modalités de chaque variable qualitative en utilisant la fonction levels(). Les modalité de chaque variables seront stockés dans une liste, chaque élément de la liste prendra le nom de la variable associée aux modalités.

list_modalite <- lapply(1:ncol(Aids_qual), function(k) levels(Aids_qual[, k]))
names(list_modalite) <- names(Aids_qual)
list_modalite
## $state
## [1] "NSW"   "Other" "QLD"   "VIC"  
## 
## $sex
## [1] "F" "M"
## 
## $status
## [1] "A" "D"
## 
## $T.categ
## [1] "hs"     "hsid"   "id"     "het"    "haem"   "blood"  "mother" "other"