Comment calculer le coefficient de corrélation intraclasse en Python

Guide complet pour calculer et interpréter le coefficient de corrélation intraclasse (CCI) en Python avec Pingouin dans un contexte de recherche psychologique.

Dr. Mohammed Looti Universitaire et chercheur spécialisé en psychologie
PUBLIÉ
Révisé scientifiquement · Dr. Marwa Abd-Alazim · septembre 16, 2026
Revu médicalement et scientifiquement Vérifié le : septembre 16, 2026
Dr. Marwa Abd-Alazim PhD in Psychology
Faculty Member • University of Kerbala
Critères d'évaluation et normes cliniques

Ce contenu fait l'objet d'un examen scientifique rigoureux et de normes éditoriales médicales afin de garantir l'exactitude clinique et la conformité aux directives fondées sur des preuves (APA / OMS).

Dans le domaine des sciences comportementales, de la psychiatrie clinique et de la psychométrie appliquée, la reproductibilité des mesures constitue la pierre angulaire de toute démarche scientifique rigoureuse. Qu’il s’agisse de valider une nouvelle échelle de diagnostic psychiatrique, d’évaluer la concordance entre cliniciens lors du codage d’entretiens semi-structurés, ou de calibrer des outils d’observation développementale, la simple intuition clinique ne saurait se substituer à une quantification probabiliste de la fidélité. La variabilité introduite par la subjectivité des évaluateurs représente une source majeure d’erreur de mesure, susceptible de diluer la puissance statistique des études, d’introduire des biais d’atténuation dans l’estimation des tailles d’effet et de compromettre la validité des décisions thérapeutiques.

Pour mesurer cette fidélité avec précision, le coefficient de corrélation intraclasse (CCI ou ICC en anglais) s’impose comme l’indice paramétrique le plus robuste et le plus polyvalent. Contrairement aux approches bivariées rudimentaires qui se cantonnent à évaluer la covariation linéaire entre deux séries de scores, le CCI dérive des modèles d’analyse de variance à effets aléatoires ou mixtes. Il permet d’isoler mathématiquement la variance réelle propre aux sujets évalués de la variance parasite attribuable aux évaluateurs ou aux fluctuations aléatoires du protocole expérimental.

L’essor de l’écosystème open source en science des données offre aujourd’hui aux psychométriciens et aux chercheurs en neurosciences un environnement informatique puissant et reproductible. Le langage Python, historiquement réputé pour ses bibliothèques générales d’apprentissage automatique, s’est enrichi d’outils hautement spécialisés tels que Pingouin et Statsmodels. Ce guide méthodologique et technique propose une exploration exhaustive de l’estimation du coefficient de corrélation intraclasse sous Python. Il détaille pas à pas les fondements théoriques des équations de variance, les arbres décisionnels présidant au choix du modèle approprié, la manipulation de structures tabulaires complexes avec Pandas, ainsi que la restitution des résultats conformément aux exigences éditoriales les plus strictes de l’American Psychological Association (APA).

1. Fondements psychométriques du coefficient de corrélation intraclasse

1.1 Définition et pertinence de la fidélité inter-juges en psychologie

La fidélité inter-juges quantifie le degré auquel deux ou plusieurs observateurs indépendants attribuent des scores identiques ou cohérents à un même ensemble de cibles comportementales, cognitives ou physiologiques. Dans la pratique psychologique, cette notion revêt une importance capitale. Lorsqu’un clinicien évalue l’intensité de la symptomatologie dépressive à l’aide d’une échelle telle que la Hamilton Depression Rating Scale (HAM-D), la cotation obtenue ne doit pas dépendre de la bienveillance intrinsèque, de la sévérité ou de la fatigue propre à l’examinateur, mais refléter fidèlement l’état clinique du patient.

Sur le plan conceptuel, il est fondamental d’établir une distinction nette entre l’accord absolu et la cohérence relative. La cohérence relative stipule que les évaluateurs maintiennent le même rang ordinal parmi les cibles, autorisant un écart additif constant entre leurs notations. Par exemple, si le juge A attribue systématiquement un point de plus que le juge B à l’ensemble des patients, la cohérence relative est parfaite. En revanche, l’accord absolu exige une identité numérique stricte des scores attribués. Dans les contextes où des seuils diagnostiques catégoriels déterminent une inclusion thérapeutique ou une hospitalisation, l’accord absolu représente l’unique critère méthodologique admissible, car un biais de cotation unilatéral modifie le statut clinique attribué aux individus.

L’utilisation de coefficients bivariés traditionnels, tels que la corrélation linéaire de Pearson ou le coefficient de rang de Spearman, s’avère inappropriée et trompeuse pour quantifier la fidélité inter-juges. Le coefficient de Pearson est insensible aux différences d’échelle et aux décalages systématiques entre évaluateurs. Deux cliniciens dont les scores présenteraient une relation parfaitement linéaire (par exemple, Score Juge 2 = Score Juge 1 + 5) obtiendraient un coefficient de corrélation de Pearson égal à 1.00, occultant complètement une absence totale d’accord absolu. De surcroît, ces indices bivariés ne peuvent comparer que deux juges à la fois, interdisant le traitement simultané de panels d’évaluateurs multiples sans recourir à des moyennes de corrélations mathématiquement contestables.

Le coefficient de corrélation intraclasse surmonte ces impasses en conceptualisant le problème d’évaluation sous l’angle de la décomposition de la variance. En psychométrie clinique, où les grilles d’observation portent sur des phénomènes subtils tels que les interactions parent-nourrisson, la sévérité des troubles du spectre de l’autisme ou le décodage d’expressions faciales micro-émotionnelles, le CCI isole la variance d’intérêt partagée par les sujets de la variance résiduelle générée par les erreurs de mesure. Il fournit un indice standardisé dont l’interprétation renvoie directement à la proportion de la variance totale qui peut être attribuée en toute confiance au trait psychologique latent mesuré.

1.2 Origines théoriques et cadre de la théorie classique des tests

Le cadre conceptuel du CCI s’enracine dans les postulats formels de la théorie classique des tests (TCT), formulée initialement par Charles Spearman et consolidée ultérieurement par Gulliksen ainsi que Lord et Novick. Selon l’axiome fondamental de ce modèle additif, tout score observé pour un sujet donné lors d’une session de mesure se décompose en une combinaison linéaire de deux entités inobservables mais théoriquement distinctes : le score vrai du sujet et une composante d’erreur aléatoire de mesure.

Mathématiquement, pour un sujet i évalué par un juge j, la relation s’énonce selon l’équation fondamentale :

Xij = Ti + Eij

Dans cette formulation, Ti représente l’espérance mathématique du score de l’individu sur une infinité d’administrations indépendantes (le score vrai), tandis que Eij incarne l’erreur aléatoire résiduelle, supposée d’espérance nulle, de variance constante et indépendante du score vrai ainsi que des erreurs associées aux autres observations. À partir de cette distribution de variables aléatoires, la variance totale des scores observés peut se décomposer en la somme de la variance des scores vrais et de la variance de l’erreur :

σ2X = σ2T + σ2E

La fidélité d’un instrument ou d’un panel de cotateurs est rigoureusement définie comme le ratio de la variance du score vrai sur la variance totale observée. Le coefficient de corrélation intraclasse représente la traduction empirique directe de ce ratio à travers l’appareil statistique de l’analyse de variance (ANOVA). Les travaux pionniers de Ronald Fisher au début du vingtième siècle sur les données agricoles et génétiques ont jeté les fondations du calcul de corrélations au sein de classes homogènes d’individus partageant un même patrimoine génétique ou environnemental.

Au fil des décennies, cette méthodologie a été transposée aux sciences humaines. L’apport décisif est venu des travaux fondateurs de Joseph Fleiss et Patrick Shrout à la fin des années 1970, qui ont formalisé la distinction entre modèles aléatoires et mixtes. Ils ont ainsi offert aux psychologues un outil capable de modéliser explicitement l’erreur causée par l’échantillonnage des évaluateurs, adaptant la théorie classique des tests aux réalités des protocoles expérimentaux contemporains.

1.3 Éventail des valeurs du CCI et seuils théoriques

Le coefficient de corrélation intraclasse se déploie théoriquement le long d’un continuum standardisé borné entre 0 et 1 lorsqu’il est interprété sous le prisme des composantes de la variance. Une valeur de 0 reflète une absence totale de fidélité de mesure : la totalité de la variabilité constatée dans les cotations empiriques découle de l’erreur aléatoire ou des désaccords structurels entre évaluateurs, rendant les scores observés dénués de toute validité informative. Inversement, une valeur de 1.00 témoigne d’un accord parfait : l’erreur de mesure est rigoureusement nulle, ce qui indique que l’intégralité de la dispersion observée s’explique par les écarts réels existant entre les sujets.

Néanmoins, sur le plan computationnel, l’estimation ponctuelle du CCI est obtenue non pas à partir des paramètres de population non observables, mais à partir des carrés moyens issus d’une table d’analyse de variance calculée sur un échantillon empirique. Dans cette perspective d’estimation paramétrique, le calcul repose sur des soustractions de carrés moyens d’erreur par rapport aux carrés moyens inter-sujets. Il en résulte que lorsque la variance observée entre les sujets est inférieure à la variance résiduelle au sein des sujets, le numérateur de l’équation devient arithmétiquement négatif.

