Tous les articles par Vincent Arnaud

Professeur agrégé (phonétique) Responsable du laboratoire de phonétique expérimentale Université du Québec à Chicoutimi

April 2023, on the front cover of Plos Computational Biology

A long-standing tradition in printed scientific journals is the cover image. As print publishing is disappearing, this tradition is fading, but some electronic journals have chosen to keep it alive.

The purpose of a cover image is to promote the journal, a specific research or the authors of a newly published article. Although such exposure does not necessarily guarantee more citations, including in Nature (Broadberry 2013; Wang et al., 2015; Kong and Wang, 2020; Battiston et al., 2022), it is with great pride that we announce that our latest scientific contribution published in Plos Computational Biology has been chosen to be the front cover of the April 2023 issue of this scientific publication.

PLoS Computational Biology Issue Image | Vol. 19(4) May 2023. (2023). PLOS Computational Biology, 19(4), ev19.i04. https://journals.plos.org/ploscompbiol/issue?id=10.1371/issue.pcbi.v19.i04

Arnaud, V., Pellegrino, F., Keenan, S., St-Gelais, X., Mathevon, N., Levréro, F., & Coupé, C. (2023). Improving the workflow to crack Small, Unbalanced, Noisy, but Genuine (SUNG) datasets in bioacoustics: The case of bonobo calls. PLOS Computational Biology, 19(4), e1010325. https://doi.org/10.1371/journal.pcbi.1010325

The picture and the editing of this cover image are the creation of François Pellegrino, co-author of this paper. The picture was taken at the Vallée des singes (France) and according to Corinne, this shot could have been entitled Kelele’s revenge

This announcement is relayed by :

References

Battiston, P., Sacco, P. L., & Stanca, L. (2022). Cover effects on citations uncovered: Evidence from Nature. Journal of Informetrics, 16(2), 101293. https://doi.org/10.1016/j.joi.2022.101293
Broadberry, L. (2013, january 9). Interactions: The Cover Stories. Altmetric. https://www.altmetric.com/blog/interactions-the-cover-stories/
Kong, L., & Wang, D. (2020). Comparison of citations and attention of cover and non-cover papers. Journal of Informetrics, 14(4), 101095. https://doi.org/10.1016/j.joi.2020.101095
Wang, X., Liu, C., & Mao, W. (2015). Does a paper being featured on the cover of a journal guarantee more attention and greater impact? Scientometrics, 102(2), 1815‑1821. https://doi.org/10.1007/s11192-014-1456-7

Cartographie et Dataviz

Dans l’univers de la visualisation de données (DataViz pour les intimes), la cartographie prend une grande place. De nombreux concours cartographiques sont organisés (voir par exemple, les résultats de celui organisé dans le cadre de la Journée SIG organisée par l’Université Laval en novembre 2020).

Il n’est cependant pas toujours aisé d’obtenir des fonds de carte ni même de les exploiter aisément. Quant aux données à projeter sur un tel fond de carte, là non plus il n’est parfois pas facile de les obtenir, même s’il s’agit de données ouvertes.

Dans ce court didacticiel, je propose, grâce aux packages ggmap, ggplot2, osmdata et sf, disponibles dans l’écosystème R, de construire une cartographie illustrative des pistes et autres voies cyclables et des chemins pédestres de Chicoutimi tels que répertoriés par le projet libre et collaboratif OpenStreetMap.

En premier lieu, les packages au sein desquels se trouvent les fonctions utilisées sont déclarés.

library(ggplot2)
library(ggmap)
library(osmdata)
library(sf)

La zone de délimitation (bounding box) qui constitue la portion terrestre à représenter sur la carte est manuellement définie sous la forme d’un vecteur nommé. Les coordonnées choisies ici (latitudes et longitudes minimales et maximales ) ne couvrent que la zone de l’arrondissement de Chicoutimi.

bbox.slsj <- c(-71.130267, 48.386369, -71.011821, 48.463147)
names(bbox.slsj) <- c("left", "bottom", "right", "top")

Dans le long bloc de code suivant, les fonctions opq(), add_osm_feature() et osm_data_sf() sont enchainées à l’aide de l’opérateur %>% pour extraire du projet OpenStreetMap les données suivantes et les stocker dans différents objets :

  • le réseau routier principal (trunk, motorway, primary) et leurs accès (link)
  • le réseau routier secondaire et local (road, secondary, tertiary, residential, living_street)
  • différents types de chemins pédestres

Concernant le réseau cyclable, dans un premier temps, sont extraites les pistes cyclables (value="cycleway"). Par la suite, sont extraites toutes les voies pouvant accueillir des cyclistes (key = "bicycle").

La fonction st_crop() est utilisée pour vérifier que seules les voies de communication situées dans la zone de délimitation préalablement définie sont conservées dans chacun de ces objets.

rues.principales.slsj <- opq(bbox = bbox.slsj) %>%
add_osm_feature(key = "highway", value = c("trunk", "motorway", "primary", "trunk_link", "motorway_link", "primary_link")) %>%
osmdata_sf()

rues.principales.slsj <- st_crop(rues.principales.slsj$osm_lines, c(ymin = bbox.slsj[[2]], ymax = bbox.slsj[[4]], xmin = bbox.slsj[[1]], xmax = bbox.slsj[[3]]))

rues.secondaires.slsj <- opq(bbox = bbox.slsj) %>%
add_osm_feature(key = "highway", value = c("road", "secondary", "tertiary", "residential", "living_street")) %>%
osmdata_sf()

rues.secondaires.slsj <- st_crop(rues.secondaires.slsj$osm_lines, c(ymin = bbox.slsj[[2]], ymax = bbox.slsj[[4]], xmin = bbox.slsj[[1]], xmax = bbox.slsj[[3]]))

