Après la publication de mon article sur la détermination du nombre minimal d’unités expérimentales pour une ANOVA, (👉 cliquez ici pour le consulter) j’ai reçu de nombreux commentaires et questions. J’ai alors écrit ce second article afin de partager des éléments complémentaires sur cette thématique du calcul du nombre de sujets nécessaires.
Le logiciel GPower permet de réaliser des calculs du nombre de sujets nécessaires ou de puissance, pour les principaux tests d’hypothèses et les principaux modèles de régression.
Je l’utilise très fréquemment pour vérifier le nombre de patients à inclure dans les essais de recherche clinique que j’étudie au comité de protection des personnes. Et pour avoir comparé ses résultats avec ceux obtenus avec d’autres logiciels ou application (dont des packages R), dans une multitude de situations, j’ai une grande confiance dans ce logiciel.
L’interface est un peu old-school, et un peu petite, mais le logiciel fait largement le job !
Vous pourrez le télécharger là https://www.psychologie.hhu.de/arbeitsgruppen/allgemeine-psychologie-und-arbeitspsychologie/gpower
Ici un calcul dans le cadre d’une comparaison de 2 moyennes :
Sur la page de téléchargement du logiciel 👉 https://www.psychologie.hhu.de/arbeitsgruppen/allgemeine-psychologie-und-arbeitspsychologie/gpower) vous trouverez aussi un mode d’emploi avec des exemples dans pas mal de situations courantes, je vous conseille de le télécharger aussi et de le consulter.
Il existe également tout une série de tutoriels vidéos sur la chaîne youtube d’Alexander Swan , mais je ne les ai jamais visionnés, je ne peux donc vous dire ce qu’ils valent.
Le site biostaTGV propose un calculateur du nombre de sujets nécessaire en ligne, pour quelques situations simples. Les calculs sont réalisés via R. Le projet est très sérieux, il est notamment soutenu par le réseau sentinelle et l’Inserm. J’ai souvent comparé les résultats avec ceux de Gpower, ils sont très similaires.
Ici un exemple de calcul dans le cadre d’une comparaison de 2 moyennes observées :
Comme vous pouvez le voir, les résultats obtenus (N=84) sont très proches de ceux obtenus avec G Power (N=86).
GPower et BiostaTGV couvrent les situations les plus fréquentes, mais peut être pas toutes celles dont vous aurez besoin. Si vous ne maîtriser pas l’utilisation du logiciel R , vous pouvez essayer de rechercher un calculateur en ligne en faisant une requête en anglais dans google .
Par exemple ”sample size calculator for non inferiority trial”
Comme ce n’est pas toujours évident d’avoir une pleine confiance dans les résultats, je vous suggère d’en utiliser plusieurs et de comparer les résultats obtenus !
À ma connaissance, le package le plus complet est le package TrialSize
, qui est très orientée recherche clinique. Vous pourrez avoir une idée de son contenu en consultant la liste des fonctions du manuel de référence 👉 https://cran.r-project.org/web/packages/TrialSize/TrialSize.pdf .
Voici un court extrait :
Pour des besoins plus simple il y a le package pwr
(que j’ai utilisé dans le premier article) qui se limite aux tests les plus courants : comparaison de moyennes, comparaison de proportions, anova. Voici ce que dit la doc :
This package contains functions for basic power calculations using effect sizes and notations from Cohen (1988) :
Et si vous avez des besoins ultra spécifiques, je vous recommande d’aller sur la page de packages de Cran 👉 https://cran.r-project.org/web/packages/available_packages_by_name.html et de faire une recherche (CTRL + F) avec le mot clé “power”, vous trouverez très certainement un package qui répondra à ces besoins.
Je connais principalement 2 ouvrages, orientés études cliniques :
Le package TrialSize
a été développé par une partie des auteurs de ce livre, et couvre une grande partie des situations qui y sont décrites.
En recherche clinique, il est fréquent d’anticiper la survenue d’éventuels perdus de vue (on appelle cela le biais d’attrition) en les intégrant dans le calcul du nombre de sujets nécessaires.
Le principe est de faire un calcul initial, puis de diviser le nombre obtenu par 1- le pourcentage de perdus de vue attendus.
Par exemple, si le calcul initial a conduit à N=340 et que l’on s’attend à 10% de perdus de vue, alors le nombre de patients à réellement inclure est :
\[ N’ = \frac{N}{1-%PV} = \frac{340}{1-0.1} = 378\]
Par exemple, dans la situation du calcul du nombre de sujets ( d’unités expérimentales) dans le cadre d’une ANOVA (voir le premier article), on pourrait souhaiter évaluer comment évolue ce nombre lorsque l’effect size, le nombre de groupes et la puissance, varient ensemble.
Pour cela, nous pouvons:
1. réaliser un data frame contenant toutes les combinaisons de ces paramètres
2. faire les calculs pour chaque combinaison
3. représenter graphiquement les résultats, en utilisant les facets de ggplot2
Les seuils d’effect size f classiquement employés pour l’ANOVA (voir https://imaging.mrc-cbu.cam.ac.uk/statswiki/FAQ/effectSize) sont :
Dans l’exemple suivant, je vais faire varier ce paramètre entre 0.1 et 0.4 par pas de 0.1.
Je vais également faire varier le nombre de groupes entre 3 et 5, et faire varier la puissance entre 0.7 et 0.95 par pas de 0.05.
#Charger le package tidyverse.
library(tidyverse)
# Créer une séquence de valeurs de 0.1 à 0.6 par pas de 0.1. Ces valeurs représentent l'effect size
f = seq(0.1, 0.4, by=0.1)
# Créer une séquence de valeurs de 3 à 6. Ces valeurs représentent la variable le nombre de groupes.
k= c(3:5)
# Créer une séquence de valeurs de 0.7 à 0.95 par pas de 0.05. Ces valeurs représentent la puissance du test.
power = seq(0.7, 0.95, by=0.05)
# Utiliser la fonction expand_grid du package tidyverse pour créer un data.frame avec toutes les combinaisons possibles de 'f', 'k', et 'power'.
mydf <- expand_grid(f=f, k=k, power=power)
# Afficher les 20 premières lignes du data.frame créé.
# %>% est l'opérateur de pipe qui prend le résultat de la gauche (mydf) et l'utilise comme premier argument de la fonction suivante (slice_head).
# slice_head() est une fonction de dplyr qui sélectionne les premières lignes d'un data.frame.
mydf %>%
slice_head(n=20)
# A tibble: 20 × 3
f k power
<dbl> <int> <dbl>
1 0.1 3 0.7
2 0.1 3 0.75
3 0.1 3 0.8
4 0.1 3 0.85
5 0.1 3 0.9
6 0.1 3 0.95
7 0.1 4 0.7
8 0.1 4 0.75
9 0.1 4 0.8
10 0.1 4 0.85
11 0.1 4 0.9
12 0.1 4 0.95
13 0.1 5 0.7
14 0.1 5 0.75
15 0.1 5 0.8
16 0.1 5 0.85
17 0.1 5 0.9
18 0.1 5 0.95
19 0.2 3 0.7
20 0.2 3 0.75
# Application de la fonction pwr.anova.test à chaque ligne de mydf afin de calculer le nombre de sujets nécessaires pour chaque combinaison
library(pwr)
mydf <- mydf %>%
rowwise() %>%
mutate(n = pwr.anova.test(k = k, f = f, sig.level = 0.05, power = power)$n)
# Affichage des 10 premières lignes de mydf
mydf %>%
slice_head(n=10)
# A tibble: 72 × 4
# Rowwise:
f k power n
<dbl> <int> <dbl> <dbl>
1 0.1 3 0.7 258.
2 0.1 3 0.75 287.
3 0.1 3 0.8 322.
4 0.1 3 0.85 365.
5 0.1 3 0.9 423.
6 0.1 3 0.95 516.
7 0.1 4 0.7 221.
8 0.1 4 0.75 245.
9 0.1 4 0.8 274.
10 0.1 4 0.85 309.
# visualisation
library(see) # pour utiliser la fonction scale_colour_material() et utiliser de + jolies couleurs
ggplot(mydf, aes(x=n, y=power, colour=as.factor(k)))+
geom_point()+
facet_wrap(~paste0("f=", f),
scales="free_x")+
geom_line()+
scale_colour_material()
J’espère que ce complément d’informations vous permettra de réaliser plus facilement vos calculs du nombre de sujets (ou d’unités expérimentales) nécessaires, afin de concevoir vos expérimentations de façon plus optimale.
Et si vous pensez que j’ai oublié quelques chose, ✍️ écrivez un commentaire 👇👇👇 pour le partager avec toutes les lectrices et lecteurs du blog 🙏
Retrouver le planning et les programmes de mes formations ici 👇👇👇
Retrouver mes propositions de services ici 👇👇👇
C’est possible en faisant un don sur la page Tipeee du blog
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.
4 réponses
Bonjour Madame
J’utilise ce chemin pour vous contacter.
Tout d’abord j’aime bien lire vos articles parfois bien techniques mais toujours d’appoint…me procurant de belles découvertes découlant du travail d’une passionnée de toute évidence.
Je suis retraité, un autodidacte en dilettante dans l’analyse de données, le plus souvent descriptives, puisant dans l’information statistique publique de l’administration gouvernementale et municipale.
Je fais alors les liens avec tous les tests statistiques pour m’approprier la théorie sous jacente et les calculs mathématiques les appuyant.
J’utilise beaucoup le logiciel R et Rcmdr et Factominer et les fonctions statistiques d’Excel…. et beaucoup d lectures spécialisées.
Jai découvert récemment le logiciel Jamovi que j’aime bien par ailleurs et permettant la visualisation rapide en modifiant plus facilement les requêtes.
Que pensez vous de ce logiciel …
Salutations du Québec…et continuez votre beau travail.
Merci Claire
Cela me sera utile
Cordialement
Bonjour Claire,
Merci pour vos posts que je trouve clairs, agréables à lire et que je conseille. Concernant le calcul du nombre de sujets, j’aimerais ajouter quelques commentaires.
Je dois d’abord préciser que mon domaine d’activité actuel concerne la recherche animale où la réduction du nombre d’animaux est cruciale.
Pour les ANOVAs, beaucoup de chercheurs font le calcul en ne considérant que des ANOVAs à une voie, alors que des ANOVAs à plusieurs voies avec interactions seraient plus justifiées. Par exemple, avec un plan 2×2, un f à 0.4 (correspondant grossièrement à un d de Cohen à 0.8), une puissance à 80% et un risque alpha à 0.05, le traitement par une ANOVA dite omnibus [une voie, 4 groupes] nécessite 76 sujets, alors que si on prend en compte l’interaction dans une ANOVA à deux voies, il suffit de 52 sujets. L’économie est de 32 %. J’anticipe peut-être sur votre prochain post.
Quelques précisions pour vos lecteurs. Dès qu’on multiplie les voies, il faut faire attention aux degrés de liberté et avec R au type de carrés (sujet que vous avez évoqué à propos des ANOVAs, je crois). Pour GPower, le site de Karl Wuensch est excellent https://core.ecu.edu/wuenschk/StatsLessons.htm Chercher dans la page Power Analysis, en particulier le calcul de puissance pour les ANOVAs (calcul du nombre de degrés de liberté et type de carrés). Il complète bien le tuto de GPower.
Pour les analyses de survie le logiciel PS Power and Sample Size de l’université Vanderbilt (https://biostat.app.vumc.org/wiki/Main/PowerSampleSize) est simple. Choisir l’onglet survival.
Concernant GPower, je ne comprends pas bien ce que signifie old-school. Dans ce cas, que dire de R que j’adore, mais qui me fait parfois penser à mes débuts en Fortran 80 colonnes, ou au C Kernighan et Ritchie ! Ce qui compte, c’est l’absence de bugs, ce qui n’est pas toujours le cas des jolies interfaces “modernes”.
Continuez, vos qualités de pédagogue sont précieuses.
Xav
PS. Avez-vous l’intention de faire un ou deux tutos sur les plans d’expérience ? R doit bien avoir des procédures dédiées.
Bonjour Xavier,
Merci beaucoup pour ce complément du complément, en particulier pour les deux liens précieux !