Une valeur négative du CCI n’a aucun sens conceptuel en psychométrie puisqu’une variance vraie ne peut pas être inférieure à zéro. Sur le plan statistique et méthodologique, l’apparition d’un CCI négatif traduit le plus souvent une violation sévère des postulats sous-jacents du modèle d’évaluation. Ce phénomène survient fréquemment lorsque la taille de l’échantillon est excessivement restreinte, induisant une instabilité de l’estimation, ou lorsque le trait psychologique évalué présente une homogénéité extrême au sein de l’échantillon clinique, réduisant la dispersion inter-sujets à un niveau négligeable face au bruit de mesure.

Certains auteurs ont suggéré qu’un CCI négatif pouvait également signaler la présence d’un biais de cotation interactif destructeur, tel qu’un effet de contraste où les juges s’influencent mutuellement de manière polarisée. En pratique courante, toute estimation ponctuelle inférieure à zéro doit être tronquée et rapportée comme nulle (CCI = 0.00), tout en incitant le chercheur à vérifier immédiatement l’adéquation de son plan d’échantillonnage et la dispersion de ses données.

2. Typologie et modèles mathématiques du CCI selon Shrout et Fleiss

2.1 Le modèle à effets aléatoires à un facteur (CCI 1)

La taxonomie canonique établie par Shrout et Fleiss (1979) distingue trois modèles fondamentaux en fonction de la structure du plan de mesure et de la nature de l’échantillonnage des évaluateurs. Le premier de ces modèles, désigné sous le terme de modèle à effets aléatoires à un facteur (modèle 1), correspond à une configuration expérimentale spécifique : chaque sujet est évalué par un groupe distinct d’évaluateurs, choisis aléatoirement au sein d’une vaste population de juges potentiels.

Dans ce modèle, il est formellement impossible de dissocier la variance propre aux évaluateurs de la variance d’erreur résiduelle, car les juges ne sont pas croisés avec les sujets. L’équation décompose le score Xij du sujet i mesuré par le juge j selon l’expression :

Xij = μ + si + eij

où μ est la moyenne générale, si est l’effet aléatoire du sujet avec une variance notée σ2s, et eij regroupe indifféremment l’effet du juge et l’erreur d’observation, présentant une variance σ2e.

Ce cadre théorique débouche sur deux formulations distinctes selon l’usage opérationnel envisagé pour le score. Lorsque l’on souhaite estimer la fidélité de la notation attribuée par un seul évaluateur tiré au hasard, on utilise la formule du CCI(1,1) basée sur le carré moyen inter-sujets (BMS, Between-Subjects Mean Square) et le carré moyen intra-sujets (WMS, Within-Subjects Mean Square), où k représente le nombre d’évaluations par sujet :

CCI(1,1) = (BMS – WMS) / (BMS + (k – 1) * WMS)

Lorsque le protocole de recherche stipule que le score final retenu pour chaque patient sera la moyenne des notes attribuées par les k évaluateurs distincts, la fidélité de cette moyenne composite est calculée via le CCI(1,k) :

CCI(1,k) = (BMS – WMS) / BMS

Le modèle 1 s’avère particulièrement pertinent dans les contextes épidémiologiques à grande échelle ou dans les institutions de soins où chaque patient est évalué par l’infirmier ou le psychiatre de garde. Les contraintes logistiques empêchent alors d’assigner les mêmes professionnels à l’ensemble de la cohorte clinique, produisant des plans d’échantillonnage déséquilibrés et hautement fragmentés.

2.2 Le modèle à effets aléatoires à deux facteurs (CCI 2)

Le modèle à effets aléatoires à deux facteurs (modèle 2) représente le dispositif de référence le plus largement employé en recherche translationnelle et en psychométrie clinique. Dans ce schéma expérimental, l’ensemble des cibles ou patients est évalué par le même panel de k juges. Ces juges sont eux-mêmes considérés comme un échantillon aléatoire représentatif issu d’une population parente plus vaste d’évaluateurs qualifiés (par exemple, cinq neuropsychologues tirés au sort parmi tous les praticiens d’un réseau hospitalier).

Grâce à ce croisement complet entre sujets et évaluateurs, il devient possible d’extraire la variance liée aux juges. Le score s’exprime selon le modèle linéaire :

Xij = μ + si + jj + (sj)ij + eij

où jj représente l’effet aléatoire du juge avec une variance σ2j, et les termes d’interaction sujet-juge sont généralement confondus avec l’erreur résiduelle dans un carré moyen d’erreur résiduelle noté EMS (Error Mean Square). Le carré moyen attribuable à la variabilité entre les juges est noté JMS (Judges Mean Square).

Le modèle 2 évalue rigoureusement l’accord absolu, car toute différence systématique d’évaluation entre les juges vient pénaliser le coefficient en augmentant le dénominateur de l’équation. Pour une mesure unique (CCI 2,1), la formulation s’établit comme suit :

CCI(2,1) = (BMS – EMS) / (BMS + (k – 1) * EMS + (k / n) * (JMS – EMS))

où n représente le nombre total de sujets évalués. Si la décision clinique finale repose sur la moyenne des scores des k évaluateurs, le coefficient CCI(2,k) est formulé par :

CCI(2,k) = (BMS – EMS) / (BMS + (JMS – EMS) / n)

L’avantage épistémologique du modèle 2 réside dans sa grande généralisabilité : les indices de fidélité ainsi calculés ne s’appliquent pas uniquement aux cliniciens ayant participé à l’expérimentation, mais peuvent être étendus à n’importe quel panel d’évaluateurs de même qualification appliquant le même protocole d’évaluation psychométrique standardisé.

2.3 Le modèle à effets mixtes à deux facteurs (CCI 3)

Le troisième modèle théorisé par Shrout et Fleiss est le modèle à effets mixtes à deux facteurs (modèle 3). Il s’applique lorsque les k évaluateurs mobilisés pour l’étude représentent les seuls juges d’intérêt et ne sont en aucun cas considérés comme un échantillon aléatoire extrait d’une population plus large. Les sujets constituent toujours un facteur à effets aléatoires, mais les juges sont modélisés comme un facteur à effets fixes. Ce modèle correspond à des situations où, par exemple, les trois créateurs d’une nouvelle grille diagnostique procèdent eux-mêmes à l’intégralité des codages expérimentaux.

Étant donné que les juges sont fixes, la variance inter-juges n’est plus considérée comme une source d’erreur d’échantillonnage aléatoire pour une population d’évaluateurs externes. Le modèle 3 s’intéresse donc prioritairement à la cohérence relative des cotations (bien qu’il puisse techniquement être décliné en accord absolu selon les développements ultérieurs de McGraw et Wong). Dans l’optique de la cohérence relative, la variance systématique attribuable aux juges (JMS) est entièrement neutralisée et soustraite du calcul de la fidélité.

L’estimation ponctuelle pour un évaluateur unique dans le cadre du modèle 3 s’exprime selon une relation simplifiée :

CCI(3,1) = (BMS – EMS) / (BMS + (k – 1) * EMS)

Pour la moyenne stabilisée des k juges fixes, l’équation prend la forme classique équivalente à l’alpha de Cronbach :

CCI(3,k) = (BMS – EMS) / BMS

La publication fondamentale de McGraw et Wong (1996) a clarifié et étendu la nomenclature de Shrout et Fleiss en formalisant la distinction explicite entre les objectifs de « Cohérence » (Consistency) et d’« Accord absolu » (Absolute Agreement) pour l’ensemble des modèles à deux facteurs. Les chercheurs doivent donc choisir avec précaution entre ces deux variantes en fonction des objectifs cliniques poursuivis.

3. Configuration de l’environnement scientifique Python

3.1 Installation et gestion des dépendances logicielles

L’implémentation robuste de l’analyse psychométrique en Python repose sur un écosystème de calcul numérique cohérent et rigoureusement versionné. Le calcul du coefficient de corrélation intraclasse nécessite l’interaction harmonieuse de bibliothèques dédiées à la manipulation de matrices et aux analyses statistiques inférentielles avancées. Pour garantir la reproductibilité des résultats d’une étude clinique, il est impératif d’isoler l’environnement d’exécution à l’aide d’un gestionnaire d’environnements virtuels tel que Conda ou l’utilitaire standard venv.

La mise en place de cet environnement commence par l’installation du paquet statistique central Pingouin, conçu spécifiquement pour les sciences comportementales et biomédicales. Cette bibliothèque encapsule les algorithmes de décomposition de variance et offre une interface intuitive pour l’analyse statistique. L’installation s’effectue simplement via le gestionnaire de paquets officiel :

pip install pingouin pandas numpy scipy statsmodels matplotlib seaborn

Il est indispensable de vérifier la compatibilité des versions installées, notamment entre NumPy, SciPy et Pandas. Les évolutions rapides des structures internes de Pandas (notamment depuis le passage à la version 2.0 et la refonte de la gestion des types de données sous Apache Arrow) peuvent parfois induire des comportements inattendus lors de manipulations matricielles complexes. L’inspection des versions dans une session interactive garantit l’intégrité de la chaîne de traitement :

import pingouin as pg
import pandas as pd
import numpy as np
import scipy
import statsmodels

print(f"Pingouin version: {pg.__version__}")
print(f"Pandas version: {pd.__version__}")
print(f"NumPy version: {np.__version__}")
print(f"SciPy version: {scipy.__version__}")
print(f"Statsmodels version: {statsmodels.__version__}")

3.2 Présentation de la bibliothèque Pingouin pour la psychométrie

Historiquement, les praticiens de la recherche psychologique et psychiatrique se trouvaient contraints de recourir à des logiciels propriétaires onéreux et fermés tels que SPSS ou SAS, ou devaient maîtriser le langage R pour exploiter des paquets spécialisés comme psych ou irr. Bien que la bibliothèque Scikit-learn domine l’apprentissage automatique sous Python, elle se désintéresse presque totalement des statistiques inférentielles, de la décomposition factorielle des variances et de la théorie classique des tests.

