Tests statistiques dans BioRender Graphing : méthodes, vérifications des hypothèses et packages R Tests statistiques dans BioRender Graphing : méthodes, vérifications des hypothèses et packages R

Tests statistiques dans BioRender Graphing : méthodes, vérifications des hypothèses et packages R

Vous trouverez ci-dessous les packages, fonctions et méthodes spécifiques utilisés pour chaque test. Pour plus de transparence, tous les calculs sont réalisés avec R (version 4.5.1).

Table des matières

  1. Liste des packages R
  2. Vérifications des hypothèses statistiques
  3. Test t d’un échantillon (et tests non paramétriques)
  4. Test t pour deux échantillons (et tests non paramétriques)
  5. ANOVA à un facteur (et tests non paramétriques) et tests de comparaisons multiples
  6. ANOVA à deux facteurs et tests de comparaisons multiples
  7. Corrélation
  8. Régression logistique
  9. Courbes dose-réponse
  10. Analyse de survie

Tous les packages R

  • R version 4.5.1
  • afex version 1.3-1
  • dplyr version 1.2.1
  • effsize version 0.8.1
  • emmeans version 1.10.1
  • httr2 version 1.0.0
  • jsonlite version 1.8.4
  • lme4 version 1.1-37
  • logger version 0.2.2
  • multcomp version 1.4-20
  • nlraa version 1.9.3
  • OptimModel version 2.0-3
  • PMCMRplus version 1.9.6
  • readr version 2.1.5
  • rjson version 0.2.21
  • rstatix version 0.7.1
  • survival version 3.8-3
  • tictoc version 1.1
  • tidyr version 1.3.0
  • uuid version 1.2-0

Vérifications des hypothèses statistiques

Notre plateforme exécute automatiquement des tests pour vérifier les hypothèses essentielles à chaque type d’analyse. Nous suggérons des options d’analyse pré-sélectionnées basées sur ces résultats. Passer la souris sur les pastilles « suggéré » dans l’application affiche des détails sur ces recommandations.

Test de Shapiro-Wilk de normalité

Le test t paramétrique et l’ANOVA reposent sur l’hypothèse que votre jeu de données suit une distribution normale (courbe en cloche standard).

Nous exécutons en arrière-plan le test de Shapiro-Wilk pour vérifier si votre jeu de données viole cette hypothèse.

Si le test de Shapiro-Wilk (p > 0,05) ne rejette pas l’hypothèse de normalité, nous recommandons les tests paramétriques (ex. test t).

Si le test de Shapiro-Wilk (p ≤ 0,05) indique que les données ne sont pas distribuées normalement, nous appliquons une transformation logarithmique interne et testons à nouveau. Si le test ultérieur suggère une distribution normale en espace logarithmique, nous recommandons des tests paramétriques sur les données transformées (ex. test t lognormal).

Si les deux tests de Shapiro-Wilk rejettent l’hypothèse de normalité, nous suggérons des alternatives non paramétriques (ex. test U de Mann-Whitney).

Cette vérification utilise la fonction shapiro_test du package rstatix.

Test de Levene d’égalité des variances

Le test t paramétrique et l’ANOVA supposent que la variance des observations dans les différents groupes est approximativement la même.

Nous exécutons le test de Levene pour vérifier si votre jeu de données viole cette hypothèse.

Si les variances diffèrent, nous recommandons la correction de Welch pour tenir compte des variances inégales dans les tests t ou ANOVA.

Cette vérification utilise la fonction levene_test du package rstatix.

Nous utilisons le réglage par défaut, qui applique la médiane comme centre de chaque groupe pour un test plus robuste.


Test t d’un échantillon (et tests non paramétriques)

Un test t d’un échantillon détermine si la moyenne d’un seul échantillon diffère significativement d’une valeur connue ou hypothétique. Il suppose que les données proviennent d’une population distribuée normalement.

Test t d’un échantillon

