Skip to content

Questions sensibles : expériences de liste et réponse randomisée

Interrogez sur la tricherie, la fraude fiscale ou la conduite en état d'ivresse par une expérience de liste ou une réponse randomisée dans Potato, et obtenez des estimations de prévalence avec leurs erreurs types.

Nouveau dans la v2.12.0

Demander directement aux gens s'ils ont triché, fraudé le fisc ou conduit en état d'ivresse sous-estime la fréquence de ces comportements. Deux plans de questionnaire permettent à un participant de répondre sans révéler sa propre réponse, tout en permettant à l'étude d'estimer la prévalence :

annotation_typePlan
list_experimentLa technique du dénombrement d'items : « Combien de ces affirmations vous concernent ? », avec l'énoncé sensible dans la liste du seul groupe de traitement
randomized_responseUne règle aléatoire privée décide si le participant répond sincèrement (forced_response), ou bien le participant indique seulement si deux énoncés concordent (crosswise). Voir réponse randomisée

Les deux fonctionnent sur les pages de questionnaire et sur les items d'annotation, et l'export survey_experiments calcule les estimations.

Expérience de liste

yaml
conditions:
  factors:
    list_group: [control, treatment]
 
annotation_schemes:          # or on a survey page
  - annotation_type: list_experiment
    name: lists
    description: How many of these have you done in the last year?
    items:
      - Gone to a live music concert
      - Bought a book in a shop
      - Volunteered for a local group
    sensitive_item: Driven a car after drinking alcohol
    treatment: {factor: list_group, level: treatment}

Les participants du niveau treatment de list_group voient quatre énoncés, et tous les autres en voient trois. Le serveur retire l'énoncé sensible de la page pour le groupe de contrôle ; il ne figure donc pas dans leur HTML. Le participant répond par un nombre. La condition provient de conditions ; l'affectation est donc équilibrée entre les deux groupes (Déroulement de l'expérience).

L'estimation est le dénombrement moyen du groupe de traitement moins celui du groupe de contrôle (l'estimateur par différence de moyennes), avec une erreur type de Welch et un intervalle à 95 %. Elle suppose que l'énoncé sensible ne change pas la façon dont les gens répondent aux autres énoncés, et que personne ne ment sur le dénombrement.

CléValeur par défautSignification
itemsobligatoireLes énoncés de contrôle, au moins deux
sensitive_itemobligatoireL'énoncé que seul le groupe de traitement voit
treatmentobligatoire{factor, level} : qui le voit. Le facteur doit figurer dans conditions.factors
sensitive_positionen dernierSa place dans la liste, à partir de 0
count_prompt« Number of statements: »Le libellé du champ numérique

Choisissez des énoncés de contrôle auxquels peu de gens répondraient oui à tous ou non à tous. Si le dénombrement de la liste de contrôle atteint son maximum, un oui à l'énoncé sensible devient visible à partir du dénombrement.

Réponse randomisée : réponse forcée

yaml
  - annotation_type: randomized_response
    name: tax
    method: forced_response
    description: This question uses a private random rule.
    question: In the last five years, have you left income off a tax return on purpose?

La page demande au participant de penser au mois de naissance de sa mère : pour janvier ou février, répondre Yes ; pour mars ou avril, répondre No ; pour tout autre mois, répondre sincèrement à la question. Les mois de naissance sont proches d'une distribution uniforme ; la réponse est donc sincère avec une probabilité de 2/3, un Yes forcé avec 1/6 et un No forcé avec 1/6. Pour utiliser une autre règle, indiquez randomizer (le texte que lit le participant) ainsi que p_truth, p_yes et p_no, dont la somme doit valoir 1.

Avec λ la proportion de réponses Yes, la prévalence est π = (λ - p_yes) / p_truth, avec SE = √(λ(1 - λ)/n) / p_truth.

Réponse randomisée : modèle croisé

yaml
  - annotation_type: randomized_response
    name: cheating
    method: crosswise
    description: Read both statements. Do not say which is true.
    question: I have copied someone else's work and handed it in as my own.
    nonsensitive_statement: My mother was born in January, February or March.
    nonsensitive_prevalence: 0.25

Le participant répond seulement « Both statements are true, or neither is » ou « Exactly one statement is true » (Yu, Tian & Tang, 2008). Avec λ la proportion donnant la première réponse et p la prévalence de l'énoncé non sensible, π = (λ + p - 1) / (2p - 1), avec SE = √(λ(1 - λ)/n) / |2p - 1|. Le plan exige que p soit éloigné de 0,5, et les valeurs à moins de 0,05 de celui-ci sont refusées.

Export

bash
python -m potato.export --config config.yaml --format survey_experiments --output ./export/

L'export écrit survey_experiments.csv, une ligne par schéma, avec le plan, l'estimation, son erreur type et son intervalle à 95 %, ainsi que les effectifs sur lesquels elle repose. Pour une expérience de liste, la ligne donne aussi la taille et la moyenne des groupes, et excluded : le nombre de réponses qui n'étaient pas un nombre entier compris entre 0 et le nombre d'énoncés vus par le participant, réponses non numériques comprises. Le champ numérique de la page accepte une unité de plus que ce que voit un participant du groupe de contrôle, et les réponses sont stockées telles qu'envoyées ; c'est donc l'export qui effectue cette vérification.

Les estimations ne sont pas tronquées à l'intervalle de 0 à 1. Une valeur hors de cet intervalle signifie que l'échantillon est trop petit ou qu'une hypothèse n'est pas vérifiée.

Potato 2.12.0 a aussi cessé d'écrire les réponses des participants dans les journaux DEBUG ; un plan conçu pour qu'aucune réponse individuelle ne figure dans les enregistrements ne la laisse donc pas fuiter par le journal du serveur.

Pour aller plus loin

Pour les détails d'implémentation, consultez la documentation source.