velo.slsj <- opq(bbox = bbox.slsj) %>%
add_osm_feature(key = "highway", value = c("cycleway")) %>%
osmdata_sf()

velo.slsj <- st_crop(velo.slsj$osm_lines, c(ymin = bbox.slsj[[2]], ymax = bbox.slsj[[4]], xmin = bbox.slsj[[1]], xmax = bbox.slsj[[3]]))

velo2.slsj <- opq(bbox = bbox.slsj) %>%
add_osm_feature(key = "bicycle") %>%
osmdata_sf()

velo2.slsj <- st_crop(velo2.slsj$osm_lines, c(ymin = bbox.slsj[[2]], ymax = bbox.slsj[[4]], xmin = bbox.slsj[[1]], xmax = bbox.slsj[[3]]))

rando.slsj <- opq(bbox = bbox.slsj) %>%
add_osm_feature(key = "highway", value = c("pedestrian", "footway", "track", "path")) %>%
osmdata_sf()
 
rando.slsj <- st_crop(rando.slsj$osm_lines, c(ymin = bbox.slsj[[2]], ymax = bbox.slsj[[4]], xmin = bbox.slsj[[1]], xmax = bbox.slsj[[3]]))

Il est intéressant de noter que grâce au projet OpenStreetMap, il est possible d’établir une distinction entre les pistes cyclables et les autres voies cyclables.

En contexte québécois, le MTQ (2008) définit une piste cyclable comme se distinguant « des autres types de voies cyclables par le fait qu’elle est toujours séparée physiquement de la circulation automobile, qu’elle soit aménagée en site propre ou à l’intérieur d’une emprise routière. » ; les autres voies cyclables pouvant être une bande cyclable, une chaussée désignée ou un accotement revêtu.

Le bloc de code suivant permet de télécharger et stocker dans l’objet map.slsj un fond de carte Stamen en noir et blanc (bw) de la zone géographique choisie. Le fond de carte terrain-background ne contient que la topographie du lieu.

map.slsj <- get_stamenmap(c(bbox.slsj), zoom=13, maptype="terrain-background", color = "bw")

Enfin, la carte est construite au moyen des packages ggmap et ggplot2. Il est à noter que le réseau routier principal, le réseau secondaire, les pistes cyclables, les voies cyclables et les chemins pédestres de différents types constituent des calques différents sur cette carte. Chacun d’entre eux est caractérisé par des variations de couleurs, de tailles, de degrés de transparence. Nous jouons ici sur la superposition du calque de toutes les voies cyclables (en vert plus foncé) et celui des pistes cyclables (en vert plus clair) pour distinguer les pistes cyclables des autres voies cyclables.

ggmap(map.slsj) +
  labs(x="Longitude",
       y="Latitude",
       title="Pistes cyclables, autres voies cyclables\net chemins pédestres à Chicoutimi",
       caption ="Map tiles by Stamen Design, under CC BY 3.0\nData by OpenStreetMap, under ODbL\n© les contributeurs d’OpenStreetMap") +
  geom_sf(data = rues.principales.slsj,
          col = "ivory2",
          size = 0.2,
          alpha = 0.75,
          inherit.aes = FALSE) +
  geom_sf(data = rues.secondaires.slsj,
          col = "ivory2",
          size = 0.2,
          alpha = 0.3,
          inherit.aes = FALSE) +
  geom_sf(data = rando.slsj,
          col = "goldenrod2",
          size = 0.2,
          alpha = 1,
          inherit.aes = FALSE) +
  geom_sf(data = velo2.slsj,
          col = "seagreen3",
          size = 0.5,
          alpha = 1,
          inherit.aes = FALSE) +
  geom_sf(data = velo.slsj,
          col = "greenyellow",
          size = 0.5,
          alpha = 1,
          inherit.aes = FALSE) +
  coord_sf(expand = FALSE)

On obtient alors la carte suivante.

Après quelques améliorations graphiques non détaillées ici, la carte illustrative finale présente l’aspect suivant.

Il est intéressant de noter que les voies cyclables semblent suivre l’écoulement de la rivière Saguenay, à l’exception de sections proches du cégep et de l’université. Quant au réseau pédestre, la zone portuaire, le Parc de la Rivière-du-Moulin et le centre de vélo de montagne le Panoramique sont évidents. Mais les sentiers du centre de vélo de montagne ne sont pas des chemins pédestres même s’ils sont accessibles en raquettes l’hiver. Le choix de types de chemins pédestres à afficher aurait donc pu être affiné…

Un spectrogramme en 3D avec R

1. D’une coupe spectrale  à un spectrogramme

1.1 Avec Praat

Dans le cadre de mon cours de phonétique expérimentale, il m’a toujours semblé complexe, sans recourir à une quelconque illustration, de faire comprendre aux étudiants le passage d’une coupe spectrale statique à un spectrogramme dynamique. Les deux illustrations suivantes produites avec le logiciel Praat représentent une occurrence de la voyelle française /ɔ/.

 

Même en utilisant des représentations, saisir le passage de l’une à l’autre de ces deux représentations tout en saisissant la distinction entre harmoniques et formants me semble peu évident pour des phonéticiens débutants. En 2016, mon ancien étudiant de maitrise, Xavier Saint-Gelais avait eu l’excellente idée, de concevoir une illustration faite maison visant à schématiser ce passage en simulant une représentation 3D, je me permets de la reproduire.

1.2 avec R

Les fonctionnalités récentes de traitement du signal sonore et de représentations 3D offertes par différents packages de l’écosystème du R Project for Statistical Computing permettent désormais d’aller plus loin.