Conçue par Raphaël Vallat pour combler ce manque structurel, la bibliothèque Pingouin offre une syntaxe fluide inspirée de la philosophie de conception de R, tout en s’intégrant parfaitement dans l’écosystème Python orienté objet. Pingouin se distingue par le fait que ses fonctions statistiques acceptent directement des DataFrames Pandas comme arguments d’entrée et renvoient systématiquement des DataFrames Pandas exhaustifs en sortie, facilitant ainsi l’enchaînement des étapes de traitement de données (pipelines).

En ce qui concerne le calcul du CCI, Pingouin implémente une fonction d’analyse de variance à deux facteurs hautement optimisée. Elle calcule simultanément l’ensemble des six variantes algorithmiques définies par Shrout et Fleiss en un unique passage computationnel. Cette approche évite d’avoir à ajuster manuellement des modèles linéaires fastidieux et élimine les risques d’erreurs de syntaxe dans l’extraction des sommes de carrés et des carrés moyens résiduels.

4. Structuration et prétraitement des données psychologiques avec Pandas

4.1 Structure tabulaire : format long versus format large

L’étape préalable au calcul automatisé du CCI sous Python réside dans la modélisation et l’organisation tabulaire des observations psychométriques. Dans les bases de données cliniques traditionnelles, les informations sont majoritairement consignées sous un « format large » (wide format). Dans cette disposition, chaque ligne correspond à un patient unique identifié, et chaque colonne contient les notes attribuées par un clinicien particulier ou issues d’une séance spécifique (par exemple, les colonnes Juge_1, Juge_2, Juge_3).

Or, la fonction pingouin.intraclass_corr requiert impérativement des données organisées sous le « format long » (long format ou tidy data). Selon les canons théoriques énoncés par Hadley Wickham, un jeu de données est considéré comme structuré lorsque chaque variable constitue une colonne distincte et que chaque observation individuelle correspond à une ligne unique. Dans le contexte du CCI, trois colonnes distinctes sont formellement requises :

  • Une variable d’identification de la cible ou du sujet évalué (targets).
  • Une variable d’identification de l’évaluateur ou du juge (raters).
  • Une variable quantitative continue ou pseudo-continue représentant la note ou le score attribué (ratings).

La conversion d’une matrice large vers cette disposition longitudinale s’effectue sans difficulté grâce à la méthode pandas.melt(), comme illustré dans l’extrait ci-dessous :

import pandas as pd

# Matrice initiale au format large
df_large = pd.DataFrame({
    'Patient_ID': [f'P{i:03d}' for i in range(1, 6)],
    'Dr_Martin': [14.5, 18.0, 12.0, 22.5, 16.0],
    'Dr_Dubois': [15.0, 17.5, 13.0, 21.0, 16.5],
    'Dr_Lefebvre': [13.5, 19.0, 11.5, 23.0, 15.5]
})

# Transformation vers le format long (tidy)
df_long = pd.melt(
    df_large,
    id_vars=['Patient_ID'],
    value_vars=['Dr_Martin', 'Dr_Dubois', 'Dr_Lefebvre'],
    var_name='Evaluateur',
    value_name='Score_Symptome'
)

print(df_long.head())

4.2 Construction d’un jeu de données d’évaluation psychologique simulé

Afin d’illustrer la démarche sur un plan expérimental représentatif des études de validation psychométrique, nous allons générer un jeu de données simulé réaliste. Imaginons un protocole d’évaluation clinique standardisé dans lequel 30 patients adultes souffrant de troubles anxieux sont évalués de façon indépendante par 4 psychiatres chevronnés à partir d’entretiens vidéo enregistrés. L’échelle de cotation s’étend de 0 à 50 points.

Pour construire ce jeu de données, nous allons modéliser explicitement une composante de score vrai pour chaque patient, un biais systématique pour chaque évaluateur (par exemple, un juge structurellement plus sévère qu’un autre), ainsi qu’une erreur aléatoire de mesure à distribution normale gaussienne :

import numpy as np
import pandas as pd

# Fixation de la graine pseudo-aléatoire pour la reproductibilité
np.random.seed(42)

n_patients = 30
n_juges = 4
juges_noms = [f'Clinicien_{chr(65 + i)}' for i in range(n_juges)]
patients_ids = [f'Sujet_{i:02d}' for i in range(1, n_patients + 1)]

# 1. Génération des scores vrais latents des patients
# Distribution normale : moyenne = 28, écart-type = 7.5
scores_vrais = np.random.normal(loc=28.0, scale=7.5, size=n_patients)

# 2. Biais systématiques des cliniciens (effets juges)
# A = neutre, B = clément (+2.5), C = sévère (-3.0), D = légèrement clément (+1.0)
biais_juges = [0.0, 2.5, -3.0, 1.0]

# 3. Construction des observations avec erreur aléatoire
donnees_longues = []

for idx_pat, pat_id in enumerate(patients_ids):
    score_vrai_patient = scores_vrais[idx_pat]
    for idx_juge, juge_id in enumerate(juges_noms):
        erreur_mesure = np.random.normal(loc=0.0, scale=2.0)
        score_observe = score_vrai_patient + biais_juges[idx_juge] + erreur_mesure
        
        # Tronquage aux bornes réalistes de l'échelle théorique [0, 50]
        score_final = np.clip(score_observe, 0.0, 50.0)
        
        donnees_longues.append({
            'Target': pat_id,
            'Rater': juge_id,
            'Rating': np.round(score_final, 1)
        })

df_psychometrie = pd.DataFrame(donnees_longues)
print(df_psychometrie.info())
print(df_psychometrie.head(10))

4.3 Nettoyage et détection des anomalies de saisie

L’estimation rigoureuse d’un indice de fidélité paramétrique nécessite de vérifier la cohérence interne du jeu de données avant toute analyse. Dans les protocoles de recherche clinique multicentriques, les bases de données sont fréquemment altérées par des erreurs matérielles de saisie, des valeurs hors limites, des doublons d’enregistrement ou des déséquilibres imprévus dans le croisement des facteurs d’intérêt.

La première vérification consiste à s’assurer que les valeurs observées respectent scrupuleusement les bornes théoriques de l’instrument d’évaluation psychologique. L’exécution d’assertions logiques et d’analyses descriptives univariées via Pandas permet de repérer immédiatement toute valeur aberrante :

# Vérification de l'intégrité des bornes de cotation
score_min = df_psychometrie['Rating'].min()
score_max = df_psychometrie['Rating'].max()

assert score_min >= 0.0, f"Erreur critique : Score négatif détecté ({score_min})"
assert score_max <= 50.0, f"Erreur critique : Dépassement de la borne supérieure ({score_max})"

# Contrôle des doublons structurels juge-patient
doublons = df_psychometrie.duplicated(subset=['Target', 'Rater'], keep=False)
if doublons.any():
    raise ValueError(f"Doublons identifiés :n{df_psychometrie[doublons]}")
else:
    print("Contrôle structurel : Aucun doublon détecté. Chaque cellule est unique.")

Le second contrôle porte sur l’équilibrage complet du plan expérimental. Les modèles de calcul standard du CCI reposent sur une analyse de variance à deux facteurs sans cellule vide. Il convient donc de s’assurer, à l’aide d’une table de contingence croisée (crosstab), que chaque juge a coté l’intégralité des cibles sans omission :

matrice_contingence = pd.crosstab(df_psychometrie['Target'], df_psychometrie['Rater'])
verification_completude = (matrice_contingence == 1).all().all()

if not verification_completude:
    print("Attention : Présence de cellules vides ou d'observations répétées.")
else:
    print("Conception expérimentale parfaite : Plan entièrement croisé et équilibré.")

5. Exécution pas à pas du calcul du CCI avec pingouin.intraclass_corr()

5.1 Paramétrage exhaustif de la fonction

La fonction pingouin.intraclass_corr() synthétise l’ensemble des dérivations mathématiques nécessaires pour quantifier la fidélité inter-juges. Contrairement aux approches séquentielles imposant l’écriture de multiples modèles linéaires, cette fonction n’exige que quatre paramètres obligatoires pour fonctionner de manière optimale :

  • data : Le DataFrame Pandas contenant la totalité des observations sous format long structuré.
  • targets : Une chaîne de caractères indiquant le nom exact de la colonne désignant les entités évaluées (les patients, les séquences vidéo, les items).
  • raters : Une chaîne de caractères précisant le nom de la colonne identifiant les évaluateurs indépendants.
  • ratings : Une chaîne de caractères spécifiant le nom de la variable numérique représentant la mesure continue ou pseudo-continue à analyser.
  • nan_policy : Optionnellement, le comportement face aux valeurs manquantes, dont la valeur par défaut élimine les cibles incomplètes (listwise deletion).

Par défaut, l’appel de la fonction déclenche l’estimation simultanée des six déclinaisons du coefficient de corrélation intraclasse établies par la classification de Shrout et Fleiss (1979). Cela permet au statisticien d’examiner et de confronter en parallèle les différentes hypothèses opérationnelles relatives au mode d’agrégation des scores et à la nature des juges.

5.2 Implémentation du code complet d’exécution

L’exécution de la procédure statistique s’avère concise et élégante, ne nécessitant que quelques lignes de code Python bien structurées :

import pingouin as pg

# Appel direct de la fonction de corrélation intraclasse
table_resultats_icc = pg.intraclass_corr(
    data=df_psychometrie,
    targets='Target',
    raters='Rater',
    ratings='Rating'
)

