Data visualization and analysis

Description de l’éditeur

Data visualization and analysis in second language researchCette introduction aux techniques de visualisation des données et modèles statistiques se concentre sur trois types de données, notamment : les données continues, binaires, et scalaires. L’objectif est d’aider les chercheurs à comprendre pleinement les modèles de régressions, et à les utiliser dans leurs recherches. Garcia offre une couverture avancée sur l’analyse bayésienne, des données simulées, ainsi que des exercices, des scripts exécutables, et des conseils pratiques sur les dernières extensions pour R.

En démontrant les avantages des modèles statistiques pour les études sur l’acquisition d’une langue seconde, le livre est aussi une ressource pour les étudiants et les chercheurs dans la linguistique appliquée et la linguistique de corpus qui s’intéressent à l’analyse des données quantitatives.

NoteFichiers

Accéder aux fichiers du livre sur http://osf.io/hpt4g.


Points principaux

  • Introduction à la programmation en R
  • Concentration sur la visualisation des données
  • Régressions linéaire, logistique, et ordinale
  • Modèles hiérarchiques (effets mixtes)
  • Chapitre sur l’analyse bayésienne
  • Codes en R qui peuvent être reproduits par le lecteur
  • Organisation des fichiers avec RProjects

Highly recommended as an accessible introduction to the use of R for analysis of second language data. Readers will come away with an understanding of why and how to use statistical models and data visualization techniques in their research.

Lydia White, James McGill Professor Emeritus, McGill University

Curious where the field’s quantitative methods are headed? The answer is in your hands right now! Whether we knew it or not, this is the book that many of us have been waiting for. From scatter plots to standard errors and from beta values to Bayes theorem, Garcia provides us with all the tools we need—both conceptual and practical—to statistically and visually model the complexities of L2 development.

Luke Plonsky, Professor, Northern Arizona University

This volume is a timely and must-have addition to any quantitative SLA researcher’s data analysis arsenal, whether you are downloading R for the first time or a seasoned user ready to dive into Bayesian analysis. Guilherme Garcia’s accessible, conversational writing style and uncanny ability to provide answers to questions right as you’re about to ask them will give new users the confidence to make the move to R and will serve as an invaluable resource for students and instructors alike for years to come.

Jennifer Cabrelli, Professor, University of Illinois at Chicago

[…] this book’s strength lies in giving readers just enough to enable them to quickly apply their newly acquired knowledge and skills to their own data in order to produce complex, journalworthy analyses. The book is timely, with increasing expectations for more refined accounts of the diverse populations and intricate results stemming from studies of second language acquisition and bi/plurilingualism, as well as other fields of linguistic research.

Senécal & Sabourin (2023)


Nouvelles et mises à jour

Voici quelques mises à jour et informations supplémentaires concernant le code utilisé dans le livre. Certaines de ces informations sont basées sur les questions que je reçois au sujet dudit code. Cette page sera modifiée de temps en temps pour refléter les mises à jour des extensions et fonctions utilisées dans le livre. (e.g., mutate_...(); voyez ici).

  1. La fonction mutate_if() a été remplacée par across().
  • Avant : mutate_if(is.character, as.factor)
  • Maintenant : mutate(across(where(is_character), as_factor))
  1. En plus d’utiliser scale_x_discrete(label = abbreviate) pour abréger le texte sur les axes d’un graphique, vous pouvez aussi utiliser scale_x_discrete(labels = ...)), qui vous permet de choisir comment le texte sera abrégé.
  2. Pour en savoir plus sur la manière de rapporter des analyses bayésiennes, voyez cette publication récente de Kruschke : Bayesian Analysis Reporting Guidelines.
  3. À partir de R 4.1+, le pipe natif |> peut remplacer le pipe de magrittr %>% (lisez plus ici).
  4. guide = FALSE a été remplacé par guide = "none".
  5. Au lieu d’utiliser select(vars), où vars est un vecteur avec des colonnes (variables) d’intérêt, vous devez maintenant utiliser select(all_of(vars)).
  6. Consultez les nouvelles modifications apportées aux fonctions de vecteurs dans dplyr 1.1.0 ici
  7. Vous pouvez utiliser read_csv() et bind_rows() (avec list.files() et full.names = T) pour combiner plusieurs fichiers csv dans un même répertoire (ce qui évite l’utilisation d’un for-loop) — merci à Natália B. Guzzo de l’avoir signalé.
  8. Lorsque vous travaillez avec des facteurs, la fonction fct_relevel() de l’extension forcats offre beaucoup plus de flexibilité que la fonction relevel().