Nous utilisons une implémentation personnalisée de base R qui calcule directement la statistique t comme (moyenne_échantillon − μ) / (SD / √n) en utilisant pt et qt du package stats pour les p-values et valeurs critiques respectivement. Les degrés de liberté sont n − 1. Les intervalles de confiance sont calculés sur la différence (moyenne_échantillon − μ) : pour un test bilatéral, diff ± qt(1 − α/2, df) × SE ; pour des tests unilatéraux, l’IC est [diff − qt(niveau_conf, df) × SE, Inf] ou [−Inf, diff + qt(niveau_conf, df) × SE]. La taille d’effet de Cohen d est rapportée comme (moyenne_échantillon − μ) / SD.

Test t de rapport d’un échantillon (lognormal)

Lorsque les données suivent une distribution lognormale, le test t de rapport vérifie si la moyenne géométrique diffère d’une valeur positive hypothétique. Le test log-transforme à la fois les données et la valeur hypothétique, effectue le même test t personnalisé sur l’échelle logarithmique, puis retransforme les résultats. La moyenne géométrique, l’écart-type géométrique et le rapport à la valeur théorique sont retournés sur l’échelle originale, avec les intervalles de confiance pour le rapport et la moyenne géométrique.

Test de Wilcoxon des rangs signés d’un échantillon

L’alternative non paramétrique pour les comparaisons d’un échantillon. Nous utilisons wilcox.test du package stats avec exact = NULL, laissant R choisir la méthode exacte ou asymptotique. Le drapeau p_value_exact est mis à TRUE lorsque le nombre de différences non nulles n_nz < 50 (strictement) et qu’il n’y a pas d’égalité dans les différences, reflétant le comportement attendu selon la logique interne de R. Une approximation normale avec correction de continuité est appliquée sinon (correct = TRUE).

La pseudo-médiane de Hodges–Lehmann est rapportée comme estimation de position : c’est la médiane de toutes les moyennes de Walsh par paires (x_i + x_j) / 2 pour i ≤ j (y compris les paires identiques i = j) calculées sur le vecteur original des valeurs — c’est l’estimateur H-L de la médiane de la population. La statistique V (somme des rangs signés positifs) ainsi que les sommes séparées des rangs positifs et négatifs sont également retournées.


Test t pour deux échantillons (et tests non paramétriques)

Les tests pour deux échantillons comparent un résultat continu entre deux groupes. BioRender propose des tests t paramétriques (supposant la normalité) et des alternatives non paramétriques ne faisant aucune hypothèse sur la distribution, ainsi que des variantes lognormales pour des données où les rapports, plutôt que les différences, sont l’effet pertinent.

Tous les tests paramétriques pour deux échantillons utilisent t_test du package rstatix, et tous les tests non paramétriques utilisent wilcox_test du même package. Les tailles d’effet pour les tests paramétriques sont calculées avec cohen.d du package effsize. Notez que t_test de rstatix calcule la différence comme niveau1 − niveau2 (ordre alphabétique) ; BioRender inverse la statistique t et les IC pour rapporter niveau2 − niveau1 (convention de GraphPad Prism), et les p-values unilatérales sont recalculées à partir de la statistique inversée via pt pour garantir l’utilisation de la bonne queue.

Test t non apparié à deux échantillons (de Student)

t_test(..., var.equal = TRUE). Suppose des variances égales ; utilise un écart-type groupé sur les deux groupes. L’SEM groupé est pooled_SD × √(1/n₁ + 1/n₂). Cohen d est calculé avec cohen.d(y, x, paired = FALSE).

Test t non apparié à deux échantillons avec correction de Welch (test t de Welch)

t_test(..., var.equal = FALSE). Ne suppose pas des variances égales ; utilise l’approximation de Welch pour les degrés de liberté (Satterthwaite). L’SEM est √(s₁²/n₁ + s₂²/n₂). Cohen d est calculé avec cohen.d(y, x, paired = paired) du package effsize, où paired est l’argument de la fonction (par défaut FALSE).

Test U de Mann-Whitney (test de rang-somme de Wilcoxon)