# Configuration de l'affichage Pandas pour examiner toutes les colonnes
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 1000)
pd.set_option('display.precision', 4)

print("n--- TABLEAU DES RÉSULTATS PSYCHOMÉTRIQUES DU CCI ---")
print(table_resultats_icc)

L’exécution de cette commande génère instantanément un tableau d’analyse détaillé sous forme de DataFrame, structurant les métriques clés de l’inférence statistique : estimations ponctuelles, intervalles de confiance paramétriques, degrés de liberté du modèle, statistiques de test F et probabilités associées.

5.3 Options de personnalisation et variantes syntaxiques

Dans le cadre d’études cliniques multicentriques évaluant simultanément de multiples sous-échelles d’un inventaire psychologique, il est souvent utile d’encapsuler le calcul du CCI au sein d’une fonction réutilisable. Cette fonction peut alors automatiser le filtrage, l’analyse et l’exportation des résultats vers différents formats scientifiques exploitables (tels que LaTeX, CSV ou Excel) :

def analyser_fidelite_psychometrique(df, col_cible, col_juge, col_score, nom_echelle="Echelle_Clinique"):
    """
    Exécute le calcul du CCI et formate la sortie pour exploitation académique.
    """
    icc_df = pg.intraclass_corr(
        data=df,
        targets=col_cible,
        raters=col_juge,
        ratings=col_score
    )
    
    # Ajout du nom de l'échelle analysée pour faciliter la synthèse multicritère
    icc_df.insert(0, 'Echelle', nom_echelle)
    
    # Filtrage ciblé sur le modèle 2 (Accord Absolu)
    icc_modele_2 = icc_df[icc_df['Type'].isin(['ICC2', 'ICC2k'])].copy()
    
    # Séparation et formatage propre des bornes de l'intervalle de confiance
    icc_modele_2['IC95_Inf'] = icc_modele_2['CI95%'].apply(lambda x: x[0])
    icc_modele_2['IC95_Sup'] = icc_modele_2['CI95%'].apply(lambda x: x[1])
    
    return icc_df, icc_modele_2

# Exécution de la fonction modulaire
tableau_complet, synthese_modele_2 = analyser_fidelite_psychometrique(
    df=df_psychometrie,
    col_cible='Target',
    col_juge='Rater',
    col_score='Rating',
    nom_echelle='Inventaire_Anxiete'
)

# Exportation automatique pour publication
synthese_modele_2.to_csv('resultats_fidelite_inter_juges.csv', index=False)
print("Synthèse exportée avec succès.")
print(synthese_modele_2[['Echelle', 'Type', 'ICC', 'IC95_Inf', 'IC95_Sup', 'Fval', 'pval']])

6. Analyse approfondie des sorties statistiques générées par Python

6.1 Décomposition des colonnes du tableau de sortie de Pingouin

L’interprétation clinique des résultats calculés par Pingouin exige une compréhension fine de la structure de sa table de sortie. Cette table synthétise l’ensemble des concepts de la théorie de la fidélité. Le tableau renvoyé par la fonction intraclass_corr comprend systématiquement huit colonnes distinctes :

  • Type : L’abréviation technique désignant la forme spécifique du coefficient selon la nomenclature internationale : ICC1, ICC2, ICC3, ICC1k, ICC2k, et ICC3k.
  • Description : La formulation explicite du design expérimental modélisé. Par exemple, pour l’ICC2, Pingouin indique Two-way random effects, absolute agreement, single rater/measurement.
  • ICC : L’estimation ponctuelle paramétrique du coefficient de corrélation intraclasse calculée sur l’échantillon empirique.
  • F : La valeur observée de la statistique de test issue de la distribution de Snedecor-Fisher.
  • df1 : Le nombre de degrés de liberté associé au numérateur du test F (correspondant au nombre de sujets évalués moins un : n – 1).
  • df2 : Le nombre de degrés de liberté associé au dénominateur du test de Fisher.
  • pval : Le degré de signification statistique (valeur de p) associé au test de l’hypothèse nulle d’égalité du coefficient à zéro.
  • CI95% : Une structure de liste Python contenant les bornes inférieure et supérieure de l’intervalle de confiance calculé au seuil de confiance bilatéral de 95 %.

L’estimation ponctuelle renseigne directement sur la proportion de variance attribuable au score vrai sous les hypothèses du modèle considéré. L’examen attentif des estimations obtenues met en lumière les différences théoriques fondamentales qui existent entre ces indices. Typiquement, la valeur numérique de l’ICC3 (cohérence pure) est systématiquement supérieure ou égale à celle de l’ICC2 (accord absolu), car l’ICC3 soustrait la variance inter-juges de la composante d’erreur, ignorant les écarts systématiques de sévérité entre les cliniciens.

6.2 Intervalles de confiance à 95 % et inférence statistique

En psychométrie moderne, l’évaluation de la fidélité ne saurait en aucun cas se limiter à la simple lecture de l’estimation ponctuelle du CCI. Les directives méthodologiques stipulent qu’une interprétation rigoureuse doit systématiquement s’appuyer sur l’intervalle de confiance à 95 % (IC 95 %), et plus spécifiquement sur sa borne inférieure.

L’estimation de l’intervalle de confiance s’appuie sur la distribution théorique de la statistique F de Fisher. Pour les modèles à effets aléatoires à deux facteurs, les équations analytiques développées par Shrout et Fleiss, complétées par McGraw et Wong, exploitent des approximations exactes lorsque les composantes de la variance sont non nulles. La formule générale de calcul de la borne inférieure (L) et de la borne supérieure (U) pour le CCI(2,1) fait intervenir les percentiles de la distribution F :

Fobs / Fcritique_haut ≤ F ≤ Fobs * Fcritique_bas

L’amplitude de cet intervalle est directement déterminée par la taille de l’échantillon des sujets évalués (n) et, dans une moindre mesure, par le nombre d’évaluateurs (k). Un échantillon modeste (par exemple, 10 à 15 patients) peut produire une estimation ponctuelle très flatteuse (ex. : CCI = 0.85), mais assortie d’un intervalle de confiance excessivement large (ex. : IC 95 % [0.42, 0.96]). Dans un tel scénario, l’estimation réelle de la fidélité demeure hautement incertaine et peut tout aussi bien être jugée médiocre qu’excellente. Cette imprécision interdit toute conclusion définitive sur la fidélité clinique du protocole d’évaluation.

6.3 Tests de significativité : degrés de liberté, valeur F et p-valeur

Chaque ligne de la table générée par Pingouin est associée à un test formel d’hypothèse statistique nulle. L’hypothèse nulle s’énonce : H0 : CCI = 0, ce qui équivaut à postuler que la variance du score vrai des sujets est rigoureusement nulle et que les scores observés résultent exclusivement d’un bruit de mesure aléatoire et d’un désaccord complet entre les juges.

Pour tester cette hypothèse, le ratio de variance calculé suit une loi de Fisher-Snedecor paramétrée par les degrés de liberté df1 et df2. Dans le modèle à deux facteurs, le nombre de degrés de liberté au numérateur est invariablement égal à df1 = n – 1. Le calcul des degrés de liberté du dénominateur (df2) dépend en revanche du modèle théorique retenu :

  • Pour le modèle 3 (cohérence) : df2 = (n – 1)(k – 1).
  • Pour le modèle 2 (accord absolu) : les degrés de liberté sont approximés selon l’équation de Satterthwaite, car le dénominateur de la formule combine deux sources de variance distinctes (JMS et EMS).

Il importe de formuler une mise en garde méthodologique essentielle : l’obtention d’une probabilité hautement significative (par exemple, p < 0.001) n’implique absolument pas que l’instrument d’évaluation dispose d’une bonne fidélité inter-juges. Dans les cohortes de grande taille (ex. : n > 200), un CCI modeste de 0.35 sera presque systématiquement significatif sur le plan statistique en raison de la très forte puissance du test, rejetant formellement l’hypothèse d’une fidélité strictement égale à zéro. Pour autant, un tel niveau de concordance demeure cliniquement insuffisant pour une utilisation pratique. La prise de décision diagnostique doit donc reposer sur l’amplitude clinique de l’estimation et de son intervalle de confiance, et non sur la simple significativité de la p-valeur.

7. Arbre décisionnel pour sélectionner la forme adéquate de CCI

7.1 Critère 1 : Échantillonnage et statut des évaluateurs

Le choix d’un coefficient de corrélation intraclasse approprié dépend directement de la structure du plan de mesure et de la façon dont les évaluateurs ont été recrutés. Ce choix n’est donc pas d’ordre purement mathématique, mais relève d’une réflexion méthodologique approfondie sur les conditions de recueil des données.

Le premier point d’arbitrage concerne le mode de sélection et d’affectation des juges au protocole expérimental :

  • Si chaque cible de l’étude est évaluée par un groupe d’observateurs totalement distinct, tiré au hasard sans lien avec les observateurs des autres cibles, l’utilisation du Modèle 1 (effets aléatoires à un facteur) s’impose obligatoirement.
  • Si tous les sujets sont évalués par le même groupe de juges, et que ce groupe est considéré comme un échantillon représentatif tiré au sort au sein d’une population plus large de praticiens, c’est le Modèle 2 (effets aléatoires à deux facteurs) qui doit être retenu pour garantir la généralisabilité des résultats.
  • Si les juges constituent un panel fixe, unique et non interchangeable (par exemple, des chercheurs experts ayant mis au point le protocole et restant les seuls évaluateurs concernés), il convient d’appliquer le Modèle 3 (effets mixtes à deux facteurs).