Dans les lignes qui suivent, outre le package ggplot2, seront plus spécifiquement utilisés les packages tuneR et seewave qui comprennent un vaste ensemble de fonctions permettant de traiter, d’analyser et représenter les signaux sonores (Sueur, 2018). Concernant la 3D, le package rayshader publié par 2019 par Tyler Morgan-Wall ouvre  des perspectives inédites tant en ce qui a trait à la cartographie 3D (non traité ici) et à l’adaptation 3D des graphiques produits par l’entremise de ggplot2.

En premier lieu, les packages au sein desquels se trouvent les fonctions utilisées sont déclarés.

library(tuneR)
library(seewave)
library(ggplot2)
library(rayshader)

Le fichier sonore est ouvert par l’intermédiaire de la fonction readWave() et imputé à un objet nommé son.

son <- readWave("o.wav")
son
## Wave Object
##  Number of Samples:      21409
##  Duration (seconds):     0.49
##  Samplingrate (Hertz):   44100
##  Channels (Mono/Stereo): Mono
##  PCM (integer format):   TRUE
##  Bit (8/16/24/32/64):    16

La fonction spectro() permet de calculer un spectrogramme pour ce fichier sonore. Le résultat de ce calcul est imputé à un objet nommé spectrogramme. L’argument plot=FALSE évite que le spectrogramme soit affiché à l’aide des paramètres par défaut. Seuls les résultats de ce traitement soit stocké dans l’objet spectrogramme. Concernant la configuration des arguments de cette fonction, le théorème d’incertitude d’Heisenberg et la question du compromis entre résolution fréquentielle et résolution temporelle, je renvoie le lecteur au chapitre 11 de Sueur (2018, 309 et suivantes).

spectrogramme <- spectro(son, f=son@samp.rate, plot = FALSE, ovlp=88, dBref=2*10e-5, wn="hanning", wl=1024)

À partir de cet objet, une base de données au format data.frame comprenant, pour chaque trame temporelle, la valeur d’amplitude (ici, en dB SPL) de chacune des fréquences analysées est créée. Cette base de données est ensuite sous-échantillonnée pour ne conserver que les fréquences inférieures à 5000 Hz. En fonction de la durée du fichier sonore utilisé, la taille de cette base de données, au format long, peut être imposante (dans cet exemple, elle comprend déjà 24300 lignes).

frequence <- rep(spectrogramme$freq*1000, times=ncol(spectrogramme$amp))
temps <- rep(spectrogramme$time, each=nrow(spectrogramme$amp))
amplitude <- as.numeric(spectrogramme$amp)
 
df <- data.frame(temps=as.numeric(temps), frequence=as.numeric(frequence), amplitude=as.numeric(amplitude))
 
frequence.max <- 5000
df <- df[which(df$frequence < frequence.max),]

Joey Stanley (Brigham Young University), dont je recommande le site, propose, lui aussi, une méthode de création de spectrogrammes en 3D en recourant au package rayshader. Cependant, pour extraire les données permettant de construire un spectrogramme en 2D, il utilise la fonction spectrogram() du package PhonTools, ce qui tend, de son propre aveu, à complexifier l’extraction des données de temps, de fréquence et d’amplitude nécessaires à la construction de cette représentation du signal.

I did some digging and I just could not find a way to extract the data that gets eventually plotted in spectrogram. I mean, it has to have gone through some Fourier analysis or something first to be able to extract frequencies. So, I figure if the spectrogram function could do it, the key was in the function itself.

La création de cette base de données permet d’afficher le spectrogramme en 2D en utilisant le package ggplot2. Ce diagramme est stocké dans l’objet spectrogramme.gg. Notez que les données présentes dans la base de données sont visuellement rendues sous la forme d’un raster permettant d’afficher une surface et non plus d’un ensemble distinct de points de mesure.

spectrogramme.gg <- ggplot(df)+
geom_raster(aes(temps, frequence, fill = amplitude), interpolate = TRUE)+
scale_y_continuous(breaks = seq(from=0, to=frequence.max, by=500))+
labs(x="Temps (s)", y="Fréquence (Hz)", title="")+
coord_cartesian(expand=FALSE)
 
spectrogramme.gg

 

2. En 3D

Le spectrogramme en 2D peut alors être adapté en 3D au moyen de la fonction plot_gg().

plot_gg(spectrogramme.gg, 
width=6, height=4, scale=300, 
windowsize=c(1000, 800),
fov=70, zoom=0.5, 
theta=330, phi=40,
multicore=TRUE)

Une fois le calcul terminé (comptez ici de quelques secondes à plusieurs minutes selon la taille du fichier sonore), une fenêtre d’aperçu permet de choisir un angle et un degré de zoom appropriés. Il est alors possible de sauvegarder un ou plusieurs instantanés en utilisant la fonction render_snapshot(). Les fichiers .png générés sont stockés dans le répertoire de travail.

2.1 En images

render_snapshot("image0x")

 

 

2.2 En mouvements

Il est également possible de sauvegarder une animation au format .mp4 en utilisant la commande render_movie(). Concernant les mouvements de caméra utilisés, j’ai choisi d’utiliser une des deux options proposées par défaut . Il y a cependant possibilité de générer des mouvements de caméra personnalisés (voir par exemple Lego World Map – Rayshader Walkthrough).

render_movie(filename = "spectrogramme.gg", type="oscillate", frames=390, phi=30, theta=-45)

Le site de l’UQAC n’acceptant pas pas les vidéos, l’animation a été convertie au format .gif animé.

Pour allez plus loin


3D ggplots with rayshader – RStudio

Une formation à R et RStudio à l’UQAC

