News et découvertes - janvier 2023

News et découvertes R du blog statistiques et logiciel R

Voici le résumé de mes découvertes autour des biostatistiques, de l’utilisation de R, et même de ChatGPT 🤖, pour ce début d’année 2023 ! 

Et en prime, je vous livre, à la fin de cet article, mon énorme coup de cœur ❤️pour une BD en ligne !

 

Table des matières

Biostatistiques

Le glossaire des termes statistiques de Frank Harrell

Frank Harrell a publié un glossaire des termes statistiques. C’est en anglais, certes, mais c’est très pédagogique et en plus c’est collaboratif puisque vous pouvez proposer des améliorations.
Allez jeter un coup d’œil 👁️, je suis sûre que vous allez apprendre quelque chose, ou que cela va vous permettre de mieux comprendre certains concepts.

Comment analyser les données de proportions continues ?

Alors ça, c’est une question que l’on peut pose très souvent, et pour laquelle je n’avais pas de réponse très étayée. 

Pour replacer un peu le contexte, on peut dire qu’il existe deux types de données de proportions :

  • les proportions “classiques”, qui sont basées sur des comptages  ( ex : j’observe 54 mâles parmi 100 individus – la proportion est de 0.54). 
  • les proportions “continues”, qui sont issues de mesures continues, par exemple la proportion de biomasse végétale allouée aux fruits par rapport à la biomasse végétale totale. Il s’agit de proportions, puisque la valeur est comprise entre 0 et 1, et en même temps, il s’agit de données continues.

Pour analyser des données de type proportions classiques (basées sur un comptage), on peut employer des tests de comparaison de pourcentages ou utiliser des régressions logistiques (s’il y a 2 modalités) ; il n’y a pas de difficultés particulières, les chemins sont bien tracés.

Par contre, pour analyser les proportions continues, on ne sait jamais trop sur quel pied danser… Certains les traitent comme des données continues sans les pré-traiter (en utilisant des tests t, des ANOVA, des régressions linéaires multiples – c’est ce que je fais), et d’autres préfèrent employer d’abord une transformation arc sinus (je n’aime pas cette approche parce que les valeurs ne sont plus interprétables).

 Eh bien, en fait, il existe une 3ᵉ voie, celle de la régression bêta et de la régression de Dirichlet. 

Si ce sujet, est un peu comme une épine 📍 dans votre pied 🦶, je vous recommande la publication “Analysing continuous proportions in ecology and evolution: A practical introduction to beta and Dirichlet regression” – 

Utilisation de R

Réaliser un flowchart pour décrire les étapes de préparation des données avec dtrackr

Ce n’est certainement pas quelque chose à faire en routine, mais dans certains projets, je pense que cela peut être très utile, voire complètement indispensable en recherche clinique.

Le package dtrackr semble assez simple d’utilisation, puisqu’il permet de mélanger des commandes dplyr avec des commandes propres supplémentaires comme status(), track(), et des fonctions améliorées de dplyr, comme exclude_all() et include_any()

Ce package dtrackr me semble plus simple à employer que le package ggconsort que j’avais utilisé dans cet article pour faire un diagramme consort du flux des participants.

Voici le code qui a permis de générer le flowchart précédent :

install.packages("dtrackr")
library(dtrackr)
library(tidyverse)
# a pipeline parameter
cutOff = 3

# the pipeline
dataset = iris %>% 
  track() %>%
  status() %>%
  group_by(Species) %>%
  status(
    short = p_count_if(Sepal.Width<cutOff), 
    long= p_count_if(Sepal.Width>=cutOff), 
    .messages=c("consisting of {short} short sepal <{cutOff}","and {long} long sepal >={cutOff}")
  )  %>%
  exclude_all(
    Petal.Width<0.3 ~ "excluding {.excluded} with narrow petals",
    Petal.Width == max(Petal.Width) ~ "and {.excluded} outlier"
  ) %>%
  comment("test message") %>%
  status(.messages = "{.count} of type {Species}") %>%
  ungroup() %>%
  status(.messages = "{.count} together with cutOff {cutOff}") 
  
dataset %>% flowchart() 

Pour plus d’infos, vous pouvez consulter la vignette du package trackr.

Rester à la page des nouveautés R

J’avais déjà écrit un article à ce sujet, mais voici des références complémentaires publiées par Antoine Soetewey,  qui est doctorant en statistique à l’UCLouvain au sein de l’Institut de Statistique, Biostatistique et Sciences Actuarielles.

Là encore, je vous recommande d’aller jeter un coup d’œil sur cette liste qui est très complète, je suis certaine que vous allez découvrir des ressources qui correspondent à vos besoins ou centres d’intérêts.