Un cas particulier de plus en plus fréquent en psychologie computationnelle concerne l’évaluation automatisée de marqueurs comportementaux par des algorithmes d’apprentissage profond ou de traitement du langage naturel. Lorsqu’un algorithme de vision par ordinateur est comparé à un panel d’experts humains, cet algorithme doit obligatoirement être modélisé comme un facteur à effets fixes. L’objectif est alors d’évaluer la fidélité de cet outil spécifique, sans chercher à généraliser les conclusions à une population hypothétique d’algorithmes aléatoires.

7.2 Critère 2 : Mesure unique contre moyenne de plusieurs mesures

La deuxième décision méthodologique fondamentale réside dans l’arbitrage entre l’usage d’une mesure unique (single rater : indices notés ICC1, ICC2, ICC3) ou de la moyenne de plusieurs mesures (average raters : indices notés ICC1k, ICC2k, ICC3k). Ce choix doit refléter scrupuleusement la manière dont l’outil psychométrique sera déployé dans la pratique clinique quotidienne.

Si, dans le cadre de son activité courante, le psychologue clinicien pose un diagnostic à partir de la cotation réalisée par un seul professionnel lors de la consultation, le chercheur doit obligatoirement évaluer et rapporter le coefficient pour mesure unique (ICC2 ou ICC3). Choisir à tort le coefficient pour mesures moyennées gonflerait artificiellement la fidélité apparente de la procédure, masquant la variabilité inhérente aux évaluations individuelles.

À l’inverse, si le protocole diagnostique officiel impose qu’un patient soit examiné par un comité de trois praticiens indépendants et que la décision finale repose sur la moyenne de leurs scores respectifs, le coefficient pour moyenne (ICC2k ou ICC3k) constitue alors l’estimateur légitime. Sur le plan mathématique, l’accroissement systématique de la fidélité observé lors du passage d’une mesure individuelle à la moyenne de k mesures répond directement aux prédictions de la formule de prophétie de Spearman-Brown. Cette relation formelle montre que l’agrégation de plusieurs évaluations indépendantes réduit la variance de l’erreur aléatoire proportionnellement au nombre d’évaluateurs mobilisés.

7.3 Critère 3 : Accord absolu versus cohérence relative

Le troisième critère de sélection oppose l’accord absolu à la cohérence relative au sein des modèles à deux facteurs (modèles 2 et 3). Cette distinction dépend de la tolérance du protocole expérimental face aux décalages systématiques de cotation entre les évaluateurs.

La cohérence relative (consistency) neutralise les différences systématiques de niveau de cotation d’un juge à l’autre. Elle vérifie uniquement si les évaluateurs classent les sujets dans le même ordre de sévérité relative. Ce paramètre est particulièrement adapté aux études de recherche fondamentale qui s’intéressent aux corrélations de rang ou aux covariations entre construits psychologiques sans se focaliser sur le niveau absolu des scores.

À l’opposé, l’accord absolu (absolute agreement) prend en compte et pénalise toute divergence systématique entre les évaluateurs. Si le clinicien A attribue systématiquement des notes supérieures de 5 points à celles du clinicien B, l’accord absolu sera fortement dégradé. Cette pénalisation est indispensable dans les contextes cliniques où les scores sont comparés à des seuils diagnostiques stricts (par exemple, un score seuil de 24 sur l’échelle de dépression). Dans ce type de situation, deux cotations divergentes peuvent modifier directement la prise en charge thérapeutique du patient, rendant l’accord absolu incontournable.

8. Calcul alternatif via décomposition de la variance avec Statsmodels

8.1 Formulation de l’ANOVA à deux facteurs avec répétitions

Bien que la bibliothèque Pingouin offre une solution simple et rapide pour les cas standards, il est particulièrement formateur pour le statisticien de décomposer manuellement la variance à l’aide de la bibliothèque Statsmodels. Cette approche permet d’observer directement la mécanique sous-jacente du modèle linéaire général et facilite l’adaptation du calcul à des devis de recherche plus complexes.

Pour reconstituer le modèle à deux facteurs croisés sans interaction (puisqu’il n’y a qu’une seule observation par combinaison sujet-juge), nous ajustons un modèle de régression linéaire par les moindres carrés ordinaires (OLS). Les cibles et les évaluateurs y sont déclarés sous forme de variables catégorielles à l’aide de la syntaxe de formule Patsy :

import statsmodels.api as sm
import statsmodels.formula.api as smf

# Modélisation linéaire de la décomposition des scores
modele_ols = smf.ols('Rating ~ C(Target) + C(Rater)', data=df_psychometrie).fit()

# Extraction de la table d'analyse de variance de Type II
table_anova = sm.stats.anova_lm(modele_ols, typ=2)
print("--- TABLEAU D'ANALYSE DE VARIANCE (STATSMODELS) ---")
print(table_anova)

La table d’ANOVA ainsi générée fournit les sommes de carrés (Sum of Squares, SS), les degrés de liberté (df) ainsi que les carrés moyens (Mean Squares, MS) associés à chaque facteur d’intérêt.

8.2 Calcul programmatique direct des équations de Shrout et Fleiss

À partir des carrés moyens extraits du modèle d’analyse de variance, il devient possible de calculer directement les équations formelles du CCI à l’aide de NumPy. Cette démarche permet de vérifier la parfaite convergence des calculs manuels avec les résultats automatisés fournis par Pingouin :

import numpy as np

# 1. Extraction des composantes de variance (Carrés Moyens)
bms = table_anova.loc['C(Target)', 'sum_sq'] / table_anova.loc['C(Target)', 'df']
jms = table_anova.loc['C(Rater)', 'sum_sq'] / table_anova.loc['C(Rater)', 'df']
ems = table_anova.loc['Residual', 'sum_sq'] / table_anova.loc['Residual', 'df']

n = df_psychometrie['Target'].nunique()
k = df_psychometrie['Rater'].nunique()

print(f"BMS (Cibles) : {bms:.4f}")
print(f"JMS (Juges)  : {jms:.4f}")
print(f"EMS (Erreur) : {ems:.4f}")

# 2. Application manuelle des équations de Shrout et Fleiss
# Modèle 2 : Évaluateur unique, accord absolu
icc_2_1_manuel = (bms - ems) / (bms + (k - 1) * ems + (k / n) * (jms - ems))

# Modèle 2 : Moyenne de k évaluateurs, accord absolu
icc_2_k_manuel = (bms - ems) / (bms + (jms - ems) / n)

# Modèle 3 : Évaluateur unique, cohérence relative
icc_3_1_manuel = (bms - ems) / (bms + (k - 1) * ems)

print("n--- COMPARAISON DES CALCULS MANUELS ET PINGOUIN ---")
print(f"CCI(2,1) Calculé : {icc_2_1_manuel:.4f}")
print(f"CCI(2,k) Calculé : {icc_2_k_manuel:.4f}")
print(f"CCI(3,1) Calculé : {icc_3_1_manuel:.4f}")

Cette implémentation pas à pas met clairement en évidence la relation arithmétique qui lie les carrés moyens de l’analyse de variance aux coefficients de fidélité. Elle confirme que le CCI n’est rien d’autre qu’un ratio standardisé de variances issues du modèle linéaire général.

8.3 Modèles linéaires mixtes hiérarchiques pour designs complexes

L’utilisation de l’ANOVA classique se heurte à des limites méthodologiques majeures dès lors que le plan d’expérience est incomplet, déséquilibré ou comporte des données manquantes. Ces situations sont pourtant monnaie courante dans la pratique clinique réelle, où les abandons en cours d’étude et l’indisponibilité ponctuelle des évaluateurs empêchent fréquemment d’obtenir des grilles de cotation complètes.

Dans ces contextes complexes, la modélisation linéaire mixte hiérarchique (LMM) représente la solution statistique la plus adaptée. En utilisant le module statsmodels.regression.mixed_linear_model.MixedLM, il est possible d’estimer directement les composantes de variance via la méthode du maximum de vraisemblance restreinte (REML). Cette approche gère naturellement les observations manquantes sans imposer la suppression arbitraire de cibles entières :

import statsmodels.formula.api as smf

# Formulation du modèle mixte à intercepts aléatoires croisés
# Le facteur Target est modélisé comme effet aléatoire, le facteur Rater comme effet fixe ou aléatoire
modele_mixte = smf.mixedlm(
    formula="Rating ~ 1",
    data=df_psychometrie,
    groups=df_psychometrie["Target"],
    re_formula="1"
).fit(reml=True)

print(modele_mixte.summary())

# Extraction directe des composantes de variance estimées par REML
var_sujets = float(modele_mixte.cov_re.iloc[0, 0])
var_residuelle = float(modele_mixte.scale)

# Estimation directe du coefficient de corrélation intraclasse
icc_reml = var_sujets / (var_sujets + var_residuelle)
print(f"nCCI estimé via REML (Modèle Linéaire Mixte) : {icc_reml:.4f}")

Cette modélisation par équations d’estimation mixtes offre une souplesse remarquable. Elle permet d’intégrer sans difficulté des covariables explicatives continues (comme l’âge du patient ou l’ancienneté du clinicien), d’ajuster le calcul pour tenir compte d’effets de site dans les études multicentriques, et de modéliser des structures d’erreurs hétéroscédastiques ou autorégressives.

9. Directives d’interprétation et normes psychométriques

9.1 Seuils d’interprétation selon Koo et Li (2016)