Vendredi 13 décembre, Maxence Martin et moi-même offrirons une formation à l’utilisation de l’environnement de programmation R (R Core Team, 2019) et de l’éditeur RStudio (RStudio Team, 2019).

Pour prendre connaissance du plan de cette formation organisée dans le cadre des activités du Centre intersectoriel en santé durable et homologuée par une attestation de 0,8 unité d’éducation continue (UEC),  suivez ce lien :
http://www.uqac.ca/santedurable/evenements/formation-r/

Faites vite, le nombre de places est limité.


Une UEC qui équivaut à 10 heures de travail quantifie une estimation du nombre d’heures qui doit consacrer consacré à une formation soit en présentiel dans une salle de classe ou un laboratoire, soit lors d’un stage ou d’un atelier, soit pendant un travail personnel.

UQAC et Google Trends : une première exploration

1. Introduction

Google Trends est un outil offert gratuitement par la multinationale Google permettant d’évaluer la popularité d’un ou plusieurs termes de recherche utilisé(s) par les internautes dans le moteur de recherche éponyme.

Les données proposées par cet outil peuvent être téléchargées sous l’interface du logiciel R à l’aide de la bibliothèque gtrendsR. La base de données produite contient notamment le nombre de hits mensuels portant sur le ou les termes recherchés. L’indice de popularité appelé hits n’indique pas un nombre de recherches absolu, mais une proportion entre 0 et 100, où 100 représente la quantité maximale d’utilisation du terme dans le mois et la zone géographique éventuellement circonscrite.

Google Trends n’a pas pour vocation à fournir le volume d’une recherche, mais permet seulement de visualiser l’évolution de sa popularité.

Les données de Google Trends sont disponibles mensuellement depuis 2004.

Dans le cadre de cette exploration, nous nous intéresserons à l’évolution de la popularité de l’acronyme de l’Université du Québec à Chicoutimi UQAC dans les requêtes des internautes.

La fonctionnalité de cet outil qui vise à déterminer la position géographique de l’internaute effectuant la requête a été améliorée à partir du 1erjanvier 2011. La collecte des données a, pour sa part, été améliorée à partir du 1er janvier 2016. Les résultats suivants sont donc à interpréter avec prudence.

2. Description générale des tendances

tendances <- gtrends(keyword = c("UQAC"),
              time = "2004-01-02 2019-09-30",
              gprop = "web",
              low_search_volume=TRUE)

Les données utilisées pour déterminer la popularité relative du terme UQAC dans les requêtes des internautes s’échelonnent du 1er février 2004 au 30 septembre 2019. Aucune restriction géographique n’a été effectuée. Les données récoltées ne sont donc pas circonscrites à un pays ou une région donnée. Cette collecte comprend aussi les résultats pour les zones géographiques de faible volume.

Comme indiqué par Simon Rogers (Data journalist et Data Editor chez Google) en 2016 :

« There are two ways to filter the Trends data: real time and non-real time. Real time is a random sample of searches from the last seven days, while non-real time is another random sample of the full Google dataset that can go back anywhere from 2004 to ~36 hours ago. The charts will show you either one or the other, but not both together, because these are two separate random samples. We take a sample of the trillions of Google searches, because it would otherwise be too large to process quickly. By sampling our data, we can look at a dataset representative of all Google searches, while finding insights that can be processed within minutes of an event happening in the real world. »

Les données récoltées sont extraites d’un échantillon aléatoire archivé des trillions de requêtes soumises par les internautes à ce moteur de recherche. L’itération de cette analyse serait donc susceptible de fournir des données et donc des résultats légèrement différents.

À priori, il semble que le nombre de hits du terme UQAC diminue au cours du temps, passant, en moyenne, de 74 de 2004 à 2007, à 45 entre 2017 et 2018. Le nombre de hits du terme UQAC semble à nouveau à la hausse en 2019.

À ces résultats mensuels, a été ajoutée une courbe de lissage par régression locale (Locally Weighted Scatterplot Smoother). Ce type de régression dite loess (ou lowess) repose sur la technique des k plus proches voisins (KNN). Cette courbe tend à confirmer cette tendance générale.

Cette représentation exploratoire met également en lumière une possible composante saisonnière dans cette série temporelle.

D’année en année, les mois de juin, juillet et décembre, qui correspondent aux périodes de vacances, semblent présenter un nombre inférieur de requêtes. À l’inverse, les mois d’août/septembre et de janvier, qui correspondent, eux, aux périodes de rentrée, semblent présenter une hausse récurrente du nombre de hits du terme UQAC.

En bref, en explorant ces données on note une double tendance non linéaire du nombre du hits : une tendance générale à la décroissance, une saisonnalité annuelle.

3. Une modélisation de cette série temporelle

La modélisation d’une série temporelle vise à choisir un modèle qui décrit au mieux les données collectées. Une modélisation doit être à même d’extraire une structure du signal :

  • en supprimant le bruit, les erreurs de mesure ou les fluctuations aléatoires non explicables ;
  • en recherchant la présence d’une tendance et éventuellement d’une saisonnalité dans les données.

3.1 Les modèles additifs généralisés (GAM)

Afin de confirmer statistiquement les informations exploratoires, nous avons choisi d’utiliser un modèle additif généralisé.

Les modèles additifs généralisés (Generalized additive models) s’avèrent pertinents lorsque la relation entre un prédicteur continu (ici le temps) et une variable dépendante (ici le nombre de hits) n’est pas décrite adéquatement par une régression linéaire (Wood, 2017).

Une régression linéaire ne permet pas de saisir la nature non linéaire d’une trajectoire temporelle par exemple. De telles divergences entre les données et le modèle créent des patrons dans la représentation des résidus (un résidu est la différence entre la valeur prédite par un modèle et la valeur réelle de la variable dépendante), ce qui rend les intervalles de confiance et les valeurs p non fiables (Sóskuthy, 2017). L’utilisation d’une régression linéaire pour décrire une relation non linéaire entre un prédicteur et une variable dépendante est donc un choix dangereux. Les GAM permettent de faire fi de cette difficulté en utilisant des fonctions de lissage (smoothers) non paramétriques appliquées à un ou plusieurs prédicteurs qui peuvent, bien entendu, être accompagnés de covariables paramétriques classiques.

La fonction de lissage par défaut d’un GAM est un thin plate spline (Spline en plaque mince), mais de nombreuses autres fonctions de lissage adaptées à différentes situations (notamment la cyclicité d’un phénomène) sont aussi disponibles (cubic regression spline, cyclic spline, penalised spline…)

“While the differences between all these smoothers are beyond the scope of this article, it matters to say that the so-called penalization aims at finding the best value for the smoothing parameter, which controls the amount of smoothing, i.e., the degree of fitting of the smooth term to the raw predictor(s), unless this degree is specified externally by the user. The effective degrees of freedom (edf) can be referred to describe the amount of smoothing. The goal is here to avoid both underfitting and overfitting – the bias/variance tradeoff, so that the model can generalize well to data other than the sample used to build it.” — Coupé (2018 : 8)

3.2 Un modèle parcimonieux

3.2.1 La parcimonie d’un modèle

Une propriété de base d’un modèle statistique de qualité est qu’il est à même d’expliquer convenablement les données tout en éliminant les détails et les erreurs. De tels modèles sont appelés « parcimonieux ». En recourant à la métrique de l’AIC (Akaike’s Information Criterion), nous avons cherché à mettre au jour le modèle parcimonieux et donc à sélectionner :

  • les variables indépendantes importantes ;
  • les smoothers les plus appropriés.

“The AIC: value is a corrected version of the deviance that has the additional benefit that it can be compared across models (for the same data set and response variable) with different numbers of predictors.” — Speelman (2014: 510)

Il n’existe pas de théorie statistique permettant d’établir un seuil de signification strict (une valeur p) pour l’utilisation de l’AIC. La sélection du modèle parcimonieux se fait alors en identifiant le modèle ayant la plus petite valeur d’AIC. Généralement, si les modèles se trouvent à moins de 2 unités AIC l’un de l’autre, ils sont très similaires. S’ils ont plus de 10 unités de différence entre les deux modèles, ils sont très différents et il est important de considérer le modèle ayant la plus petite valeur d’AIC.

Dans le cadre de cette première exploration,, trois fonctions de lissage sont testées : thin plate spline (tp) (par défaut), cubic regression spline (cr) et cyclic cubic regression spline (cc) (bien adaptée aux évènements cycliques comme les variations mensuelles).

Le nombre de noeuds (knots) est en lien avec les lieux de changement de direction de la courbe de lissage. Le nombre de noeuds dépend de la taille de l’échantillon et du nombre d’observations par variable lissée. Plus il y a de noeuds et plus la fonction de lissage va se montrer sautillante (wiggly) et tenter de suivre parfaitement l’évolution temporelle des données au risque d’être sur-ajustée. Déterminer le nombre optimal de noeuds est donc important pour mettre au point un modèle parcimonieux.

Pour la variable mois, le nombre maximal de noeuds est fixé à 12 (le nombre de mois dans une année) et pour la variable annee, il est fixé à 16 (soit le nombre d’années couvertes dans cet échantillon).

3.2.2 Modèles évalués

Différents modèles sont comparés ci-dessous afin d’établir un modèle parcimonieux.

modele1 <- gam(hits ~
             s(mois, k=12, bs="tp")
             + s(annee, k=16, bs="tp"),
             method = "GCV.Cp",
             data=tendances.df,
             family = "poisson",
             select=T
             )
modele2 <- gam(hits ~
             s(mois, k=12, bs="cc")
             + s(annee, k=16, bs="tp"),
             method = "GCV.Cp",
             data=tendances.df,
             family = "poisson",
             select=T
             )
modele3 <- gam(hits ~
             s(mois, k=12, bs="cc")
             + s(annee, k=16, bs="cr"),
             method = "GCV.Cp",
             data=tendances.df,
             family = "poisson",
             select=T
             )

3.2.3 Comparaison par AIC

La comparaison de ces modèles en fonction de leur valeur d’AIC suggère que le modèle1 est le plus parcimonieux. Il va de soi que la différence entre le modele2 et le modele3 est minime.

              df      AIC
modele1 17.08252 1259.162
modele2 16.79017 1276.164
modele3 16.77871 1276.146

3.2.4 Résumé du modèle choisi


Family: poisson 
Link function: log 

Formula:
hits ~ s(mois, k = 12, bs = "tp") + s(annee, k = 16, bs = "tp")

Parametric coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) 4.113751   0.009563   430.2   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Approximate significance of smooth terms:
            edf Ref.df Chi.sq p-value    
s(mois)  10.307     11  496.2  <2e-16 ***
s(annee)  5.775     15  374.7  <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

R-sq.(adj) =  0.881   Deviance explained = 90.2%
UBRE = -0.25036  Scale est. = 1         n = 188

La fonction de lien indiquée dans le résumé du modèle associe les prédictions d’un modèle sur l’échelle de réponse à celles sur l’échelle du prédicteur linéaire. Les données de comptage (ici les hits) sont des valeurs entières strictement non négatives et sont modélisées par un GAM utilisant une distribution de Poisson et une fonction de lien log. Sur l’échelle logarithmique, la réponse peut prendre n’importe quelle valeur réelle entre – et +, et c’est sur cette échelle que l’ajustement du modèle est effectué. Cependant, nous devons faire correspondre ces valeurs à l’échelle de réponse, qui, elle, est non négative. L’inverse de la fonction de lien, soit ici la fonction exponentielle est alors utilisée pour rééchelonner les valeurs prédites par le modèle sur l’intervalle 0 +.

