2  Intro à R

Barnier (2023) (chap. 1–3; 5–7)

Ce chapitre se concentre sur des exercices de pratique pour vous familiariser avec R. Votre pratique maintenant sera essentielle pendant le cours : considérez ce temps-ci comme un investissement. Les exercices sont basés sur la lecture des chapitres de Barnier (2023). Après avoir terminé les exercices ci-dessous, consultez les solutions (solutions/ch2.R) pour vous assurez que vos réponses sont correctes.

Comment organiser vos réponses

Créez un script séparé pour les exercices de chaque chapitre. Par exemple, script_ch2.R serait le script où vous répondez à toutes les questions ci-dessous. C’est une façon simple d’avoir une structure organisée pour vos fichiers. Après, enregistrez ce script dans un dossier logique (vous pouvez créer un nouveau dossier pour vos scripts/réponses). N’oubliez pas que le fichier solutions contiendra les solutions pour les questions, donc vous voulez peut-être séparer vos réponses des solutions.

2.1 Les vecteurs

Question 1. Créez un nouveau script (script_1.R). Dans le script, créez un objet (vecteur) avec les nombres 5, 10, 15, 20, 25, 30, 35, 40, 45, 50.

Question 2. Créez un objet (vecteur) avec quelques mots (caractères). Vérifiez la classe de l’objet.

Question 3. Créez un objet avec des nombres et des mots. Quelle sera la classe de cet objet?

Question 4. Créez un objet, moyenne, avec la moyenne de l’objet créé ci-dessus (1). Faites la même chose pour l’écart-type et.

Explorons les concepts de variance et d’écart-type.

La formule de la variance d’échantillon :

\[ \text{Variance} = s^2 = \frac{\sum_{i=1}^{n} (x_i - \bar{x})^2}{n-1} \]

Pour calculer manuellement la dispersion (c.-à-d. la variance) :

  1. Soustrayez la moyenne des éléments dans un objet et élevez le tout au carré.
  2. Additionnez le résultat et divisez-le par le nombre d’éléments dans l’objet - 1.

Heureusement, R nous donne une fonction pour automatiser ce calcul : la fonction var(). Testons-la avec nos exemples :

Finalement, on peut calculer l’écart type en prenant la racine carré de la variance.

La formule de l’écart-type d’échantillon :

\[ \text{Écart-type} = s = \sqrt{\frac{\sum_{i=1}^{n} (x_i - \bar{x})^2}{n-1}} \]

Code
sqrt(
  sum((objet - moyenne)^2) / (length(objet)-1)
)

Ou, plus simplement, on utilise la fonction sd().

Code
sd(mesNombres)

C’est très facile de calculer la variance et l’écart-type en R avec les fonctions de base : var() et sd(). Dans notre cours, on va utiliser l’écart-type fréquemment (il est plus intuitif que la variance).

Code
# La variance d'un objet numérique
var(objet)

# L'écart-type d'un objet numérique
sd(objet)
L’opérateur d’affectation

Traditionnellement, on utilise <- pour créer une variable en R. Ici, on utilise =, qui sert le même objectif. Bien que les deux soient acceptables, il y a une préférence pour <- dans le LSP (Language Syntax Protocol) du langage.


2.2 Les vecteurs en détail

Question 5. Créez un vecteur langues avec les mots français, anglais, espagnol et allemand. Nommez-le langues.

Question 6. Exécuter la commande nchar(langues). Quelle est la réponse?

Question 7. Comment ordonner alphabétiquement les langues?

Question 8. Quelle sera la conséquence d’exécuter langues = sort(langues)?

Comment nommer nos variables?

Il est toujours important d’être cohérent. Nos variables auront fréquemment plus d’un mot, donc il faut décider comment combiner les mots de façon intuitive. Les deux façons les plus populaires de nommer nos variables sont cammelCase et snake_case.

2.3 Les tableaux

Les tableaux sont les objets les plus importants (normalement). Bien que nous les importions à partir d’un fichier, il est possible de créer un tableau ici manuellement. Un tableau est simplement une collection des vecteurs (chaque colonne est un vecteur). C’est pourquoi il est important de bien connaître les vecteurs.

Il y a plusieurs types de tableaux : tibbles, data frames, data tables sont les plus importants. On va se concentrer sur les tibbles, qui peuvent être créées avec la fonction tibble() ou tribble(). Tapez ?tibble() et ?tribble() pour comprendre les différences entre elles. Il faut charger l’extension tidyverse pour utiliser ces fonctions (qui proviennent de l’extension tibble, incluse dans tidyverse).

Voici un exemple d’un tableau (tibble) en deux formats : large et long.

2.3.1 Un tableau large

Il s’agit d’un tableau où plusieurs colonnes représentent une même variable. Ici, phonologie, syntaxe et phonetique pourraient être classé dans une même variable : cours. En plus, des tableaux larges contiennent plus d’une observation par ligne : ici, on voit trois notes par ligne.

Code
#
library(tidyverse) 

# Large
large = tribble(~id, ~phonologie, ~syntaxe, ~phonetique,
                "PLK",        80,       55,          92,
                "GP",         67,       79,          83,
                "MFG",        72,       99,          90)

# La fonction tribble permet de créer manuellement un tableau ligne par ligne

large
#> # A tibble: 3 × 4
#>   id    phonologie syntaxe phonetique
#>   <chr>      <dbl>   <dbl>      <dbl>
#> 1 PLK           80      55         92
#> 2 GP            67      79         83
#> 3 MFG           72      99         90

2.3.2 Un tableau long

Dans le tableau long ci-dessous, chaque ligne représente une seule observation, et chaque colonne représente une seule variable. Ce type d’organisation de données est appelé tidy data en anglais. Notez que les contenus des deux tableaux ici sont identiques.

Code
#
# Long
long = tribble(~id,           ~cours,     ~note,
               "PLK",   "phonologie",        80,
               "PLK",      "syntaxe",        55,
               "PLK",   "phonetique",        92,
               
               "GP",    "phonologie",        67,
               "GP",       "syntaxe",        79,
               "GP",    "phonetique",        83,
               
               "MFG",   "phonologie",        72,
               "MFG",      "syntaxe",        99,
               "MFG",   "phonetique",        90)


# Visualiser le tableau :
long
#> # A tibble: 9 × 3
#>   id    cours       note
#>   <chr> <chr>      <dbl>
#> 1 PLK   phonologie    80
#> 2 PLK   syntaxe       55
#> 3 PLK   phonetique    92
#> 4 GP    phonologie    67
#> 5 GP    syntaxe       79
#> 6 GP    phonetique    83
#> 7 MFG   phonologie    72
#> 8 MFG   syntaxe       99
#> 9 MFG   phonetique    90

2.3.3 Transformation wide-to-long

On utilise tidyverse (spécifiquement l’extension tidyr) pour transformer un tableau de large à long et vice-versa.

Code
#
large |> 
1  pivot_longer(names_to = "cours",
2               values_to = "note",
3               cols = phonologie:phonetique)
1
names_to : Le nom de la nouvelle colonne pour les noms des colonnes dans le tableau original (large)
2
values_to : Le nom de la nouvelle colonnes pour les valeurs (les notes ici)
3
cols : Quelles colonnes sont ciblées pour la transformation
#> # A tibble: 9 × 3
#>   id    cours       note
#>   <chr> <chr>      <dbl>
#> 1 PLK   phonologie    80
#> 2 PLK   syntaxe       55
#> 3 PLK   phonetique    92
#> 4 GP    phonologie    67
#> 5 GP    syntaxe       79
#> 6 GP    phonetique    83
#> 7 MFG   phonologie    72
#> 8 MFG   syntaxe       99
#> 9 MFG   phonetique    90

Voici une figure de Wickham, Çetinkaya-Rundel, et Grolemund (2023) (chapitre 6) qui nous aide à visualiser ce genre de transformation :

Démonstration visuelle de la transformation wide-to-long

La transformation wide-to-long joue un rôle fondamental dans la préparation de données

2.3.4 Transformation long-to-wide

On peut aussi générer un tableau large à partir d’un tableau long.

Code
#
long |> 
  pivot_wider(names_from = cours,
              values_from = note)
#> # A tibble: 3 × 4
#>   id    phonologie syntaxe phonetique
#>   <chr>      <dbl>   <dbl>      <dbl>
#> 1 PLK           80      55         92
#> 2 GP            67      79         83
#> 3 MFG           72      99         90

Quand on travaille avec plusieurs colonnes (soit le tableau large ou long), il est utile de transposer les données pour être capable de visualiser rapidement toutes les colonnes sur l’écran. On peut utiliser la fonction glimpse() :

Code
#
glimpse(large)
#> Rows: 3
#> Columns: 4
#> $ id         <chr> "PLK", "GP", "MFG"
#> $ phonologie <dbl> 80, 67, 72
#> $ syntaxe    <dbl> 55, 79, 99
#> $ phonetique <dbl> 92, 83, 90