wilcox_test(..., paired = FALSE). Comparaison non paramétrique de deux échantillons indépendants. Les statistiques U₁ et U₂ sont calculées à partir des sommes des rangs : U₁ = R₁ − n₁(n₁+1)/2 et U₂ = R₂ − n₂(n₂+1)/2, où R₁ et R₂ sont les sommes des rangs pour chaque groupe. La statistique U rapportée est min(U₁, U₂).

Test t apparié

t_test(..., paired = TRUE). Les sujets sont appariés entre les deux conditions ; le test est effectué sur les différences intra-paires. Cohen d pour les designs appariés utilise la formule intra-sujets : |mean(x − y)| / √(SD₁² + SD₂² − 2r·SD₁·SD₂), où r est la corrélation de Pearson entre les deux conditions. Le coefficient de corrélation de Pearson et sa p-value sont également retournés.

Test de Wilcoxon des rangs signés appariés

wilcox_test(..., paired = TRUE). Équivalent non paramétrique du test t apparié. La somme des rangs signés positifs, la somme des rangs signés négatifs, et la somme totale des rangs signés W sont retournées. Le drapeau p_value_exact est mis à TRUE lorsque le nombre de paires est inférieur à 50 et qu’il n’y a pas d’égalité dans les différences, reflétant le comportement attendu selon la logique interne de rstatix. Le coefficient de corrélation par rang de Spearman et sa p-value entre les deux conditions sont également retournés.

Variantes lognormales (rapport)

Lorsque les données suivent une distribution lognormale, l’intérêt porte sur le rapport des moyennes géométriques plutôt que sur la différence des moyennes arithmétiques. Pour les tests non appariés et de Welch, toutes les valeurs sont transformées en logarithme naturel et le t_test correspondant est réalisé sur l’échelle logarithmique. Les moyennes géométriques sont retranscrites comme exp(mean(log(values))). Suivant la convention niveau2 − niveau1, geometric_mean1 correspond au deuxième groupe alphabétique et geometric_mean2 au premier ; le rapport rapporté est geometric_mean1 / geometric_mean2. Les IC sur le rapport sont obtenus en inversant et échangeant les bornes de l’IC sur l’échelle logarithmique : conf_low_ratio = exp(−conf.high_log), conf_high_ratio = exp(−conf.low_log). Pour le test lognormal apparié, Cohen d est aussi calculé sur l’échelle logarithmique ; la moyenne, l’écart-type, l’SEM des différences logarithmiques, et la corrélation de Pearson sur les données en log sont aussi retournés.


ANOVA à un facteur (et tests non paramétriques) et tests de comparaisons multiples

L’ANOVA à un facteur teste si les moyennes de trois groupes ou plus diffèrent significativement. BioRender prend en charge les mesures indépendantes, les mesures répétées, les modèles à effets mixtes, ainsi que les alternatives non paramétriques et l’ANOVA lognormale.

ANOVA classique à un facteur

Implémentée via aov_car du package afex. Les contrastes sont réglés en somme nulle (contr.sum) pendant l’analyse et restaurés à la sortie. Type de somme des carrés : Le type II est utilisé uniquement pour les plans indépendants équilibrés (groupes de même taille et pas de facteur de mesures répétées). Le type III est utilisé pour tous les autres cas : plans déséquilibrés, mesures répétées, et tous les plans multi-facteurs quel que soit l’équilibre. La taille d’effet est rapportée en eta carré généralisé (ges) depuis la table ANOVA de afex.

ANOVA à un facteur avec correction de Welch (ANOVA de Welch)

welch_anova_test de rstatix. Test F ne supposant pas l’égalité des variances entre groupes, utilisant un ajustement de Welch–Satterthwaite pour les degrés de liberté du dénominateur. Rapport la statistique W et les degrés de liberté du numérateur/dénominateur.

ANOVA lognormale