Des extensions utiles non discutées dans le livre

  • dtplyr offre le pouvoir de l’extension data.table avec la syntaxe familière du tidyverse. Vérifiez-le ici.
  • case_when() (de dplyr) est une excellente fonction pour éviter d’utiliser if_else() plusieurs fois. Voyez la documentation ici.
  • sample_n() affiche quatre (par défaut) lignes aléatoires d’un tableau de données.
  • dplyr 1.1.0+ offre maintenant le groupage avant opération avec l’argument .by dans des fonctions telles que mutate(), summarize(), etc. Un avantage clé est que nous n’avons plus besoin de dégrouper() les variables après avoir appliqué la fonction. Consultez mon blog (en anglais) sur le nouveau groupage et sur la possibilité de créer un snippets pour automatiser son utilisation.
# Avant :
my_data |> 
  group_by(group, condition) |> 
  mutate(new_column = mean(number_column)) |> 
  ungroup()

# Maintenant :
my_data |> 
  mutate(new_column = mean(number_column), .by = c(group, condition))
  • R 4.2.0 et R 4.3.0 fournissent également quelques fonctionnalités intéressantes, comme l’utilisation de _ comme placeholder pour le pipe natif |> (en fait, l’équivalent de . lorsque vous utilisez %>%). De plus, vous pouvez extraire des valeurs spécifiques qui sont produites dans un pipeline d’une manière propre et élégante. Par exemple, le code ci-dessous extrait les coefficients d’un modèle linéaire.
data |> lm(response ~ predictor, data = _) |> _$coef

  • Faute de frappe à la page 152, paragraphe 2 : “we already know the probability”.
  • Faute de frappe à la page 218. Pour une raison mystérieuse, la version publiée du livre contient « Monte Carlos Markov Chain » (premier paragraphe), qui devrait évidemment se lire « Markov Chain Monte Carlo ». C’est en fait ce qui figure dans le glossaire à la fin du livre, à la page 254.
  • Clarification à la page 225, paragraphe 2 (l’interpretation du code block 55) : “First, we have our estimates and their respective standard errors”. N’oubliez pas que dans les modèles bayésiens, l’erreur type des coefficients correspond à l’écart type de la probabilité a posteriori.
  • Clarification sur la fonction mean_cl_boot mentionnée à la page 95 (paragraphe 1) : cette fonction (de l’extension Hmisc) calcule des intervalles de confiance par bootstrap. Elle rééchantillonne les données avec remise (1 000 fois par défaut), calcule la moyenne de chaque rééchantillon et utilise les 2,5e et 97,5e centiles de ces moyennes comme intervalle à 95 %. Par conséquent, les barres d’erreurs représentent des intervalles de confiance, et non des erreurs types, et à 95 % elles seront plus larges que les barres représentant les erreurs types (environ ±2 ET). Pour des intervalles fondés sur l’approximation normale, on utilise plutôt mean_cl_normal.
  • À la page 20 : “Simply go to RStudio > Preferences (or hit Cmd + , on a Mac)”. Dans les versions les plus récentes de RStudio, cela a changé vers “Tools > Global Options…” (même raccourci).
  • Chapitre 10 (Going Bayesian) : Notez que l’output d’un modèle brm() montre les intervalles crédibles bilatéraux à 95 % (IC l-95% et IC u-95%) basés sur les quantiles. Si la distribution a posteriori est symétrique (c’est-à-dire approximativement normale), cet intervalle coïncidera pratiquement avec l’intervalle de densité le plus élevé, HDI (c’est le cas dans le chapitre). Cependant, dans le cas de distributions asymétriques, l’intervalle indiqué dans l’output du brm() ne coïncidera pas avec les HDIs.