D’après les informations fournies dans ce résumé, les effets des deux effets fixes continus lissés mois et annee sont significatifs. Puisque les niveaux de significativité statistique proposés dans ce résumé sont des approximations, il est important que le modèle soit vérifié.

3.3 Quelques diagnostics de base


Method: UBRE   Optimizer: outer newton
full convergence after 18 iterations.
Gradient range [-4.546141e-10,4.212817e-09]
(score -0.2503571 & scale 1).
eigenvalue range [-4.212816e-09,0.005652646].
Model rank =  27 / 27 

Basis dimension (k) checking results. Low p-value (k-index<1) may
indicate that k is too low, especially if edf is close to k'.

            k'   edf k-index p-value
s(mois)  11.00 10.31    1.15    0.98
s(annee) 15.00  5.78    0.97    0.34

Les graphiques précédents n’indiquent aucune problématique majeure liée à :

  • la linéarité et à la normalité des résidus,
  • l’homogénéité de la variance.

Il est aussi fait état d’une convergence réussie de l’optimisation outer newton. Les valeurs de k utilisées pour ajuster les fonctions de lissage semblent adaptées (k-index≈1) avec des valeurs p non significatives.

La concurvité (l’équivalent non paramétrique de la colinéarité) se produit lorsqu’un effet fixe lissé peut être approximé par un ou plusieurs autres effets fixes lissés présents dans le modèle. Plus sa valeur est proche de 1, plus il y a de risques que le modèle soit difficilement interprétable ou que les estimés soient instables. Ici, les valeurs de concurvité sont proches de zéro.

                 para      s(mois)    s(annee)
worst    2.796979e-24 0.0161916883 0.016191688
observed 2.796979e-24 0.0007729336 0.003212910
estimate 2.796979e-24 0.0090339654 0.002737686

3.4 À propos de l’autocorrélation des résidus

L’une des hypothèses qui sous-tendent les modèles de régression linéaire est que les résidus ne sont pas corrélés, cela signifie que le résidu d’une observation n’affecte pas le résidu d’une autre observation. On dit alors que les résidus sont indépendants.

Cependant, quand on analyse une série temporelle avec un GAM, il peut y avoir une corrélation entre les résidus si la mesure d’un phénomène à un instant t est corrélée aux mesures précédentes (au temps t1, tn) ou aux mesures suivantes (à t+1, t+n).

Cette dépendance temporelle des résidus est appelée l’autocorrélation des résidus d’une série temporelle. Une série autocorrélée est ainsi corrélée à elle-même, avec un décalage (lag) donné.

On peut calculer l’autocorrélation des résidus d’une série temporelle pour différents décalages.

La fonction d’autocorrélation (ACF) des résidus peut être calculée et représentée sous la forme d’un corrélogramme.

Sur la figure suivante, seuls les 50 premiers décalages sont représentés.

Sur un corrélogramme :

  • le décalage pour lequel l’autocorrélation est calculée est indiqué sur l’axe des abscisses ;
  • la valeur de la corrélation (entre -1 et 1) est indiquée sur l’axe des ordonnées ;
  • les droites horizontales pointillées indiquent les seuils critiques au-delà desquels l’autocorrélation est considérée comme significative à 95 %.

Le pic au décalage 0 sur un tracé de l’ACF indique une corrélation positive parfaite (1) entre une observation de la série et elle-même (forcément !). Quelques rares pics de différents décalages excèdent les seuils critiques entre chaque observation et l’observation apparaissant xx mois avant ou xx mois après parmi les 188.

Cependant, le corrélogramme partiel n’illustre pas de corrélation particulièrement importante des résidus pour les 50 premiers décalages.

Les autocorrélations représentées ci-dessus sont empiriques et calculées à partir d’un échantillon de taille modeste (188 observations).

Quelques valeurs ACF sont en dehors des intervalles de confiance ce qui suggère une autocorrélation des résidus. Cependant, dans la cadre de cette première exploration, cette autocorrélation n’a pas été considérée.

3.5 Deux effets significatifs

Le nombre de hits du terme UQAC peut donc être expliqué par les deux effets fixes lissés mois et annee de façon statistiquement significative.

  smooth.term                        report
1     s(mois) Chi.sq(10.307)=496.23; p<.001
2    s(annee)  Chi.sq(5.775)=374.68; p<.001

Le graphique suivant met en lumière un sommet du nombre de hits du terme UQAC en 2006-2007, et ce, quel que soit le mois considéré. À l’inverse, 2013 marque le début de la décroissance du terme UQAC. 2018 et 2019 sont les années au cours desquelles le terme UQAC a été le moins utilisé par les internautes dans leurs recherches sur le moteur de Google.

Ce graphique illustre aussi la relative stabilité de la popularité du terme UQAC entre janvier et avril et entre septembre et décembre et la chute du nombre de hits de cette requête entre mai et août, et ce, pour chacune des années entre 2004 et 2019. Depuis les années 2006-2007, les habitudes de consommation de l’information numérique ont changé et les supports de diffusion se sont diversifiés (Facebook, Twitter, YouTube…), cette décroissance des requêtes du terme UQAC peut être liée à cette diversification.

Ce second graphique, pendant du précédent, rend compte des mêmes tendances et notamment la chute drastique du nombre de hits durant les mois de juin et juillet de chacune des années de cet échantillon, mais aussi le nombre de requêtes le plus élevé du terme UQAC ont lieu durant le mois de janvier de chacune de ces années.