Les valeurs sont transformées en log₁₀ et classic_anova est réalisée sur les données transformées. Les statistiques F, p-values et degrés de liberté sont invariants à la base du logarithme ; SS et MS sont rapportés sur l’échelle log₁₀ pour correspondre à GraphPad Prism.

Test de Kruskal-Wallis

kruskal_test de rstatix. Analogue non paramétrique de l’ANOVA à un facteur. Rapport la statistique H et la p-value.

Tests post-hoc de comparaisons multiples

Les tests post-hoc sont réalisés après une ANOVA significative pour identifier quels couples de groupes diffèrent.

  • Test de comparaisons multiples de Tukey utilise les moyennes marginales estimées de emmeans et les contrastes par paires ajustés par Tukey via pairs(..., adjust = "tukey"). Les intervalles de confiance et statistiques t pour chaque comparaison par paire sont retournés.
  • Test de comparaisons multiples de Bonferroni utilise le même cadre emmeans avec pairs(..., adjust = "bonferroni"). La valeur critique t pour l’IC est qt(0.05 / (2 × k), df), où k est le nombre de comparaisons.
  • Test de Dunnett (un témoin vs tous les autres) utilise glht de multcomp avec mcp(categories = "Dunnet"). Le groupe témoin est remis en référence avant l’ajustement ; les intervalles de confiance sont extraits via confint(glht_result).
  • Test de Games–Howell (post-hoc pour variances inégales) utilise games_howell_test de rstatix. La fonction rstatix applique un facteur √0.5 sur l’erreur standard groupée ; BioRender retire ce facteur en divisant par √0.5 (équivalent à multiplier par √2) pour correspondre à la formulation conventionnelle.
  • Test T3 de Dunnett (pour variances inégales) utilise dunnettT3Test de PMCMRplus. Les degrés de liberté par paires sont calculés avec la formule de Welch–Satterthwaite appliquée à chaque paire. Les valeurs critiques sont dérivées de la distribution t multivariée via qmvt.
  • Test de Dunn (non paramétrique, suit Kruskal–Wallis) utilise dunn_test de rstatix avec ajustement des p-values par Bonferroni pour toutes les comparaisons par paires. Lorsqu’un groupe témoin est spécifié, seules les comparaisons impliquant ce témoin sont retournées, et la correction Bonferroni utilise la taille de famille de Dunnett (k − 1 comparaisons) au lieu de k(k−1)/2.

ANOVA à deux facteurs et tests de comparaisons multiples

L’ANOVA à deux facteurs teste les effets de deux facteurs catégoriels et leur interaction sur un résultat continu. BioRender utilise la même fonction classic_anova que pour l’ANOVA à un facteur, étendue pour inclure une seconde colonne facteur dans le tableau de données.

  • Somme des carrés : Le type III est toujours utilisé pour l’ANOVA à deux facteurs (équilibrée ou non), qui évalue chaque effet en tenant compte de tous les autres. Les contrastes sont réglés en contr.sum (somme nulle) comme requis pour les SS de type III.
  • Taille d’effet est rapportée en eta carré généralisé (ges) pour chaque effet principal et pour l’interaction.
  • Mesures répétées : L’ANOVA à deux facteurs avec mesures répétées est prise en charge via la même infrastructure aov_car / afex. Le test de sphéricité de Mauchly est calculé pour les facteurs intra-sujets. La correction de Greenhouse–Geisser peut être appliquée aux effets violant la sphéricité.
  • Modèle à effets mixtes en secours : Lorsque les données de mesures répétées comportent des observations manquantes, un modèle à effets mixtes (via lme4::lmer) est utilisé, soit toujours, soit seulement en cas de détection de valeurs manquantes, selon l’option missing_value_handling.

Les tests post-hoc pour l’ANOVA à deux facteurs utilisent les mêmes fonctions que pour l’ANOVA à un facteur (Tukey, Bonferroni, Dunnett, Dunnett T3, Games–Howell) mais opèrent sur les moyennes des cellules d’interaction via emmeans. Les préfixes de niveau facteur que emmeans ajoute aux niveaux numériques sont supprimés des étiquettes de contraste avant de retourner les résultats, et les noms des colonnes facteurs intra-sujets précédés par afex (ex. Xfactor1) sont corrigés à leurs noms originaux.