glimpse(long)
#> Rows: 9
#> Columns: 3
#> $ id    <chr> "PLK", "PLK", "PLK", "GP", "GP", "GP", "MFG", "MFG", "MFG"
#> $ cours <chr> "phonologie", "syntaxe", "phonetique", "phonologie", "syntaxe", …
#> $ note  <dbl> 80, 55, 92, 67, 79, 83, 72, 99, 90

Le « pipe » (|>) permet de combiner plusieurs fonctions dans une ordre beaucoup plus intuitive. Le raccourci pour le « pipe » est {{< kbd Command+shift+M >}} (Mac) ou {{< kbd ctrl+shift+M >}} (Windows). Examiner le code ci-dessus pour comparer deux versions d’une même séquence de commandes. L’utilisation du « pipe » rend le code beaucoup plus facile à lire. Veuillez noter que |> est la version native de %>%, un autre « pipe » de l’extension magrittr, incluse dans tidyverse (consultez les diapos pour apprendre comment définir |> par défaut dans RStudio).

Code
#
# Filtrer les donnes et créer une nouvelle colonne (note au carré) sans utiliser le « pipe » :
mutate(filter(long, note > 70), note_carre = note^2)
#> # A tibble: 7 × 4
#>   id    cours       note note_carre
#>   <chr> <chr>      <dbl>      <dbl>
#> 1 PLK   phonologie    80       6400
#> 2 PLK   phonetique    92       8464
#> 3 GP    syntaxe       79       6241
#> 4 GP    phonetique    83       6889
#> 5 MFG   phonologie    72       5184
#> 6 MFG   syntaxe       99       9801
#> 7 MFG   phonetique    90       8100

# Avec le « pipe » :
long |> 
    filter(note > 70) |> 
    mutate(note_carre = note^2)
#> # A tibble: 7 × 4
#>   id    cours       note note_carre
#>   <chr> <chr>      <dbl>      <dbl>
#> 1 PLK   phonologie    80       6400
#> 2 PLK   phonetique    92       8464
#> 3 GP    syntaxe       79       6241
#> 4 GP    phonetique    83       6889
#> 5 MFG   phonologie    72       5184
#> 6 MFG   syntaxe       99       9801
#> 7 MFG   phonetique    90       8100

Question 9. Quel type de tableau est le meilleur pour l’analyse de données à vos avis…?

Question 10. Quel type est le plus pour les résultats des questionnaires à partir des sites tels que Google Forms ou MS Forms?

Question 11. Comment calculer la moyenne générale des notes? Et l’écart-type?

Question 12. Comment créer une nouvelle colonne qui calcule la distance entre les notes et 100?

Question 13. Comment filtrer seulement les notes supérieures à 70?

Question 14. Comment calculer la moyenne par cours?

Pratique

Question 15. Importer le fichier sampleData.csv. Donnez-lui le nom donnees. Examinez les données attentivement pour comprendre leur structure.

Heureusement, RStudio vous aide à trouver des fichier si vous appuyez sur le Tab. Il est pourtant très utile de bien connaître la structure des fichiers dans notre projet. Si vous avez téléchargé les fichiers du cours comme indiqué, les chemins des fichiers seront plus faciles et logiques, étant données l’organisation de nos dossiers. Heureusement, RStudio effectue une recherche récursive dans les fichiers de votre projet. Donc, vous n’avez pas besoin d’ajouter donnees/mon_fichier.csv. Il suffit d’écrire mon_fichier.csv et Tab et RStudio listera le fichier même s’il est dans un dossier ou sous-dossier, ce qui sera très pratique dans notre cours!

Question 16. Les données sont-elles tidy? Autrement dit, le tableau est-il large ou long?

Question 17. Quelles sont les moyennes et les écarts-types des tests? Votre réponse doit inclure la fonction summarize().

Question 18. Les moyennes du groupe control sont-elles supérieures ou inférieures aux celles du groupe target?

Question 19. Commment ajouter une colonne qui contient la note au carré? Si vous utilisez Google ou ChatGPT, quel type de question posez-vous?

Question 20. Filtrez les données pour conserver seulement les étudiants dont les notes sont supérieures ou égales à 7.

2.4 Extra : tidyverse

Les neuf extensions dans tidyverse sont très utiles pour les différents éléments de l’analyse de données. Dans la figure ci-dessous, vous pouvez observer le rôle de chaque extension dans un projet typique d’analyse quantitative. Dans notre cours, on utilisera spécialement readr pour importer des données; tidyr pour organiser des tableaux; dplyr pour transformer des variables; et ggplot2 pour visualiser des patrons pertinents.

Les extensions de tidyverse utilisées dans une analyse de donées

Les extensions de tidyverse utilisées dans une analyse de donées