Data sciences

Transcrire un fichier audio en mots dans R

C’est la promesse du package audio.whisper (qui m’a été indiqué par un lecteur du blog). Le principe est assez simple :

  1. on installe les packages audio.whisper etav 

  2. on installe le modèle “tiny” de reconnaissance vocale, qui est un modèle léger et rapide conçu pour les petits ensembles de données (et qui est contenu dans le package audio.whisper) 

  3. on place un fichier audio (en mp3 ou mp4 par exemple) à la racine du projet R, 

  4. on convertit le fichier audio en format .wav avec la fonction av_audio_convert du package av

  5. on utilise le modèle de reconnaissance vocale pour prédire la transcription du fichier audio en utilisant deux threads pour accélérer le processus de reconnaissance. La langue du fichier audio est spécifiée en tant que “en” pour l’anglais (ou “fr” pour le français). La transcription résultante est stockée dans la variable “trans”.

J’ai fait un petit test, en m’enregistrant sur mon téléphone. Voici le texte que j’ai lu
 
“R est un logiciel de statistiques et de visualisation de données open source. Il est utilisé pour l’analyse de données, la modélisation statistique et la génération de graphiques et de tableaux.”
 
Je me suis envoyé le fichier (que j’ai nommé “Logiciel_R”) par mail, et je l’ai placé à la racine du projet R. Ensuite, j’ai utilisé le code suivant : 
 
# installation du package depuis GitHub
remotes::install_github("bnosac/audio.whisper") 

install.packages("av")


library(av)
library(audio.whisper)

# installation du modèle tiny
model <- whisper("tiny") 
# conversion du fichier en format .wav
av_audio_convert("Logiciel_r.m4a", output = "output.wav", format = "wav", sample_rate = 16000) 

# transcription
trans <- predict(model, newdata = "output.wav", language = "fr", 
                 duration = 30 * 1000, offset = 0, 
                 token_timestamps = TRUE)
 

Le résultat me semble assez prometteur. Les deux phrases sont bien distinguées, par contre le découpage des mots n’est pas parfait, mais il y a sans doute des réglages à faire ! 

# affichage des sorties
trans

Processing output.wav (212309 samples, 13.2693 sec), lang = fr, translate = 0, timestamps = 1

[00:00:00.000 --> 00:00:05.000]   R est un logiciel de statistique et de visualisation de données open source.
[00:00:05.000 --> 00:00:12.000]   Il est utilisé pour l'analyse de données, la modélisation statistique et la génération de graphiques et de tableau.
[00:00:13.000 --> 00:00:22.000]   ...
[00:00:22.000 --> 00:00:50.000]   ...
> trans
$n_segments
[1] 4

$data
  segment         from           to
1       1 00:00:00.000 00:00:05.000
2       2 00:00:05.000 00:00:12.000
3       3 00:00:13.000 00:00:22.000
4       4 00:00:22.000 00:00:50.000
                                                                                                                  text
1                                         R est un logiciel de statistique et de visualisation de données open source.
2  Il est utilisé pour l'analyse de données, la modélisation statistique et la génération de graphiques et de tableau.
3                                                                                                                  ...
4                                                                                                                  ...

$tokens
   segment    token token_prob   token_from     token_to
1        1        R  0.3739428 00:00:00.050 00:00:00.050
2        1      est  0.4683962 00:00:00.070 00:00:00.290
3        1       un  0.9901673 00:00:00.420 00:00:00.430
4        1    logic  0.9294276 00:00:00.450 00:00:00.800
5        1      iel  0.9558273 00:00:00.800 00:00:01.020
6        1       de  0.9954185 00:00:01.020 00:00:01.160
7        1  statist  0.9793983 00:00:01.160 00:00:01.680
8        1     ique  0.7992536 00:00:01.680 00:00:01.970
9        1       et  0.9869965 00:00:01.970 00:00:02.110
10       1       de  0.9965747 00:00:02.110 00:00:02.230
11       1   visual  0.8696290 00:00:02.300 00:00:02.690
12       1  isation  0.9670650 00:00:02.690 00:00:03.210
13       1       de  0.9880781 00:00:03.210 00:00:03.350
14       1  données  0.9788443 00:00:03.350 00:00:03.940
15       1     open  0.7159413 00:00:03.940 00:00:04.230
16       1   source  0.7984076 00:00:04.230 00:00:04.670
17       1        .  0.9059241 00:00:04.670 00:00:04.940
18       2       Il  0.9631566 00:00:05.000 00:00:05.030
19       2      est  0.9685899 00:00:05.140 00:00:05.380
20       2     util  0.7291103 00:00:05.690 00:00:05.690
21       2      isé  0.9835516 00:00:05.700 00:00:06.000
22       2     pour  0.9924657 00:00:06.000 00:00:06.310
23       2        l  0.6067743 00:00:06.310 00:00:06.380
24       2        '  0.9998622 00:00:06.380 00:00:06.450
25       2       an  0.4910698 00:00:06.450 00:00:06.600
26       2      aly  0.9752291 00:00:06.600 00:00:06.830
27       2       se  0.9915820 00:00:06.830 00:00:06.980
28       2       de  0.9977273 00:00:06.980 00:00:07.130
29       2  données  0.9897462 00:00:07.130 00:00:07.750
30       2        ,  0.8721648 00:00:07.750 00:00:07.780
31       2       la  0.4443537 00:00:08.010 00:00:08.070
32       2      mod  0.9412543 00:00:08.070 00:00:08.180
33       2       él  0.9399017 00:00:08.180 00:00:08.280
34       2  isation  0.9990467 00:00:08.300 00:00:08.550
35       2  statist  0.9597852 00:00:08.550 00:00:08.810
36       2     ique  0.9990970 00:00:08.810 00:00:08.990
37       2       et  0.9478758 00:00:09.000 00:00:09.190
38       2       la  0.9015857 00:00:09.190 00:00:09.380
39       2      gén  0.9974692 00:00:09.380 00:00:09.500
40       2  ération  0.9955451 00:00:09.940 00:00:10.560
41       2       de  0.9363537 00:00:10.560 00:00:10.680
42       2    graph  0.9789081 00:00:10.680 00:00:10.990
43       2    iques  0.9611928 00:00:10.990 00:00:11.300
44       2       et  0.9919128 00:00:11.300 00:00:11.360
45       2       de  0.9849253 00:00:11.430 00:00:11.540
46       2    table  0.9974129 00:00:11.540 00:00:11.850
47       2       au  0.9775728 00:00:11.850 00:00:11.960
48       2        .  0.9463531 00:00:12.000 00:00:12.000
49       3      ...  0.4753985 00:00:12.000 00:00:13.090
50       4      ...  0.7621532 00:00:13.260 00:00:13.260 

Je pense que cet outil peut être très utile pour celles et ceux qui mènent des enquêtes par interview, et qui ensuite réalisent des analyses textuelles.

Vous trouverez un peu plus d’informations sur le package audio.whisper sur sa page GitHub

ChatGPT et R

A moins d’avoir été coupé du monde ces dernières semaines, à priori, vous avez entendu parler de chatGPT, l’intelligence artificielle qui peut générer des réponses à des questions.

Les médias ont surtout présenter ChatGPT comme un moyen de “tricher” en lui demandant de rédiger des dissertations ou des publications scientifiques à notre place.

Mais cela va bien au-delà, et vous pouvez, dès aujourd’hui, l’utiliser pour dépasser vos points de blocages sous R.

Je vous montre deux exemples tout simples.

Demander à ChatGPT d'écrire un script R spécifique

utilisation de chatGPT pour demander un code R

Demander à ChatGPT des explications sur un bout de code

Quelques ressources pour aller plus loin avec ChatGPT et R

Cadeau Bonus : une super BD à lire en ligne

Puisque vous êtes arrivés à la fin de cet article, voici un cadeau bonus 🎁 pour prolonger ce moment si agréable 😄.

J’ai découvert, très récemment, la BD crish, je vous la recommande à 200 % ! 

Son auteur (Greu) définit crish comme “une BD en ligne – ou webcomic – dans laquelle les protagonistes Alex et Nicole vont s’embarquer dans une grande aventure semi-fantastique et un poil absurde, mélangeant religion, monde de la recherche, jeux vidéo et raisonnements statistiques ! C’est décalé, drôle à souhait, et saupoudré de stats !

Personnellement, je n’ai pas pu m’arrêter avant la fin !

Le mot de la fin

J’espère que ce retour des news et découvertes vous a permis d’apprendre de nouvelles choses. Si vous découvrez des pépites 💎, n’hésitez pas à me le partager en m’envoyant un petit mail à claire@delladata.fr.

Vous souhaitez soutenir mon travail ?

C’est possible en faisant un don  sur la page Tipeee du blog  👇👇👇

6 réponses

  1. Yeahhh. Merci Claire pour le mot super sympa sur crish 🙂
    Tres interessant ce post. Je ne connaissais pas audio.whisper, et impressionant ce que repond ChatGPT la dessus!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bonjour !

vous venez souvent ?

Identifiez-vous pour avoir accès à toutes les fontionnalités !

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches “aide mémoire” (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.