Corrélation

L’analyse de corrélation quantifie l’association linéaire (Pearson) ou monotone (Spearman) entre deux variables continues et teste si cette association est différente de zéro.

Nous utilisons cor.test du package stats. Les valeurs manquantes sont gérées par suppression par paires. Un minimum de quatre observations complètes est requis.

Corrélation de Pearson

cor.test(x, y, method = "pearson") retourne le coefficient de corrélation de Pearson r, une statistique t sur n − 2 degrés de liberté, une p-value bilatérale, et des intervalles de confiance exacts à 95 % (via la transformation z de Fisher, appliquée en interne par R).

Corrélation de Spearman

cor.test(x, y, method = "spearman") retourne le coefficient de corrélation par rangs de Spearman ρ (rho). La distribution exacte par permutation est utilisée lorsqu’il n’y a pas d’égalité dans les valeurs et que n ≤ 50 (exact = TRUE) ; sinon l’approximation normale asymptotique est utilisée. Comme cor.test de R ne fournit pas d’IC pour la corrélation de Spearman, les IC à 95 % sont approximés via la transformation z de Fisher : z = 0.5 × ln((1 + ρ) / (1 − ρ)), SE = 1 / √(n − 3), et les bornes de l’IC sont retranscrites à l’échelle de la corrélation.

Visualisation

Que la corrélation de Pearson ou de Spearman soit sélectionnée, la droite de prédiction et la bande de confiance à 95 % affichées sur le nuage de points sont dérivées d’une régression linéaire simple (lm) ajustée aux données, sur 100 points espacés uniformément sur la plage observée de x, via predict(model, interval = "confidence", level = 0.95).

Régression linéaire simple

La régression linéaire simple modélise la relation entre un seul prédicteur continu et un résultat continu par une droite.

Nous utilisons lm du package stats : lm(dépendante ~ indépendante). Une option contraint l’ordonnée à l’origine à zéro via lm(dépendante ~ 0 + indépendante).

Les coefficients de pente et d’ordonnée à l’origine, leurs erreurs standard, statistiques t et p-values sont extraits directement de summary(model)$coefficients. L’IC à 95 % sur chaque coefficient est estimate ± qt(0.975, df.residual(model)) × SE. L’abscisse à l’origine est calculée comme −β₀ / β₁.

L’erreur standard de l’estimation (Sy.x) est √(SS_residuals / (n − 2)) pour le modèle non contraint, ou √(SS_residuals / (n − 1)) lorsque l’ordonnée est forcée à zéro, conformément à la convention de GraphPad Prism.

La significativité globale du modèle est évaluée par un test F : pf(F, df1, df2, lower.tail = FALSE) utilisant la statistique F de summary(model)$fstatistic.

Une courbe ajustée avec bande de confiance à 95 % est retournée sur 250 points espacés uniformément couvrant la plage observée du prédicteur, via predict(model, interval = "confidence").


Régression logistique

La régression logistique modélise le logarithme des cotes (log-odds) d’un résultat binaire comme une fonction linéaire d’un ou plusieurs prédicteurs. BioRender propose trois variantes : simple (un prédicteur), multiple (plusieurs prédicteurs) et régression logistique pénalisée de Firth pour petits échantillons ou déséquilibrés.

Tous les modèles de régression logistique utilisent glm du package stats avec family = binomial(link = "logit") et maxit = 100 (la valeur par défaut 25 peut silencieusement retourner un résultat non convergé sur des données proches de la séparation). Avant l’ajustement, le service vérifie la quasi-séparation complète (probabilités ajustées numériquement 0 ou 1) et évalue si la pénalisation de Firth est recommandée selon la détection de séparation, un faible nombre d’événements par variable (EPV) ou des taux d’événements rares.

Régression logistique simple

Ajuste un prédicteur continu ou binaire unique : glm(dépendante ~ indépendante, family = binomial(link = "logit")).

Les intervalles de confiance des coefficients sont calculés sur l’échelle des log-odds via la vraisemblance profilée avec confint, avec recours automatique aux IC de Wald si le profilage échoue. Les rapports de cotes et leurs IC à 95 % sont obtenus en exponentiant les estimations des coefficients et leurs bornes.

La valeur X à la probabilité prédite de 50 % (où le log-odds est nul, c’est-à-dire X = −β₀/β₁) est rapportée avec un IC à 95 % dérivé par la méthode delta.

L’ajustement du modèle est évalué par un test du rapport de vraisemblance contre le modèle nul (intercept seul). Les statistiques d’ajustement rapportées incluent R² de Tjur, R² de Cox–Snell, l’AUC de la courbe ROC (calculée via un algorithme vectorisé basé sur les rangs), et AICc. Les probabilités prédites et une bande de confiance sur la plage observée du prédicteur (250 points) sont retournées pour la visualisation ; la bande est calculée avec des IC de Wald sur l’échelle logit et retranscrite via plogis.

Régression logistique pénalisée de Firth

Lorsque la séparation parfaite ou quasi-parfaite est détectée, ou lorsque l’EPV est faible (moins d’environ 10 événements par prédicteur), les estimations du maximum de vraisemblance sont infinies ou très biaisées. Dans ces cas, BioRender ajuste le modèle de vraisemblance pénalisée de Firth (Firth 1993 ; Heinze & Schemper 2002), qui ajoute une pénalité de type Jeffreys à la log-vraisemblance pour produire des estimations finies et moins biaisées.

Le modèle de Firth est ajusté via une implémentation IRLS personnalisée. La convergence est évaluée simultanément sur trois critères : max|Δβ| < 1e-8 (changement L∞ des paramètres), max|U*(β)| < 1e-5 (valeur absolue maximale du vecteur score modifié, norme L∞), et |ΔL*| < 1e-5 (changement de la log-vraisemblance pénalisée).

Les intervalles de confiance sont calculés via la vraisemblance pénalisée profilée avec une fonction personnalisée firth_profile_ci(). Pour chaque paramètre, les autres sont réoptimisés à chaque valeur candidate β via IRLS contraint. Une expansion par doublement de l’intervalle (commençant à max(SE×3, 1.5), doublant jusqu’à un maximum de 50 sur l’échelle des log-odds) localise un intervalle de changement de signe, puis uniroot() (méthode de Brent) trouve la racine. Si aucun intervalle n’est trouvé, la borne est rapportée comme NA et ci_fallback_used = TRUE.

Les statistiques d’ajustement incluent R² de Tjur, R² de Cox–Snell, R² de McFadden, la déviance pénalisée (-2 × L*), la déviance nulle pénalisée, et AICc (calculé à partir de la log-vraisemblance non pénalisée).


Courbes dose-réponse

Les courbes dose-réponse modélisent la relation sigmoïde entre un stimulus (concentration, dose) et une réponse (inhibition, stimulation). BioRender ajuste par défaut le modèle logistique à quatre paramètres (4PL) ; les variantes à trois et cinq paramètres sont des cas particuliers.

Modèle à quatre paramètres (4PL)

L’équation logistique à quatre paramètres est :

  • Inhibition (log x) : y = bottom + (top − bottom) / (1 + 10^((log_IC50 − x) × hill_slope))
  • Inhibition (x linéaire) : y = bottom + (top − bottom) / (1 + (IC50 / x)^hill_slope)
  • Stimulation (x linéaire) : y = bottom + (top − bottom) × x^hill_slope / (x^hill_slope + EC50^hill_slope)

Les quatre paramètres libres sont : bottom (réponse minimale), top (réponse maximale), hill_slope (coefficient de Hill), et EC50/IC50 (concentration au point médian entre bottom et top).

Modèle à trois paramètres (3PL)

Équivalent au 4PL avec la pente de Hill contrainte : hill_slope = −1 pour l’inhibition, hill_slope = +1 pour la stimulation. Tous les autres paramètres restent libres.

Modèle logistique à cinq paramètres (5PL)

Étend le 4PL en ajoutant un facteur d’asymétrie S :

  • Log x : y = bottom + (top − bottom) / (1 + 10^((log_EC50 − x) × hill_slope))^S
  • x linéaire (inhibition) : y = bottom + (top − bottom) / (1 + (EC50/x)^hill_slope)^S

Lorsque S = 1, le 5PL revient au 4PL. S est initialisé à 1 et estimé librement. Note : le paramètre log_EC50 dans la formule 5PL est le point d’inflexion de la courbe. Lorsque S ≠ 1, la vraie EC50 diffère et est calculée par la correction : log_EC50_actual = log_inflection − log10(2^(1/S) − 1) / hill_slope.

Procédure d’ajustement

Tous les modèles sont ajustés avec nls du package stats. Les valeurs initiales sont dérivées des données : bottom et top sont initialisés aux moyennes minimales et maximales observées des groupes ; EC50/IC50 est initialisé par interpolation linéaire au point médian en y ; hill_slope est initialisé à ±1 selon la direction des données.

L’algorithme PORT (nl2sol) est essayé en premier (algorithm = "port"), car il supporte les contraintes de bornes et évite l’échec "minFactor" que rencontre l’algorithme Gauss-Newton par défaut sur l’axe du profil EC50. Si PORT échoue et qu’aucune borne utilisateur n’est active, un appel nls() sans algorithme explicite (Gauss-Newton par défaut) est tenté. Toute contrainte de paramètre spécifiée par l’utilisateur est passée en vecteurs lower / upper à nls ; la pente de Hill est aussi limitée à ±50 pour éviter la divergence, son signe étant fixé pour correspondre à la direction des données.

Les intervalles de confiance des paramètres ajustés sont calculés via la vraisemblance profilée avec confint(fit). Si le profilage échoue (ex. gradient singulier), une approximation de Wald est utilisée : estimate ± qt(0.975, df_residual) × SE. EC50/IC50 et son IC sont rapportés sur l’échelle log₁₀ et l’échelle originale de concentration.

Une concentration personnalisée (EC_x ou IC_x à un pourcentage de réponse spécifié par l’utilisateur) peut aussi être calculée. Pour l’inhibition, EC_x = EC50 × ((1/fraction − 1))^(1/hill_slope) ; pour la stimulation, EC_x = EC50 × (fraction / (1 − fraction))^(1/hill_slope). L’IC à 95 % sur la concentration personnalisée est approximé en propageant l’erreur relative de l’IC sur EC50.

Les statistiques d’ajustement rapportées sont R² (1 − SS_res / SS_tot), somme des carrés résiduels, Sy.x (erreur standard résiduelle), et degrés de liberté. Les bandes de confiance sur des grilles de concentration linéaire et logarithmique (250 points chacune) sont calculées via la méthode delta numérique : la formule du modèle est différenciée numériquement par rapport à chaque paramètre pour construire la matrice Jacobienne J, puis SE(ŷ) = √(J' × vcov(fit) × J) et la bande est ŷ ± t_{0.975, df} × SE(ŷ). Si la méthode delta échoue, la bande revient aux estimations ponctuelles uniquement.


Analyse de survie

L’analyse de survie modélise le temps jusqu’à un événement d’intérêt (ex. décès, rechute) en tenant compte des observations censurées — sujets n’ayant pas encore eu l’événement à la fin du suivi.

Toutes les analyses de survie utilisent des fonctions du package survival.

Courbes de Kaplan–Meier

Les courbes de survie de Kaplan–Meier sont estimées avec survfit en utilisant conf.type = "log-log" (transformation complémentaire log-log de la fonction de survie), méthode utilisée par GraphPad Prism et mieux adaptée aux probabilités de survie proches de 0 ou 1 que la méthode par défaut plain-log. Les groupes sont pris dans l’ordre d’apparition dans les données afin d’assurer que l’ordre des courbes correspond à l’entrée.

Le temps médian de survie et son IC à 95 % sont extraits avec quantile(km_fit, probs = 0.5). La courbe est étendue au temps maximal observé dans chaque groupe (même si ce temps ne contient que des observations censurées) pour que la fonction en escalier tracée ne soit pas tronquée prématurément.

Test du log-rank

Le test du log-rank compare les distributions de survie entre groupes sous l’hypothèse nulle des risques proportionnels. Nous utilisons survdiff avec rho = 0. La statistique du chi-deux est évaluée sur (nombre de groupes − 1) degrés de liberté.

Test de Gehan–Breslow–Wilcoxon

Une alternative au test du log-rank qui donne plus de poids aux temps précoces. Ce test est implémenté comme une statistique du chi-deux pondérée personnalisée (non via survdiff). À chaque temps d’événement t, un poids w_t = N_t (nombre à risque) est appliqué. Le vecteur score est Z_j = Σ_t N_t (d_jt − e_jt) et la matrice de variance-covariance utilise la variance hypergéométrique avec les termes N_t² appliqués. La statistique de test χ² = Z' V⁻¹ Z est évaluée sur K−1 degrés de liberté (décomposition de Cholesky ; pseudo-inverse QR en secours).

Rapports de risque

Deux méthodes d’estimation du rapport de risque sont fournies pour les comparaisons par paires de groupes.

Méthode logrank : Utilise le rapport observé-attendu HR = (O₁/E₁) / (O₂/E₂), où O et E sont obtenus depuis la sortie survdiff du log-rank. L’erreur standard de ln(HR) est √(1/E₁ + 1/E₂), donnant des IC à 95 % de exp(ln(HR) ± 1.96 × SE). Cela correspond au rapport de risque « logrank » de GraphPad Prism.

Méthode Mantel–Haenszel : Utilise la formule L = (O₁ − E₁) / V, HR = exp(L), avec des IC à 95 % de exp(L ± 1.96 / √V), où V est la variance de (O₁ − E₁) sous l’hypothèse nulle, prise de survdiff$var[1,1] d’un test log-rank par paires. Cela correspond au rapport de risque « Mantel–Haenszel » de GraphPad Prism (Machin, Cheung & Parmar ; Vaeth).

Régression de Cox aux risques proportionnels

La régression de Cox PH est ajustée avec coxph. En mode détection automatique, la méthode de gestion des liens est choisie automatiquement : « exact » en absence de liens d’événements, et « efron » en présence de liens ; la méthode peut aussi être spécifiée explicitement. Les intervalles de confiance des rapports de risque sont calculés via une fonction personnalisée de vraisemblance profilée (compute_profile_ci_cox()), qui trace la surface de vraisemblance profilée pour trouver la borne de l’IC au lieu de se baser sur l’approximation de Wald.

L’hypothèse des risques proportionnels est testée avec cox.zph, qui ajuste les résidus de Schoenfeld mis à l’échelle en fonction du temps et rapporte une p-value globale et par covariable ; une petite p-value suggère que le rapport de risque varie dans le temps, violant l’hypothèse PH.

Corrections des comparaisons multiples

Lorsque trois groupes ou plus sont comparés et qu’une méthode de correction est sélectionnée, les p-values des tests par paires sont corrigées pour comparaisons multiples. Les méthodes disponibles sont Bonferroni et Benjamini–Hochberg (taux de fausses découvertes), toutes deux appliquées via p.adjust, et Holm–Šídák, implémentée par une procédure progressive personnalisée.

What's new →
Discover more in BioRender
 
 BioRender AI

Draft custom figures in seconds from a text prompt.

Learn more → Browse help articles →
 
 Graphing

Turn raw data into journal-quality graphs in minutes.

Learn more → Browse help articles →

Cet article vous a-t-il été utile ?

Utilisateurs qui ont trouvé cela utile : 12 sur 14