Chapitre 7 (Logistic regression)

  • Faute de frappe à la page 145, paragraphe 3 : “while a logistic regression predicts” (et non « variable »).
  • Page 146, paragraphe 3 : « ln(0.25) = −0.60, and ln(4) = +0.60 » devrait se lire « ln(0.25) = −1.39, and ln(4) = +1.39 » (les valeurs imprimées sont des logarithmes en base 10). C’est ce qu’indique le tableau 7.1 (P = 0,80 → cote = 4 → ln(cote) = 1,39).
  • Page 147, figure 7.3 : pour la même raison, les deux points sur la ligne des log-odds devraient se trouver à ±1,39 (entre 1 et 2 de chaque côté), et non à ±0,6. La ligne des cotes est correcte, et l’objectif de la figure (les log-odds sont symétriques) n’est pas affecté.
  • Page 148, §7.1.1 : « the concept of residuals doesn’t apply » est trop fort. Les modèles logistiques ne sont pas ajustés par les moindres carrés, et on ne peut pas calculer les résidus sur l’échelle des log-odds (les 0 et les 1 observés seraient à ±∞), mais les résidus existent sur l’échelle des probabilités (p. ex., \(y - \hat{p}\)), ainsi que les résidus de déviance et de Pearson. Ils sont d’ailleurs utilisés plus loin dans le chapitre : la déviance résiduelle (p. 153) et le graphique des résidus groupés (p. 170). Ce qui ne s’applique pas, ce sont les moindres carrés et le \(R^2\) classique.
  • Pages 152, 155 et 158 : la notation \(e^{|\hat\beta|}\) sert à exprimer « par un facteur de » dans la direction de l’effet. La conversion générale des log-odds aux cotes est \(e^{\hat\beta}\) : pour \(\hat\beta = -0,67\) (p. 158), \(e^{-0,67} = 0,51\), c’est-à-dire que la cote est multipliée par 0,51 (ou divisée par 1,95).
  • Page 152, dernier paragraphe : « a positive difference of 30% » signifie 30 points de pourcentage (de 0,20 à 0,50).
  • Page 157, paragraphe 1 : « \(H_0: \hat\beta_0 = 0\) » devrait se lire « \(H_0: \beta_0 = 0\) » : les hypothèses portent sur les paramètres, et non sur les estimations.
  • Page 157, paragraphe 2 : un intercept négatif ne signifie pas que la condition NoBreak « diminue » la probabilité de choisir l’attachement bas. L’intercept est simplement le log-odds pour NoBreak, qui est inférieur à 0 (c.-à-d. \(P < 0,5\)).
  • Faute de frappe à la page 157, paragraphe 3 : “In a continuous predictor” (et non « factor »).
  • Page 161, paragraphe 1 : un log-odds de zéro correspond à une probabilité de 50 % seulement pour l’intercept. Pour toutes les autres estimations, \(H_0: \beta = 0\) signifie qu’il n’y a aucun changement de log-odds par rapport au niveau de référence (c.-à-d. un rapport de cotes de \(e^0 = 1\)), peu importe la probabilité de départ.
  • Pages 164–165 : les estimations de ConditionHigh, ConditionLow, ProficiencyInt et ProficiencyAdv ne sont pas « the predicted log-odds » de chaque condition ou groupe; elles représentent le changement de log-odds par rapport à l’intercept (NoBreak, Nat). Par exemple, le log-odds prédit pour les locuteurs natifs dans la condition High est \(\hat\beta_0 + \hat\beta_{High} = 0,53 - 1,02 = -0,49\) (\(P \approx 0,38\)).
  • Pages 165, 167 et 169 : le code block 39 et le tableau 7.2 présentent ProficiencyInt avant ProficiencyAdv, mais le code du livre (où Nat devient le niveau de référence après l’ordre alphabétique) présente d’abord ProficiencyAdv, comme dans le code block 38. Le code block 40 extrait les estimations selon leur position et suppose ce dernier ordre. Il est plus sûr de les extraire par leur nom, p. ex., coef(fit_glm4)[["ProficiencyAdv"]]. La figure 7.7 est correcte.
  • Page 166, paragraphe 1 : « \(\hat\beta = 1.08\) » devrait se lire « \(\hat\beta = 1.07\) » (voir le code block 39 et le tableau 7.2 : 1,072).
  • Faute de frappe à la page 166, Reporting results : “significantly affected by” (et non « affect »).
  • Pages 167–168 : le texte désigne les niveaux de Sig par « Yes » et « No », mais le code block 40 utilise "yes" et "no" en minuscules.
  • Page 168, paragraphe 2 : les tests de Wald ne comparent pas un modèle avec et sans la variable \(X\); c’est plutôt la description du test du rapport de vraisemblance (anova(..., test = "LRT")). Un test de Wald divise chaque estimation par son erreur type (\(z = \hat\beta/ET\)) et compare le résultat à une distribution normale centrée réduite : c’est la valeur z value dans l’output de summary().
  • Page 170, paragraphe 1 : le graphique des résidus groupés devrait utiliser les probabilités prédites et les résidus bruts : binnedplot(fitted(fit_glm4), residuals(fit_glm4, type = "response")). Avec les valeurs par défaut utilisées dans le livre, predict() renvoie des log-odds et residuals() renvoie des résidus de déviance, ce qui ne correspond pas aux intervalles de confiance tracés par binnedplot().

Comment citer

Garcia, G. D. (2021). Data visualization and analysis in second language research. New York, NY: Routledge.

@book{garcia_2021_dvaslr,
    title = {Data visualization and analysis in second language research},
    author = {Garcia, Guilherme Duarte},
    year = {2021},
    address = {New York, NY},
    publisher = {Routledge},
    isbn={9780367469610}}
ImportantSubvention pour le projet

Une partie de ce projet a reçu le ASPiRE Junior Faculty Award à l’université Ball State (2020–2021).

Copyright © Guilherme Duarte Garcia

Les références

Senécal, A., & Sabourin, L. (2023). Review of "Data Visualization and Analysis in Second Language Research" by Guilherme D. Garcia. Canadian Journal of Linguistics/Revue canadienne de linguistique, 1‑4. https://doi.org/10.1017/cnj.2023.25