Il est aussi possible de visualiser en 3D la surface des valeurs prédites en fonction des deux effets fixes lissés mois et annee.

3.6 Ajustement du modèle

Le graphique suivant illustre l’ajustement des prédictions du modèle GAM aux données collectées. Rappelons qu’un ajustement exact des prédictions de ce modèle aux données collectées n’est pas recherché : il est d’ailleurs important d’éviter tout sur-ajustement.

L’intérêt n’est ici que d’expliquer et modéliser la structure de la série temporelle. Cette modélisation n’a pas pour objectif de prévoir les valeurs futures de cette série temporelle.

4. Requêtes associées

Les internautes ayant recherché le terme UQAC ont également effectué d’autres requêtes. Google Trends offre la possibilité de récolter les plus fréquentes requêtes associées au terme UQAC utilisées par les internautes durant la période de 2004 à 2019 tout en fournissant également l’indice de popularité (le nombre de hits) de chacune de ces requêtes associées.

                   value keyword
1        uqac chicoutimi    UQAC
2             chicoutimi    UQAC
3                 moodle    UQAC
4            moodle uqac    UQAC
5            uqac moodle    UQAC
6            emploi uqac    UQAC
7                   uqam    UQAC
8  pavillon sportif uqac    UQAC
9               saguenay    UQAC
10         uqac étudiant    UQAC
11       uqac classiques    UQAC
12                  uqtr    UQAC
13     bibliothèque uqac    UQAC
14          bibliothèque    UQAC
15                  uqar    UQAC
16 dossier étudiant uqac    UQAC
17                accesd    UQAC
18 uqac dossier étudiant    UQAC
19          uqac portail    UQAC
20 uqac dossier étudiant    UQAC
21                ulaval    UQAC
22      dossier étudiant    UQAC
23      cegep chicoutimi    UQAC
24      université laval    UQAC
25             mage uqac    UQAC

À partir de la liste de ces requêtes associées dont l’orthographe a été corrigée (notamment les accents), il est , par exemple, possible de calculer la fréquence des unigrammes et des bigrammes.

4.1 Fréquence des unigrammes

Les unigrammes ou mots typographiques sont traditionnellement définis comme des chaînes de caractères (string) comprises entre deux blancs typographiques ou entre un blanc typographique et un signe de ponctuation. Ils sont représentés ci-dessous sous la forme d’un nuage de mots (wordcloud). La taille de chaque forme sur le graphique suivant indique son effectif.

4.2 Fréquence des bigrammes

Les bigrammes sont les séquences de deux termes apparaissant de façon contiguë dans les requêtes associées.

Il est possible de représenter ces bigrammes sous la forme de graphes. Ces derniers sont principalement utilisés en mathématiques dans le cadre de la théorie des graphes. Un graphe est un ensemble de sommets (ou de noeuds, vertices en anglais) reliés deux à deux à deux par une ou plusieurs arêtes (ou arcs, edges en anglais).

Dans le graphe suivant, le degré de transparence représente l’effectif de chacun des bigrammes ainsi reliés. Le sens de la flèche rend compte de l’ordre d’apparition des termes dans chacun des bigrammes.

4.3 Interprétation sommaire

Le but n’est pas ici d’interpréter les résultats obtenus de façon détaillée, il est néanmoins intéressant de noter que les plus fréquentes requêtes associées au terme UQAC semblent concerner des aspects administratifs (Dossier étudiant, portail étudiant), financiers (emploi UQAC, Accès D) ou encore des liens généraux vers la bibliothèque, le pavillon sportif, Moodle, le MAGE-UQAC (les associations étudiantes). Ces requêtes semblent témoigner que le moteur de recherche de Google est majoritairement utilisé par les internautes comme un moteur de recherche interne à l’institution pour localiser rapidement des ressources d’usage régulier.

La seule requête populaire associée à la recherche concerne les Classiques en sciences sociales.

De façon plus générale, il est également intéressant de noter que les établissements d’enseignement associés à l’UQAC dans cette nébuleuse lexicale sont le Cégep de Chicoutimi (exclusivement), l’Université Laval (sous deux dénominations différentes), l’UQAR, l’UQTR et l’UQAM.

5. Origine géographique des internautes

Un dernier point, il semble évident que tout internaute ne connaissant pas cette université ne cherchera pas l’acronyme UQAC, mais sa dénomination complète.

À cet égard, Google Trends offre la possibilité de colliger les zones géographiques où ce terme est populaire. On se rend ainsi rapidement compte que la requête UQAC provient essentiellement de la région du Saguenay–Lac-Saint-Jean, mais aussi de la Côte-Nord, mais très peu dans le reste du Québec et du Canada.

             location hits
1            Saguenay  100
2                Alma   31
3            Roberval   26
4      Saint-Félicien   25
5  Dolbeau-Mistassini   23
6           Sept-Iles   16
7         Baie-Comeau    7
8         Québec City    2
9      Trois-Rivières    1
10              Levis    1
11           Montreal    1
12         Sherbrooke    1
13           Gatineau   <1
14              Laval   <1
15          Longueuil   <1
16              Dakar   <1
17             Ottawa   <1
18            Toronto   <1
19         Casablanca   <1
20              Paris   <1

Il est cependant intéressant de noter la relative popularité de cet acronyme en Guinée et au Sénégal, deux pays avec lesquels l’UQAC a possiblement des accords.

  location hits
1   Canada  100
2  Senegal   50
3   Guinea   23
4  Tunisia    7
5  Algeria    6
6  Morocco    5
7   France    4
8      USA   <1
9   Russia   <1

6. Références

