Table des paires discordantes sous R

Obtenez rapidement une table de contingence des paires discordantes pour vos tests statistiques

Certains tests statistiques appliqués aux séries appariées, comme le test de McNemar, travaillent sur les couples de modalités discordantes. Nous allons voir ici comment réaliser rapidement une telle table de contingence depuis une liste, sans avoir à saisir soi-même la table manuellement.

Données de travail

Pour illustrer nos propos, nous allons travailler avec, pour jeu de données, un échantillon listant les 186 salariés d'une entreprise. Ces derniers ont répondu, lors de deux sondages successifs, espacés de 6 mois, à une question : êtes-vous fumeurs ? Ces deux sondages ont eu lieu avant et après une campagne de sensibilisation anti-tabac au sein de l'entreprise. L'idée est donc de vérifier si la campagne a eu un effet sur les habitudes des salariés.
Ci-dessous le chargement ainsi qu'un extrait des données :

Chargeons nos données dans un dataframe "df_sondage" :


df_sondage <- 
  read.table("salaries_par_division.csv",
   header=TRUE, stringsAsFactors=TRUE, sep=";", na.strings="NA", dec=".", 
  strip.white=TRUE)
head(df_sondage)
  individu sexe     division prem_sondage sec_sondage
1        1    F      acceuil   non-fumeur  non-fumeur
2        2    H       ventes   non-fumeur  non-fumeur
3        3    H informatique       fumeur      fumeur
4        4    F informatique   non-fumeur  non-fumeur
5        5    H informatique   non-fumeur  non-fumeur
6        6    H informatique       fumeur  non-fumeur

Un certain nombre de variables sont présentes dans le dataset mais seules les deux dernières nous intéressent.
Pour information, lors du premier sondage 62 salariés se sont déclarés fumeurs contre 124 non-fumeurs. Lors du second sondage, 45 se sont déclarés fumeurs, contre 141 non-fumeurs.

Table de contingence des paires discordantes

Le test de McNemar qui nous intéresse dans ce cas prend en entrée une table de contingence à deux dimensions dressant les discordances entre les résultats du premier sondage et ceux du second. Nous pouvons constituer cette table simplement depuis notre dataframe en spécifiant explicitement les niveaux de notre table :


# Extraction des variables
avant <- df_sondage$prem_sondage
apres <- df_sondage$sec_sondage

# Specification des 2 niveaux attendus
avant <- factor(avant, levels = c("fumeur", "non-fumeur"))
apres <- factor(apres, levels = c("fumeur", "non-fumeur"))

# Constitution de la table de contingence
discord <- table(avant, apres)
discord

Voici le résultat :

apres
avant        fumeur non-fumeur
  fumeur         42         20
  non-fumeur      3        121

Nous voyons ci-dessus que 42 salariés qui s'étaient déclarés fumeurs au premier sondage le sont toujours au second, 20 salariés sont devenus non-fumeurs, 3 salariés non-fumeurs au premier sondage sont devenus fumeurs au second, et enfin 121 salariés étaient non-fumeurs et le sont restés.


Retrouvez dans la rubrique "Nos datasets" toutes les données dont vous aurez besoin pour tester et pratiquer !