Dans un processus statistique, la qualité ne se joue pas seulement en amont (échantillonnage, questionnaire, collecte) ou en aval (analyse, diffusion). Entre la collecte et l’analyse se situe une phase clé : le contrôle et le suivi du matériau collecté, pour repérer rapidement les anomalies, documenter les écarts et, si nécessaire, déclencher une action corrective durant le travail de terrain.
{vizsurvey} répond à ce besoin : une interface interactive pour parcourir vos données, comparer des profils de réponse et prioriser les investigations. L’objectif n’est pas de tirer des conclusions statistiques, mais de guider l’œil de l’analyste avec des indicateurs simples (distances, rangs) et des visualisations adaptées.
Le rôle de l’enquêteur·rice est central : compréhension fine du questionnaire, respect du routage, conduite de l’entretien. Des effets enquêteur·rice peuvent néanmoins apparaître (des différences systématiques de distribution des réponses selon la personne qui conduit l’entretien), issus de méthodes de travail différentes, de biais involontaires, d’erreurs récurrentes ou, plus rarement, de fraude.
Sur ce volet, {vizsurvey} permet de :
D’une vague à l’autre, les questionnaires évoluent (libellés, routing, filtres), mais les variables cibles doivent rester comparables. {vizsurvey} permet de définir une variable de vague (par exemple l’année de l’enquête) et met en évidence :
Depuis la version 0.4, la vague peut être définie sur deux niveaux (par exemple l’année et le trimestre) : le premier niveau est obligatoire pour obtenir l’analyse, le second facultatif.
Il existe deux manières principales de lancer {vizsurvey} : depuis
une base présente en R (runVizsurvey_from_r), ou en
préparant une arborescence de fichiers pour analyser plusieurs enquêtes
à la fois (runVizsurvey_from_folder).
Pour lancer l’interface depuis un objet R, il suffit d’appeler
runVizsurvey_from_r avec le nom de l’objet.
À ce stade, l’interface est presque vide : vous n’avez fourni aucun paramètre, comme une variable identifiant les enquêteur·rices, une variable de vague, ou une variable de filtre. Voici la commande complète :
Ici, var_intvwr identifie les enquêteur·rices,
var_wave identifie les vagues, et var_filter
est une variable facultative servant à filtrer
l’analyse (par exemple la région). Quand un filtre est fourni, les
analyses sont produites à la fois au niveau global et au sein de chaque
modalité du filtre.
var_wave et var_filter acceptent chacun
deux variables : la seconde est alors un second niveau,
emboîté dans le premier.
# Not Run
runVizsurvey_from_r(df,
var_intvwr = "NR_ITW",
var_wave = c("YEAR", "QUARTER"),
var_filter = "REGIO")À noter : les noms de variables sont traités sans tenir compte de la casse (tout est converti en majuscules en interne).
{vizsurvey} peut gérer plusieurs dossiers contenant différentes
enquêtes. Dans ce type d’organisation, l’hypothèse est que plusieurs
personnes utilisent {vizsurvey} à des moments différents. Comme le
calcul des statistiques à chaque ouverture serait trop lent, on prépare
les fichiers à l’avance avec prepa_survey() : l’ouverture
de l’interface est alors immédiate.
Chaque enquête (donc chaque dossier de données) doit contenir un
fichier de configuration config.txt et un fichier
global.rds généré par la préparation. La vignette
de préparation des données détaille tout cela. Voici par exemple la
commande pour une structure à deux niveaux de dossiers :
Cette fonction accepte aussi trois fichiers, décrits dans la vignette
de présentation des meta-données : un dictionnaire
des variables (path_dict), une
nomenclature de libellés (path_nomen), et
un fichier d’archive partagé
(path_archive).
Le package {laeken} fournit un extrait de l’enquête SILC. La fonction
create_eusilc_sim() en dérive un jeu d’exemple prêt à
l’emploi : elle crée un numéro d’enquêteur·rice fictif
(nr_itw, à partir de la province), une vague fictive
(db010, entre 2018 et 2020), et y injecte des
erreurs volontaires que l’interface doit permettre de retrouver
:
pl030
est remplacée par des valeurs manquantes ;pb220a est manquante, la modalité 4 de hsize
disparaît, et le revenu équivalent est divisé par 100.library(vizsurvey)
df <- create_eusilc_sim()
runVizsurvey_from_r(df,
var_intvwr = "nr_itw",
var_wave = "db010",
var_filter = "db040")C’est ce jeu de données qui illustre toute la suite de cette vignette.
La barre latérale, à gauche, commande tout le reste de l’application. On y trouve :
from_folder) ;All par défaut). Le filtre
fonctionne de la même façon, avec All pour ne pas filtrer
;Rien n’est signalé en dessous de ces seuils. Quatre paramètres sont réglables :
| Seuil | Défaut | Rôle |
|---|---|---|
| Nombre minimum de lignes | 30 | en dessous, l’enquêteur·rice ou la variable est exclue de la détection |
| Nombre minimum de valeurs valides | 30 | en dessous, la variable est exclue de l’analyse |
| Taux de variation minimum (vagues) | 0.5 | variation relative à partir de laquelle une case devient rouge dans l’onglet Vague |
| Distance de chi² | 5 | écart standardisé à partir duquel un croisement enquêteur·rice × variable est signalé |
Il n’existe pas de seuil statistiquement fondé pour ce type d’analyse : c’est à l’équipe de le régler par tâtonnement. Baissez-le pour voir plus de cas, montez-le pour ne garder que les plus francs.
Deux dispositifs d’aide sont intégrés :
L’interface est disponible en français, anglais et néerlandais (sélecteur en haut à droite). L’aide et la visite guidée suivent la langue choisie.
C’est l’onglet d’accueil. Il répond à deux questions : qu’est-ce qui est chargé ? et par où commencer ?
La partie haute présente l’enquête : quatre compteurs (entretiens, variables analysées, enquêteur·rices, vagues), une présentation simple des données (nom, chemin, date de la dernière préparation, rôle des variables, présence des timers) et le nombre d’entretiens par vague — découpé par le second niveau de vague quand il existe.
La partie basse, « Par où commencer », donne trois points d’entrée chiffrés pour la vague et le filtre courants : le nombre d’enquêteur·rices présentant au moins un écart, le nombre de variables ayant varié entre les vagues, et le nombre de croisements enquêteur·rice × variable au-dessus des seuils. Chaque carte liste les cinq cas les plus marquants et un bouton ouvre l’onglet correspondant.
Sur les données d’exemple, la carte Enquêteur signale d’emblée Vienna-2.
Le tableau principal affiche une ligne par enquêteur·rice, pour la vague et le filtre courants, classée par un rang d’anomalie :
RANK provient d’un score d’Isolation Forest calculé sur
l’ensemble des indicateurs : plus la combinaison d’indicateurs est rare,
plus le rang est élevé (consultez la vignette
de présentation des méthodes de calcul pour plus d’informations sur
l’Isolation Forest);NB_INTV est le nombre d’entretiens,
INDEX_H un indice d’homogénéité des réponses,
MAX_CHI2 le plus grand écart observé sur une variable
;DURATION_*) et les parts d’entretiens signalés
(PC_* : nuit, trop courts, trop rapprochés).Une case rouge dépasse de plus de deux écarts-types la moyenne de sa colonne. La carte Indicateurs, au-dessus, permet d’écarter un indicateur du tableau et du score. Ceci est utile quand un indicateur n’a pas de sens pour votre enquête.
Si une nomenclature a été fournie (path_nomen), les
libellés des variables s’affichent sous les noms de colonnes.
Principe directeur : aucun test statistique n’est réalisé. {vizsurvey} calcule des distances, des scores et des rangs destinés à prioriser la relecture. Les conclusions restent de la responsabilité de l’équipe.
En cliquant sur un·e enquêteur·rice, les onglets du dessous se
remplissent. « Détail par variable » liste ses variables classées par
écart aux autres enquêteur·rices : chi2 mesure la distance
entre sa distribution et la distribution de référence,
standard est cette distance normalisée par variable — c’est
elle qui est comparée au seuil.
Point important : les variables continues sont découpées en cinq classes (par quantiles) avant la comparaison. Toutes les variables se lisent donc de la même façon, avec une seule distance de chi².
Un clic sur une variable affiche :
Sur les données d’exemple, le revenu de Vienna-2 (multiplié par 100) se remarque rapidement : sa densité est décalée d’un ordre de grandeur.
Quand des timers sont disponibles, cet onglet reconstitue les
entretiens de l’enquêteur·rice : durée totale, écart avec l’entretien
précédent, drapeaux 🔴 (entretien trop court, travail de nuit, plusieurs
sessions, entretiens qui se chevauchent). Un clic sur un entretien ouvre
ses sessions, puis le détail item par item. Les seuils de ces drapeaux
sont fixés à la préparation, dans config.txt.
Le dernier onglet situe l’enquêteur·rice : la répartition
géographique de ses entretiens (selon la variable
var_info_geo du config.txt) et son nombre
d’entretiens par vague et par filtre, sur tout l’historique. Un·e
enquêteur·rice couvrant une zone inhabituelle peut expliquer des écarts
observés ailleurs : les répondants ne sont tout simplement pas les
mêmes.
L’onglet compare la vague sélectionnée dans la barre latérale aux vagues cochées dans « Comparer avec ». Les vagues de comparaison sont proposées au même niveau que la sélection : des années si vous avez choisi une année, des trimestres si vous avez choisi un trimestre.
Trois cartes structurent la lecture :
Sur les données d’exemple, en sélectionnant la vague 2020 :
pb220a apparaît dans les absences, hsize dans
les catégorielles (hausse de valeurs manquantes), et
eqIncome dans les numériques (médiane divisée par 100 — un
changement d’échelle typique).
Un clic sur une ligne remplit la carte de détail à droite :
.NA. Une rupture dans les bandes de couleur confirme ce que
le tableau a signalé ;C’est l’onglet le plus dense : il croise les enquêteur·rices et les variables. Quatre sous-onglets :
En bas de page, les cartes de comparaison des distributions et de distribution des modalités fonctionnent comme dans l’onglet Enquêteur, dès qu’un clic sur une association enquêteur·rice × variable a été effectué. Si un dictionnaire a été fourni, une carte affiche en plus les entrées du dictionnaire pour la variable sélectionnée — pratique pour vérifier la formulation exacte d’une question avant de conclure.
La lecture de la heatmap est la plus complexe. Voici quelques conseils de lecture :
Pour départager un effet enquêteur·rice d’un effet de sous-population, utilisez le filtre de la barre latérale : si les cases rouges disparaissent une fois l’analyse restreinte à la zone de l’enquêteur·rice, l’explication est structurelle, pas individuelle.
path_dict). Il
affiche le fichier tel quel, avec recherche et filtres ;La vignette de métadonnées détaille comment intégrer ces éléments dans votre outil.
L’analyse de cohérence par enquêteur·rice ou par vague est une étape essentielle du contrôle qualité d’une enquête, mais elle n’a pas vocation à produire des jugements automatiques. {vizsurvey} n’infère rien : il organise l’exploration et met en évidence les régularités, écarts ou incohérences susceptibles d’attirer l’attention de l’équipe de coordination. L’interprétation des résultats doit toujours s’appuyer sur le contexte opérationnel : consignes données aux enquêteur·rices, conditions de collecte, etc. Ces éléments seuls permettent de distinguer une véritable anomalie d’un simple effet de structure.
Par ailleurs, les informations mobilisées concernent parfois des données sensibles, sur les enquêteur·rices comme sur les ménages enquêtés ; elles doivent donc être traitées dans le strict respect des règles applicables en matière de confidentialité et de protection des données personnelles. De notre point de vue, toute personne utilisant {vizsurvey} doit être soumise aux mêmes règles de confidentialité que celles qui s’appliquent aux fichiers sources. L’anonymisation n’est en effet nullement garantie dans l’interface : les croisements, filtres ou visualisations proposés peuvent indirectement révéler des informations individuelles ou des identifiants d’enquêteur·rices. L’accès à {vizsurvey} doit donc être restreint aux personnes habilitées à consulter les données détaillées, dans un cadre sécurisé conforme aux politiques internes de gestion des données.
En résumé, {vizsurvey} est un outil d’appui à l’analyse qui complète ceux utilisés par les équipes d’enquête, pas un outil de diagnostic automatique. Il rend visibles les comportements de collecte et outille les équipes, mais les conclusions finales reposent toujours sur leur jugement éclairé.