L’interprétation quantitative de la valeur numérique d’un coefficient de corrélation intraclasse s’est longtemps appuyée sur des règles heuristiques vagues, sources de confusions dans la littérature médicale et psychologique. Pour standardiser ces pratiques, les travaux de référence de Koo et Li (2016) ont établi une grille d’interprétation rigoureuse, adoptée aujourd’hui par la majorité des comités de lecture académiques :

  • Fidélité médiocre (Poor reliability) : Valeur du CCI strictement inférieure à 0.50. L’erreur de mesure prédomine largement sur la variance réelle du trait évalué, interdisant toute utilisation du protocole à des fins de recherche ou de diagnostic.
  • Fidélité modérée (Moderate reliability) : Valeur du CCI comprise entre 0.50 et 0.75. Ce niveau d’accord peut suffire pour des études exploratoires en laboratoire ou des dépistages préliminaires, mais demeure trop imprécis pour guider des décisions cliniques individuelles.
  • Fidélité bonne (Good reliability) : Valeur du CCI comprise entre 0.75 et 0.90. Les cotations sont stables et reproductibles, autorisant l’usage de l’instrument dans les essais cliniques randomisés et les bilans diagnostiques standardisés.
  • Fidélité excellente (Excellent reliability) : Valeur du CCI strictement supérieure à 0.90. L’erreur de mesure est minime, ce qui répond aux exigences les plus strictes des évaluations individuelles à fort enjeu (décisions médico-légales, inclusion dans des protocoles de thérapies innovantes).

Koo et Li formulent par ailleurs une recommandation méthodologique essentielle, encore trop souvent négligée : l’interprétation clinique ne doit pas reposer uniquement sur l’estimation ponctuelle du CCI, mais doit obligatoirement être guidée par la borne inférieure de son intervalle de confiance à 95 %. Si un indice affiche une estimation ponctuelle séduisante de 0.82 (qualifiée de « bonne »), mais que son intervalle de confiance s’étend de 0.48 à 0.93, la borne inférieure indique que la fidélité réelle peut être médiocre. Dans une démarche clinique prudente, cet instrument ne saurait donc être certifié comme disposant d’une bonne fidélité.

9.2 Impact des propriétés de l’échantillon sur la magnitude du CCI

Le coefficient de corrélation intraclasse est un indice relatif et non une constante intrinsèque attachée à un instrument de mesure. Sa valeur numérique dépend directement de l’hétérogénéité de l’échantillon de cibles sur lequel il a été calculé. Ce phénomène, bien connu sous le nom de paradoxe de restriction de variance, doit inciter le chercheur à une grande prudence dans l’analyse de ses résultats.

Considérons deux échantillons de patients évalués à l’aide de la même échelle d’observation. Dans le premier groupe, très hétérogène, les patients présentent des niveaux d’atteinte clinique extrêmement variés (allant de l’absence de symptômes jusqu’à des formes très sévères). Dans ce cas, la variance inter-sujets (BMS) est très élevée par rapport à l’erreur de mesure, ce qui se traduit mécaniquement par un CCI proche de 1.00. Dans le second groupe, très homogène, les patients partagent un profil clinique quasi identique. La variance inter-sujets y est donc extrêmement faible. Même si les évaluateurs s’accordent très précisément sur chaque patient (avec une erreur absolue minime de un à deux points), la variance résiduelle représentera une part importante de la variance totale observée. Il en résultera un CCI très bas, qui pourrait faire conclure à tort à une mauvaise fidélité de l’outil.

De même, l’étendue de l’échelle d’évaluation influence directement la dispersion des notes. Une échelle de Likert courte en 3 ou 4 points induit fréquemment un effet de tassement de variance comparativement à une échelle continue en 100 points, ce qui complique les comparaisons directes de CCI d’un outil à l’autre. Il est donc indispensable d’évaluer la représentativité clinique et la variabilité de la cohorte étudiée avant de généraliser les conclusions relatives à la fidélité d’un instrument.

10. Diagnostic des données, gestion des données manquantes et robustesse

10.1 Vérification des postulats fondamentaux de normalité

L’exactitude des calculs de carrés moyens et la validité des intervalles de confiance paramétriques du CCI reposent sur des postulats statistiques stricts. Ces modèles supposent notamment que les scores vrais des sujets ainsi que les erreurs résiduelles de mesure suivent des distributions normales, et que la variance d’erreur reste constante sur toute l’étendue de l’échelle d’évaluation (hypothèse d’homoscédasticité).

L’évaluation de la normalité des résidus s’effectue simplement sous Python à l’aide du test formel de Shapiro-Wilk, complété par l’analyse visuelle des diagrammes quantile-quantile (Q-Q plots) :

import scipy.stats as stats
import statsmodels.api as sm

# Extraction des résidus du modèle linéaire d'ANOVA
residus = table_anova = smf.ols('Rating ~ C(Target) + C(Rater)', data=df_psychometrie).fit().resid

# Test formel de Shapiro-Wilk
stat_sw, p_val_sw = stats.shapiro(residus)
print(f"Test de normalité de Shapiro-Wilk sur les résidus : W = {stat_sw:.4f}, p = {p_val_sw:.4f}")

if p_val_sw < 0.05:
    print("Avertissement : Les résidus dévient significativement de la distribution normale.")
else:
    print("Postulat vérifié : Distribution normale des résidus confirmée.")

Lorsque les données empiriques violent de manière flagrante le postulat de normalité (par exemple, en présence d’effets de plancher marqués ou de scores fortement asymétriques), les intervalles de confiance paramétriques deviennent peu fiables. La solution méthodologique consiste alors à estimer l’intervalle de confiance par rééchantillonnage bootstrap non paramétrique. Cette méthode itérative génère des milliers de rééchantillonnages aléatoires avec remise afin de construire une distribution empirique robuste du CCI :

def bootstrap_icc(data, n_iterations=1000, alpha=0.05):
    """
    Calcule l'intervalle de confiance du CCI(2,1) par bootstrap non paramétrique au niveau des sujets.
    """
    sujets_uniques = data['Target'].unique()
    n_sujets = len(sujets_uniques)
    icc_bottes = []
    
    for _ in range(n_iterations):
        # Rééchantillonnage des identifiants patients avec remise
        echantillon_sujets = np.random.choice(sujets_uniques, size=n_sujets, replace=True)
        
        # Reconstruction de la structure de données correspondante
        df_boot = pd.concat([data[data['Target'] == s] for s in echantillon_sujets])
        # Réassignation d'identifiants uniques factices pour préserver la structure de croisement
        df_boot['Target_Sim'] = np.repeat(range(n_sujets), data['Rater'].nunique())
        
        try:
            res_boot = pg.intraclass_corr(data=df_boot, targets='Target_Sim', raters='Rater', ratings='Rating')
            val_icc = res_boot.loc[res_boot['Type'] == 'ICC2', 'ICC'].values[0]
            icc_bottes.append(val_icc)
        except Exception:
            continue
            
    borne_inf = np.percentile(icc_bottes, 100 * (alpha / 2))
    borne_sup = np.percentile(icc_bottes, 100 * (1 - alpha / 2))
    return np.mean(icc_bottes), (borne_inf, borne_sup)

icc_moyen, ic_boot = bootstrap_icc(df_psychometrie, n_iterations=500)
print(f"CCI(2,1) Bootstrap : {icc_moyen:.4f}, IC 95% Bootstrap : [{ic_boot[0]:.4f}, {ic_boot[1]:.4f}]")

10.2 Gestion des données manquantes dans les grilles d’évaluation

Dans les protocoles longitudinaux ou multicentriques, l’absence imprévue d’un clinicien ou l’interruption d’une passation psychologique génère inévitablement des cellules vides dans la matrice de données. La fonction pingouin.intraclass_corr applique par défaut une politique stricte d’élimination des données manquantes (listwise deletion) : tout patient qui ne dispose pas d’une cotation complète par l’ensemble des juges est purement et simplement exclu du calcul.

Cette approche par élimination peut considérablement dégrader la puissance statistique de l’étude et introduire des biais d’échantillonnage majeurs si les données manquantes ne surviennent pas de façon totalement aléatoire (mécanisme MCAR, Missing Completely At Random). Si les omissions dépendent de l’état clinique du patient (mécanismes MAR ou MNAR, comme des patients très perturbés refusant certaines parties de l’entretien), l’élimination des cas incomplets faussera directement l’estimation de la fidélité.

Pour traiter ces situations plus rigoureusement sans exclure arbitrairement de patients, on peut recourir à l’imputation multiple par équations chaînées (MICE). L’algorithme IterativeImputer de Scikit-learn permet d’imputer les scores manquants en s’appuyant sur l’ensemble des corrélations observées entre les évaluateurs :

from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

# Pivotement temporaire en matrice large pour l'imputation multivariée
df_matrice_large = df_psychometrie.pivot(index='Target', columns='Rater', values='Rating')

# Introduction délibérée de valeurs manquantes simulées (10% des données)
np.random.seed(101)
masque_manquant = np.random.rand(*df_matrice_large.shape) < 0.10
df_manquant_large = df_matrice_large.mask(masque_manquant)

# Application de l'imputation itérative multivariée
imputeur = IterativeImputer(max_iter=20, random_state=42)
matrice_imputee = imputeur.fit_transform(df_manquant_large)

df_impute_large = pd.DataFrame(matrice_imputee, index=df_matrice_large.index, columns=df_matrice_large.columns)

# Reconversion vers le format long standardisé
df_impute_long = df_impute_large.reset_index().melt(
    id_vars=['Target'],
    var_name='Rater',
    value_name='Rating'
)

# Recalcul de la fidélité sur les données complétées
icc_apres_imputation = pg.intraclass_corr(data=df_impute_long, targets='Target', raters='Rater', ratings='Rating')
print("CCI calculé avec succès après imputation multivariée.")

10.3 Détection de juges aberrants ou d’effets de contamination

L’estimation globale d’un CCI peut être fortement pénalisée par le comportement atypique d’un seul évaluateur au sein du panel. En psychométrie, ce problème renvoie généralement à des biais de cotation bien identifiés :

  • L’effet de clémence ou de sévérité : Décalage systématique de la moyenne des scores d’un clinicien par rapport à celle de ses pairs.
  • Le biais de tendance centrale : Réticence d’un observateur à exploiter les extrêmes de l’échelle, regroupant artificiellement l’ensemble de ses notes autour du point médian.
  • L’effet de halo : Tendance d’un évaluateur à laisser une impression générale influencer la cotation de dimensions comportementales pourtant distinctes.

Pour isoler l’impact spécifique de chaque évaluateur sur la fidélité globale, il est recommandé de mettre en œuvre une procédure d’analyse séquentielle avec exclusion pas à pas (leave-one-out sensitivity analysis) :

def diagnostiquer_juges_aberrants(df_long):
    """
    Exécute une analyse de sensibilité pour évaluer la contribution de chaque juge au CCI global.
    """
    juges = df_long['Rater'].unique()
    resultats_sensibilite = []
    
    # Calcul de référence avec tous les juges
    icc_baseline = pg.intraclass_corr(data=df_long, targets='Target', raters='Rater', ratings='Rating')
    baseline_val = icc_baseline.loc[icc_baseline['Type'] == 'ICC2', 'ICC'].values[0]
    
    for juge_exclu in juges:
        df_filtre = df_long[df_long['Rater'] != juge_exclu]
        res_exclusion = pg.intraclass_corr(data=df_filtre, targets='Target', raters='Rater', ratings='Rating')
        icc_sans_juge = res_exclusion.loc[res_exclusion['Type'] == 'ICC2', 'ICC'].values[0]
        
        delta_icc = icc_sans_juge - baseline_val
        
        resultats_sensibilite.append({
            'Juge_Exclu': juge_exclu,
            'CCI2_Sans_Juge': icc_sans_juge,
            'Impact_Delta': delta_icc
        })
        
    df_diagnostic = pd.DataFrame(resultats_sensibilite).sort_values(by='Impact_Delta', ascending=False)
    return df_diagnostic

df_diagnostic = diagnostiquer_juges_aberrants(df_psychometrie)
print("n--- DIAGNOSTIC D'IMPACT INDIVIDUEL DES ÉVALUATEURS ---")
print(df_diagnostic)

Si l’exclusion d’un évaluateur particulier entraîne une hausse spectaculaire du CCI (un delta fortement positif), cela met en évidence une divergence méthodologique majeure chez ce praticien. Dans un contexte de recherche clinique, ce résultat justifie un réexamen de ses grilles de cotation et une session de recalibrage de l’équipe d’évaluation.

11. Visualisation graphique de l’accord inter-juges avec Matplotlib et Seaborn

11.1 Graphiques de dispersion et droites d’identité pour paires de juges

L’inspection visuelle des données d’évaluation constitue un préalable indispensable à l’analyse numérique. Pour comparer deux juges en particulier, la méthode graphique de référence repose sur le tracé d’un nuage de points enrichi de la bissectrice d’identité parfaite (la droite mathématique d’équation y = x).

Contrairement à une droite de régression linéaire qui illustre simplement la covariation entre deux variables, la droite d’identité à 45 degrés visualise directement l’accord absolu. Tout point s’écartant de cette ligne traduit un désaccord numérique entre les observateurs. En utilisant la fonction jointplot de la bibliothèque Seaborn, il devient aisé de combiner ce nuage de points avec les distributions marginales des deux cliniciens, permettant d’identifier immédiatement d’éventuels décalages d’asymétrie ou de tendance centrale :

import matplotlib.pyplot as plt
import seaborn as sns

# Préparation d'une matrice large pour visualiser deux évaluateurs
df_paire = df_psychometrie.pivot(index='Target', columns='Rater', values='Rating')

# Création du graphique de dispersion enrichi des distributions marginales
g = sns.jointplot(
    data=df_paire,
    x='Clinicien_A',
    y='Clinicien_B',
    kind='scatter',
    color='#1f77b4',
    height=8,
    marginal_kws=dict(bins=10, fill=True, color='#4c72b0')
)

# Tracé de la ligne de référence d'identité parfaite (y = x)
limites_axes = [
    min(df_paire['Clinicien_A'].min(), df_paire['Clinicien_B'].min()) - 2,
    max(df_paire['Clinicien_A'].max(), df_paire['Clinicien_B'].max()) + 2
]

g.ax_joint.plot(limites_axes, limites_axes, color='red', linestyle='--', linewidth=2, label='Accord Parfait (y = x)')
g.ax_joint.set_xlim(limites_axes)
g.ax_joint.set_ylim(limites_axes)
g.ax_joint.set_xlabel('Cotations : Clinicien A', fontsize=12, fontweight='bold')
g.ax_joint.set_ylabel('Cotations : Clinicien B', fontsize=12, fontweight='bold')
g.ax_joint.legend(loc='upper left', frameon=True)