Coupé, C. (2018). Modeling linguistic variables with regression models: Addressing non-gaussian distributions, non-independent observations, and non-linear predictors with random effects and Generalized Additive Models for Location, Scale, and Shape. Frontiers in Psychology, 9. https://doi.org/10.3389/fpsyg.2018.00513

Sóskuthy, M. (2017). Generalised additive mixed models for dynamic analysis in linguistics : A practical introduction. http://arxiv.org/abs/1703.05339

Speelman, D. (2014). Logistic regression : A confirmatory technique for comparisons in corpus linguistics. In D. Glynn & J. A. Robinson (Éd.), Human Cognitive Processing (Vol. 43, p. 487‑533). Amsterdam: Benjamins.

Wood, S. N. (2017). Generalized additive models : An introduction with R (2nd ed.). Boca Raton: CRC Press.

7. Environnement

R version 3.6.1 (2019-07-05)
Plateforme : x86_64-w64-mingw32/x64 (64-bit)
Version du système d’exploitation : Windows 10 x64 (build 15063)

8. Bibliothèques utilisées

stats: The R Stats Package version 3.6.1
graphics: The R Graphics Package version 3.6.1
grDevices: The R Graphics Devices and Support for Colours and Fonts version 3.6.1
utils: The R Utils Package version 3.6.1
datasets: The R Datasets Package version 3.6.1
methods: Formal Methods and Classes version 3.6.1
base: The R Base Package version 3.6.1
mapproj: Map Projections version 1.2.6
maps: Draw Geographical Maps version 3.3.0
extrafont: Tools for using fonts version 0.17
ggwordcloud: A Word Cloud Geom for ‘ggplot2’ version 0.5.0
ggraph: An Implementation of Grammar of Graphics for Graphs and Networks version 2.0.0
igraph: Network Analysis and Visualization version 1.2.4.1
stringr: Simple, Consistent Wrappers for Common String Operations version 1.4.0
tidytext: Text Mining using ‘dplyr’, ‘ggplot2’, and Other Tidy Tools version 0.2.2
tidyr: Tidy Messy Data version 1.0.0
itsadug: Interpreting Time Series and Autocorrelated Data Using GAMMs version 2.3
plotfunctions: Various Functions to Facilitate Visualization of Data and Analysis version 1.3
sjPlot: Data Visualization for Statistics in Social Science version 2.7.2
mgcv: Mixed GAM Computation Vehicle with Automatic Smoothness Estimation version 1.8-28
nlme: Linear and Nonlinear Mixed Effects Models version 3.1-140
lubridate: Make Dealing with Dates a Little Easier version 1.7.4
gtrendsR: Perform and Display Google Trends Queries version 1.4.4
ggplot2: Create Elegant Data Visualisations Using the Grammar of Graphics version 3.2.1

An interdisciplinary workshop on mathematical modelling of language learning, transmission and use

Un contexte

L’UNESCO indique que d’ici la fin du XXIe siècle, « si rien n’est fait, la moitié des quelque 6 000 langues parlées aujourd’hui disparaitront ». Rappelons qu’en 2010, au Canada, 31 langues étaient en situation critique. L’analyse des mécanismes d’usages des langues (démographie, prestige…) doit permettre d’établir des prédictions de l’évolution de leur vitalité. De telles modélisations mathématiques pourraient conduire à l’élaboration de politiques mondiales efficaces à même de ralentir la rapide disparition des langues du monde. Or, la transmission d’une langue entre populations et d’une génération à l’autre garantit sa vitalité à long terme.

Un colloque

Impliquant des chercheurs d’horizons aussi différents que la sociolinguistique, les sciences cognitives ou les mathématiques, la conférence Poplang: Population effects on languages sera consacrée à la compréhension des mécanismes de variations des usages linguistiques et de transmission des langues et à l’élaboration de modèles mathématiques de la vitalité de ces dernières.

Cette conférence, organisée dans le cadre du projet « Sur le bout de la langue » financé par l’Institut rhônalpin des systèmes complexes et l’Institut des Sciences de l’Homme, bénéficie du soutien financier des laboratoires d’excellence lyonnais ASLAN et MILYON et de l’Université du Québec à Chicoutimi.

Cet évènement scientifique organisé sous l’égide du CNRS aura lieu à Lyon en France, le 20 novembre 2017.

Un projet auquel participe le laboratoire de phonétique dans un magazine jeunesse

Soucoupe Volante est un magazine jeunesse gratuit pour les 8-10 ans  coordonné par La Rotonde (Mines Saint-Étienne), Le Planétarium de Saint-Étienne et le Musée Redpath de l’Université de McGill. Dans ce troisième numéro,  réalisé avec le soutien de l’Association des Communicateurs Scientifiques du Québec, du Service de Coopération et d’Action Culturelle du Consulat Général de France à Québec, les enfants partent à la découverte des sciences entre le Québec et la France.

Ce numéro implique des acteurs scientifiques québécois et français : l’Astrolab du parc national du Mont-Mégantic, l’Université de Lyon – Saint-Étienne, l’École des Mines de Saint-Étienne et lelaboratoire de phonétique expérimentale de l’UQAC par l’intermédiaire du projet Adyn-BONOBO.

Ce projet scientifique, actuellement en cours, est consacré à  la  description  de  la  communication  vocale  chez  le  bonobo  (Pan  paniscus). Subventionné par Laboratoire d’excellence ASLAN, (CNRS, Université de Lyon, France), ce projet en bio-acoustique est réalisé en collaboration avec Florence Levrero de l’équipe de neuro-éthologie de Saint-Étienne et François Pellegrino du laboratoire  Dynamique du langage de Lyon.

Ils en parlent…