Exercice en autonomie

TP

Auteur·rice
Affiliation

Frédéric Santos

CNRS, Univ. Bordeaux, MCC – UMR 5199 PACEA

On se propose dans cette section de reprendre toutes les connaissances acquises depuis le début de la formation, et de les réinvestir pour ajouter un peu plus de contenu au package.

Plus précisément, nous avons déjà écrit une fonction ccc() implémentant le calcul du coefficient de concordance de Lin (1989), afin de quantifier le degré d’accord entre les mesures produites par deux juges sur des variables numériques. Nous allons désormais une fonction kappa_cohen() implémentant le calcul du Kappa de Cohen (Cohen 1960, 1968), afin de quantifier le degré d’accord entre les mesures produites par deux juges sur des variables qualitatives.

1 Point théorique sur le Kappa de Cohen

Le Kappa de Cohen permet de quantifier l’accord entre deux juges sur la mesure d’un facteur à \(k\) niveaux. Pour simplifier, on n’implémentera ici qu’une version simplifiée du Kappa de Cohen, ne permettant de mesurer qu’un accord portant sur des variables binaires.

Considérons par exemple le dataframe suivant (généré au hasard), où chaque colonne représente les observations effectuées par un juge sur les 15 individus d’un échantillon :

set.seed(17062024)

## Créer un dataframe avec deux colonnes binaires :
bindat <- data.frame(
    Obs1 = sample(c("Oui", "Non"), size = 15, replace = TRUE),
    Obs2 = sample(c("Oui", "Non"), size = 15, replace = TRUE)
) |>
    dplyr::mutate(across(everything(), as.factor))

## Visualiser les 6 premières lignes :
head(bindat)
  Obs1 Obs2
1  Oui  Non
2  Non  Oui
3  Oui  Oui
4  Oui  Oui
5  Oui  Oui
6  Oui  Oui

La matrice de confusion entre ces deux juges ne montre (assez logiquement !) qu’un accord assez peu satisfaisant entre eux :

## Matrice de confusion entre les deux juges :
table(bindat)
     Obs2
Obs1  Non Oui
  Non   4   1
  Oui   5   5

Le but est décrire une fonction kappa.cohen() calculant un degré d’accord entre les deux juges dans une telle situation. Notons sous forme générale la matrice de confusion entre les deux juges pour une variable binaire :

Obs 1 / Obs 2 Non Oui
Non \(a\) \(b\)
Oui \(c\) \(d\)

La formule du \(\kappa\) est alors la suivante :

\[ \kappa := \frac{p_o - p_e}{1 - p_e} \tag{1}\]

où :

\[ p_o := \frac{a + d}{a + b + c + d} \tag{2}\]

\[ p_e := \frac{1}{(a+b+c+d)^2} \times \left((a+b)(a+c) + (c+d)(b+d)\right) \tag{3}\]

2 Implémenter une fonction pour le calcul du Kappa

Exercice. Ajoutons désormais dans le package {errormes} une fonction implémentant le calcul du Kappa de Cohen. Pour cela :

  1. Commencer par ajouter dans le package le jeu de données bindat ci-dessus. Documenter ce jeu de données et faire les vérifications d’usage.
  2. Écrire une fonction kappa_cohen(scores) pour traduire l’Équation 1. Elle prendra en argument un unique argument scores qui doit être un dataframe à \(n\) lignes et 2 colonnes. On prendra soin d’y ajouter une vérification élémentaire : les 2 colonnes doivent être des facteurs binaires.
  3. Documenter la fonction kappa_cohen() ; se servir du jeu de données bindat pour écrire un exemple.
  4. Écrire un test unitaire pour vérifier le bon fonctionnement de kappa_cohen(). Indice : la valeur du \(\kappa\) pour le jeu de données bindat est censée être égale à \(0.25\).

Bien sûr, tout au long de ce processus, il est conseillé d’effectuer des commits réguliers. À l’issue de ce processus, vous pourrez “checker” une dernière fois le package.

Retour au sommet

Références

Cohen, Jacob. 1960. « A Coefficient of Agreement for Nominal Scales ». Educational and Psychological Measurement 20 (1): 37‑46. https://doi.org/10.1177/001316446002000104.
———. 1968. « Weighted Kappa: Nominal Scale Agreement Provision for Scaled Disagreement or Partial Credit. » Psychological Bulletin 70 (4): 213‑20. https://doi.org/10.1037/h0026256.
Lin, Lawrence. 1989. « A Concordance Correlation Coefficient to Evaluate Reproducibility ». Biometrics 45 (1): 255. https://doi.org/10.2307/2532051.