plt.suptitle("Concordance Inter-Juges : Dispersion et Droite d'Identité", y=1.02, fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()

11.2 Diagrammes de Bland-Altman appliqués aux échelles continues

Proposée initialement pour valider de nouveaux dispositifs de mesure en bio-ingénierie, la méthode graphique de Bland et Altman (1986) représente l’outil d’analyse diagnostique le plus puissant pour sonder les désaccords entre deux évaluateurs sur une échelle continue. Plutôt que de représenter les mesures brutes l’une contre l’autre, le graphique de Bland-Altman projette la différence individuelle des scores (Juge A – Juge B) sur l’axe des ordonnées, et la moyenne des deux cotations sur l’axe des abscisses.

Ce graphique met en évidence la présence éventuelle d’un biais systématique (la moyenne arithmétique de l’ensemble des différences) et trace les limites d’accord empiriques à 95 %, calculées selon la formule :

Limites d’Accord = Moyenne des Différences ± 1.96 * Écart-type des Différences

import numpy as np
import matplotlib.pyplot as plt

scores_juge_a = df_paire['Clinicien_A'].values
scores_juge_c = df_paire['Clinicien_C'].values

# Calcul des grandeurs différentielles et moyennes
differences = scores_juge_a - scores_juge_c
moyennes = (scores_juge_a + scores_juge_c) / 2.0

biais_moyen = np.mean(differences)
ecart_type_diff = np.std(differences, ddof=1)
limite_sup = biais_moyen + 1.96 * ecart_type_diff
limite_inf = biais_moyen - 1.96 * ecart_type_diff

# Construction graphique du diagramme de Bland-Altman
plt.figure(figsize=(10, 6))
plt.scatter(moyennes, differences, color='#2ca02c', edgecolor='black', alpha=0.8, s=60)
plt.axhline(biais_moyen, color='blue', linestyle='-', linewidth=2, label=f'Biais Moyen ({biais_moyen:+.2f})')
plt.axhline(limite_sup, color='red', linestyle='--', linewidth=1.5, label=f'Limite Supérieure (+1.96 ET : {limite_sup:+.2f})')
plt.axhline(limite_inf, color='red', linestyle='--', linewidth=1.5, label=f'Limite Inférieure (-1.96 ET : {limite_inf:+.2f})')
plt.axhline(0, color='gray', linestyle=':', linewidth=1)

plt.title("Diagramme de Bland-Altman : Clinicien A vs Clinicien C", fontsize=14, fontweight='bold')
plt.xlabel("Moyenne des deux évaluations [(A + C) / 2]", fontsize=12)
plt.ylabel("Différence entre évaluations [A - C]", fontsize=12)
plt.legend(loc='upper right', frameon=True)
plt.grid(True, linestyle='--', alpha=0.5)
plt.tight_layout()
plt.show()

Ce diagramme permet de détecter en un coup d’œil d’éventuels phénomènes d’hétéroscédasticité dans l’erreur de mesure. Si le nuage de points s’évase progressivement le long de l’axe horizontal, formant une silhouette en entonnoir, cela indique que l’accord entre les cliniciens se dégrade à mesure que la sévérité clinique des patients augmente. Une telle observation constitue une information clinique majeure qu’un calcul de CCI global masque complètement.

11.3 Cartes thermiques de concordance et tracés de profils

Lorsque le protocole de recherche mobilise plus de deux observateurs, la visualisation synthétique de la concordance globale requiert des représentations multivariées. Deux approches complémentaires sont couramment employées dans les publications de référence : la carte thermique (heatmap) des intercorrélations et le tracé de profils individuels (spaghetti plot).

La carte thermique visualise instantanément les corrélations croisées entre tous les binômes d’évaluateurs au sein du panel. Elle permet de repérer immédiatement un juge qui se démarquerait de l’ensemble du groupe par des corrélations anormalement basses :

import seaborn as sns
import matplotlib.pyplot as plt

# Matrice de corrélation croisée entre tous les évaluateurs
df_juges_matrice = df_psychometrie.pivot(index='Target', columns='Rater', values='Rating')
matrice_corr = df_juges_matrice.corr(method='pearson')

plt.figure(figsize=(8, 6))
sns.heatmap(
    matrice_corr,
    annot=True,
    fmt=".3f",
    cmap='Blues',
    vmin=0.0,
    vmax=1.0,
    cbar_kws={'label': 'Corrélation bivariée'}
)
plt.title("Matrice d'Intercorrélation entre Cliniciens", fontsize=13, fontweight='bold')
plt.tight_layout()
plt.show()

En complément, le tracé de profils individuels (spaghetti plot) représente l’ensemble des cotations sous forme de lignes brisées reliant les juges successifs pour chaque patient. Cette visualisation permet de vérifier d’un coup d’œil le parallélisme des cotations et de repérer les éventuels effets de croisement interactif :

plt.figure(figsize=(12, 7))

# Tracé d'une ligne pour chaque sujet évalué
sns.lineplot(
    data=df_psychometrie,
    x='Rater',
    y='Rating',
    hue='Target',
    legend=False,
    palette='tab20',
    alpha=0.7,
    linewidth=1.5
)

# Ajout de la trajectoire moyenne de cotation
moyennes_juges = df_psychometrie.groupby('Rater')['Rating'].mean()
plt.plot(moyennes_juges.index, moyennes_juges.values, color='black', linewidth=4, marker='o', label='Moyenne Générale')

plt.title("Profils de Cotation Individuelle des Patients à Travers les Cliniciens", fontsize=14, fontweight='bold')
plt.xlabel("Évaluateurs", fontsize=12, fontweight='bold')
plt.ylabel("Score Attribué", fontsize=12, fontweight='bold')
plt.legend(loc='lower right', frameon=True)
plt.grid(True, linestyle=':', alpha=0.6)
plt.tight_layout()
plt.show()

12. Rédaction et rapport des résultats selon les normes APA

12.1 Standard de formulation académique des résultats du CCI

La rédaction de la section des résultats d’un article scientifique doit se conformer scrupuleusement aux exigences éditoriales édictées par le manuel de publication de l’American Psychological Association (APA, 7e édition). Trop souvent, les manuscrits soumis se contentent d’énoncer un chiffre brut de CCI sans préciser le modèle mathématique sous-jacent ni expliciter la nature de l’accord mesuré, ce qui rend les résultats scientifiquement impossibles à reproduire.

Pour être conforme aux standards académiques, toute mention d’un coefficient de corrélation intraclasse doit impérativement préciser :

  • Le modèle formel retenu selon la typologie de Shrout et Fleiss (modèle 1, 2 ou 3).
  • Le type de mesure modélisé : mesure unique (single measurement) ou moyenne de plusieurs mesures (average measurements).
  • L’objectif de l’analyse : accord absolu (absolute agreement) ou cohérence relative (consistency).
  • L’estimation ponctuelle arrondie à deux ou trois décimales.
  • L’intervalle de confiance à 95 % explicitant ses bornes inférieure et supérieure exactes : IC 95 % [Inf, Sup].
  • La statistique inférentielle de test F accompagnée de ses degrés de liberté complets : F(df1, df2).
  • La probabilité critique exacte (valeur de p), rapportée avec précision sans écrire « p = 0.000 ».

Voici deux exemples canoniques de rédaction académique rigoureuse répondant point par point aux normes APA :

Exemple pour une mesure clinique unique : « La fidélité inter-juges a été quantifiée à l’aide d’un coefficient de corrélation intraclasse à deux facteurs à effets aléatoires évaluant l’accord absolu pour une mesure individuelle, CCI(2,1). L’estimation ponctuelle indique une bonne fidélité globale, CCI = .814, avec un intervalle de confiance à 95 % s’étendant de .692 à .898, F(29, 87) = 18.42, p < .001. La borne inférieure confirmant un niveau de concordance au moins modéré, l’outil peut être validé pour une administration par un praticien unique. »

Exemple pour une moyenne d’évaluations : « Pour tester la fidélité de la moyenne composite issue du panel des quatre évaluateurs fixes, un modèle à effets mixtes à deux facteurs portant sur la cohérence moyenne, CCI(3,k), a été calculé. L’indice obtenu met en évidence une excellente cohérence, CCI = .945, IC 95 % [.901, .971], F(29, 87) = 18.25, p < .001, justifiant l’agrégation des cotations sous forme d’un score moyen d’équipe. »

12.2 Tableaux récapitulatifs pour publications en psychologie

Lorsqu’un inventaire psychologique comporte plusieurs dimensions cliniques ou sous-échelles factorielles, il est préférable de regrouper les indices de fidélité au sein d’un tableau récapitulatif structuré selon les canons visuels de l’APA (lignes horizontales épurées en haut, sous les en-têtes et en bas, sans aucun quadrillage vertical).

La bibliothèque Pandas facilite la mise en forme de ces tableaux synthétiques et permet d’exporter directement les résultats vers des formats intégrables dans Microsoft Word ou LaTeX :

# Création d'un tableau synthétique pour plusieurs dimensions psychométriques
table_synthese_apa = pd.DataFrame({
    'Sous-Échelle': ['Symptômes Somatiques', 'Affect Dépressif', 'Anxiété Cognitive', 'Comportements d'Évitement'],
    'Modèle': ['CCI(2,1)', 'CCI(2,1)', 'CCI(2,1)', 'CCI(2,1)'],
    'Type d'Accord': ['Absolu', 'Absolu', 'Absolu', 'Absolu'],
    'CCI': [0.782, 0.845, 0.710, 0.895],
    'IC 95%': ['[.642, .885]', '[.730, .921]', '[.551, .832]', '[.812, .948]'],
    'F': [15.34, 22.80, 10.82, 35.12],
    'ddl1': [29, 29, 29, 29],
    'ddl2': [87, 87, 87, 87],
    'p': ['< .001', '< .001', '< .001', '< .001'],
    'Qualification': ['Bonne', 'Bonne', 'Modérée', 'Bonne']
})

# Exportation directe du tableau au format LaTeX standard APA
code_latex_apa = table_synthese_apa.to_latex(
    index=False,
    caption="Fidélité inter-juges des sous-échelles de l'Inventaire d'Évaluation Clinique (N = 30)",
    label="tab:icc_apa",
    column_format='lcccccccc'
)

print(code_latex_apa)

En veillant à restituer des résultats méthodologiquement transparents, rigoureusement documentés et directement reproductibles grâce à Python, les psychométriciens et les chercheurs en sciences humaines contribuent concrètement à élever les standards de robustesse et de reproductibilité de la psychologie scientifique contemporaine.

Références

  • Altman, D. G., & Bland, J. M. (1983). Measurement in medicine: The analysis of method comparison studies. The Statistician, 32(3), 307–317. https://doi.org/10.2307/2987937
  • American Psychological Association. (2020). Publication manual of the American Psychological Association (7th ed.). American Psychological Association. https://doi.org/10.1037/0000165-000
  • Bland, J. M., & Altman, D. G. (1986). Statistical methods for assessing agreement between two methods of clinical measurement. The Lancet, 327(8476), 307–310. https://doi.org/10.1016/S0140-6736(86)90837-8
  • Fisher, R. A. (1925). Statistical methods for research workers. Oliver and Boyd.
  • Fleiss, J. L., Levin, B., & Paik, M. C. (2003). Statistical methods for rates and proportions (3rd ed.). John Wiley & Sons. https://doi.org/10.1002/0471445428
  • Koo, T. K., & Li, M. Y. (2016). A guideline of selecting and reporting intraclass correlation coefficients for reliability research. Journal of Chiropractic Medicine, 15(2), 155–163. https://doi.org/10.1016/j.jcm.2016.02.012
  • Lord, F. M., & Novick, M. R. (1968). Statistical theories of mental test scores. Addison-Wesley.
  • McGraw, K. O., & Wong, S. P. (1996). Forming inferences about some intraclass correlation coefficients. Psychological Methods, 1(1), 30–46. https://doi.org/10.1037/1082-989X.1.1.30
  • McKinney, W. (2010). Data structures for statistical computing in Python. Proceedings of the 9th Python in Science Conference, 445, 51–56. https://doi.org/10.25080/Majora-92bf1924-008
  • Perinetti, G. (2018). StaTips part IV: Selection, calculation and interpretation of the intraclass correlation coefficient for agreement-reliability studies. South European Journal of Orthodontics and Dentofacial Research, 5(1), 3–5. https://doi.org/10.5937/sejodr5-17724
  • Seabold, S., & Perktold, J. (2010). Statsmodels: Econometric and statistical modeling with Python. Proceedings of the 9th Python in Science Conference, 57, 61. https://doi.org/10.25080/Majora-92bf1924-011
  • Shrout, P. E., & Fleiss, J. L. (1979). Intraclass correlations: Uses in assessing rater reliability. Psychological Bulletin, 86(2), 420–428. https://doi.org/10.1037/0033-2909.86.2.420
  • Vallat, R. (2018). Pingouin: Statistics in Python. Journal of Open Source Software, 3(31), 1026. https://doi.org/10.21105/joss.01026
  • Wickham, H. (2014). Tidy data. Journal of Statistical Software, 59(10), 1–23. https://doi.org/10.18637/jss.v059.i10
★

Rate This Content

5.0 / 5 • 1 vote

Citer cet article

Looti, M. (2026, septembre 16). Comment calculer le coefficient de corrélation intraclasse en Python. Base de données de psychologie en français. https://fr.arabpsychology.com/statistics/comment-calculer-coefficient-correlation-intraclasse-python/
Looti, Mohammed. “Comment calculer le coefficient de corrélation intraclasse en Python.” Base de données de psychologie en français, 16 septembre 2026, https://fr.arabpsychology.com/statistics/comment-calculer-coefficient-correlation-intraclasse-python/.
Looti, Mohammed. “Comment calculer le coefficient de corrélation intraclasse en Python.” Base de données de psychologie en français. septembre 16, 2026. https://fr.arabpsychology.com/statistics/comment-calculer-coefficient-correlation-intraclasse-python/.