Cette page est consacrée au calcul du nombre de patients nécessaires à plusieurs études telles qu'un essai clinique randomisé (ECR) pour l'inférence causale ou une cohorte pour construire ou valider un outil prédictif. Des codes R sont proposés. Nous pouvons cliquer ici pour accéder aux calculatrices liées aux utilisateurs. Quelques rappels:
RCT de supériorité: Utiliser pour démontrer que le traitement expérimental est plus efficace que la thérapie standard.
RCT de non-infériorité: utiliser pour démontrer que le traitement expérimental est aussi efficace que le traitement standard.
RCT séquentiel: analyses intermédiaires pour l'arrêt précoce de l'étude.
Considérez le RCT suivant avec deux groupes parallèles avec un rapport de randomisation 1: 1. La moyenne attendue est de 66 unités chez les patients du bras expérimental contre 72 unités dans le bras témoin. Afin de démontrer une telle différence de 6 unités, avec un écart-type de 23, un taux d'erreur de type I bilatéral de 5% et une puissance de 80%, la taille minimale de l'échantillon par ARM est égal à 231 (c'est-à-dire un total de 462 patients).
library( epiR )
epi.sscompc( treat = 66 , control = 72 , sigma = 23 , n = NA , power = 0.8 ,
r = 1 , sided.test = 2 , conf.level = 1 - 0.05 )
# > $n.total
# > [1] 462
# > $n.treat
# > [1] 231
# > $n.control
# > [1] 231
# > $power
# > [1] 0.8
# > $delta
# > [1] 6Paramètres d'entrée:
Considérez le RCT suivant avec deux groupes parallèles avec un rapport de randomisation 1: 1 et 2 analyses intermédiaires planifiées pour l'efficacité en utilisant la méthode de la flemage O'Brien pour considérer l'inflation du taux d'erreur de type I). La moyenne attendue est de 66 unités chez les patients du bras expérimental contre 72 unités dans le bras témoin. Afin de démontrer une telle différence de 6 unités, avec un écart-type de 23, un taux d'erreur de type I à 5% et une puissance de 80%, l'analyse finale doit être effectuée sur 472 patients (236 patients par groupe). Les première et deuxième analyses intermédiaires seraient effectuées respectivement sur 158 et 316 patients, soit 33% et 66% du nombre maximal de patients inclus en cas de décision d'arrêter l'étude.
library( " rpact " )
design <- getDesignGroupSequential(
typeOfDesign = " OF " , informationRates = c( 1 / 3 , 2 / 3 , 1 ),
alpha = 0.05 , beta = 1 - 0.8 , sided = 2 )
designPlan <- getSampleSizeMeans( design , alternative = 6 , stDev = 23 ,
allocationRatioPlanned = 1 )
summary( designPlan )
# > Stage 1 2 3
# > Planned information rate 33.3% 66.7% 100%
# > Cumulative alpha spent 0.0005 0.0143 0.0500
# > Stage levels (two-sided) 0.0005 0.0141 0.0451
# > Efficacy boundary (z-value scale) 3.471 2.454 2.004
# > Lower efficacy boundary (t) -13.012 -6.405 -4.258
# > Upper efficacy boundary (t) 13.012 6.405 4.258
# > Cumulative power 0.0329 0.4424 0.8000
# > Number of subjects 157.1 314.2 471.3
# > Expected number of subjects under H1 396.7
# > Exit probability for efficacy (under H0) 0.0005 0.0138
# > Exit probability for efficacy (under H1) 0.0329 0.4095 Paramètres d'entrée:
Considérez le RCT suivant avec deux groupes parallèles avec un rapport de randomisation 1: 1. La moyenne attendue est de 66 unités chez les patients du bras témoin et aucune différence par rapport au bras expérimental. En supposant une marge absolue de non-infériorité de 7 points, un écart-type de 23, la taille minimale de l'échantillon par bras est égale à 134 (c'est-à-dire un total de 268 patients) pour atteindre un taux d'erreur de type I à 5% unilatéral et une puissance de 80%
library( epiR )
epi.ssninfc( treat = 66 , control = 66 , sd = 23 , delta = 7 ,
power = 0.8 , alpha = 0.05 , r = 1 , n = NA )
# > $n.total
# > [1] 268
# > $n.treat
# > [1] 134
# > $n.control
# > [1] 134
# > $delta
# > [1] 7
# > $power
# > [1] 0.8Paramètres d'entrée:
Considérez le RCT suivant avec deux groupes parallèles avec un rapport de randomisation 1: 1. La proportion attendue d'événements est de 35% dans le bras expérimental contre 28% dans le bras témoin. Afin de démontrer une telle différence de 7%, avec un taux d'erreur à deux faces de type I de 5% et une puissance de 80%, la taille minimale de l'échantillon par ARM est égale à 691 (c'est-à-dire un total de 1382 patients).
library( epiR )
epi.sscohortc( irexp1 = 0.35 , irexp0 = 0.28 , power = 0.80 , r = 1 ,
sided.test = 2 , conf.level = 1 - 0.05 )
# > $n.total
# > [1] 1382
# > $n.exp1
# > [1] 691
# > $n.exp0
# > [1] 691
# > $power
# > [1] 0.8
# > $irr
# > [1] 1.25
# > $or
# > [1] 1.384615Paramètres d'entrée:
Considérez le RCT suivant avec deux groupes parallèles avec un rapport de randomisation 1: 1 et 2 analyses intermédiaires planifiées pour l'efficacité en utilisant la méthode de la flemage O'Brien pour considérer l'inflation du taux d'erreur de type I. La proportion attendue d'événements est de 11% chez les patients du bras expérimental contre 15% d'unités dans le bras témoin. Afin de démontrer une telle différence de 4%, avec un taux d'erreur de type I à 5% et une puissance de 80%, l'analyse finale doit être effectuée sur 2 256 patients (1 128 patients par groupe). Les première et deuxième analyses intermédiaires seraient effectuées respectivement sur 752 et 1 504 patients, soit 33% et 66% du nombre maximal de patients inclus en cas de décision de l'arrêt de l'étude.
library( " rpact " )
design <- getDesignGroupSequential( typeOfDesign = " OF " ,
informationRates = c( 1 / 3 , 2 / 3 , 1 ), alpha = 0.05 ,
beta = 1 - 0.8 , sided = 2 )
designPlan <- getSampleSizeRates( design , pi1 = 0.11 , pi2 = 0.15 ,
allocationRatioPlanned = 1 )
summary( designPlan )
# > Stage 1 2 3
# > Planned information rate 33.3% 66.7% 100%
# > Cumulative alpha spent 0.0005 0.0143 0.0500
# > Stage levels (two-sided) 0.0005 0.0141 0.0451
# > Efficacy boundary (z-value scale) 3.471 2.454 2.004
# > Lower efficacy boundary (t) -0.079 -0.042 -0.029
# > Upper efficacy boundary (t) 0.101 0.048 0.031
# > Cumulative power 0.0329 0.4424 0.8000
# > Number of subjects 751.8 1503.7 2255.5
# > Expected number of subjects under H1 1898.1
# > Exit probability for efficacy (under H0) 0.0005 0.0138
# > Exit probability for efficacy (under H1) 0.0329 0.4095 Paramètres d'entrée:
Considérez le RCT suivant avec deux groupes parallèles avec un rapport de randomisation 1: 1. Le pourcentage attendu d'événements est de 35% chez les patients du bras témoin et aucune différence par rapport au bras expérimental. En supposant une marge absolue de non-infériorité de 5%, la taille minimale de l'échantillon par bras équivaut à 1 126 (c'est-à-dire un total de 2 252 patients) pour atteindre un taux d'erreur de type I unilatéral de 5% et une puissance de 80%.
epi.ssninfb( treat = 0.35 , control = 0.35 , delta = 0.05 ,
n = NA , r = 1 , power = 0.8 , alpha = 0.05 )
# > $n.total
# > [1] 2252
# > $n.treat
# > [1] 1126
# > $n.control
# > [1] 1126
# > $delta
# > [1] 0.05
# > $power
# > [1] 0.8Paramètres:
Pour développer un modèle / alghorithme basé sur 34 prédicteurs en tant que candidats avec un R2 attendu d'au moins 0,25 et un retrait attendu de 0,9 (équation 11 dans Riley et al. Statistiques en médecine. 2019; 38: 1276–1296), la taille minimale de l'échantillon est de 1045.
34 / (( 0.9 - 1 ) * log( 1 - 0.25 / 0.9 ))
# > [1] 1044.796Considérez O / E le rapport entre le nombre d'événements observés par rapport à ceux attendus. Pour atteindre une précision définie comme une longueur de l'intervalle de confiance (1-α) de ce rapport équivaut à 0,2, si les proportions attendues sont de 50%, la taille de l'échantillon requise est de 386 (Riley et al. Taille minimale de l'échantillon pour la validation externe d'un modèle de prédiction clinique avec un résultat binaire. Statistiques en médecine. 2021; 19: 4230-4251).
se <- function ( width , alpha ) # The standard error associated with the 1-alpha confidence interval
{
fun <- function ( x ) { exp( qnorm( 1 - alpha / 2 , mean = 0 , sd = 1 ) * x ) - exp( - 1 * qnorm( 1 - alpha / 2 , mean = 0 , sd = 1 ) * x ) - width }
return (uniroot( fun , lower = 0.001 , upper = 100 ) $ root )
}
size.calib <- function ( p , width , alpha ) # the minimum sample size to achieve this precision
{
( 1 - p ) / (( p * se( width = width , alpha = alpha ) ** 2 ))
}
size.calib( p = 0.5 , width = 0.2 , alpha = 0.05 )
# > [1] 385.4265Paramètres d'entrée: