Skip to content

Sensible Fragen: Listenexperimente und Randomized Response

Mit einem Listenexperiment oder Randomized Response in Potato nach Schummeln, Steuerhinterziehung oder Trunkenheit am Steuer fragen und Prävalenzschätzungen mit Standardfehlern erhalten.

Neu in v2.12.0

Fragt man Menschen direkt, ob sie geschummelt, Steuern hinterzogen oder betrunken Auto gefahren sind, wird unterschätzt, wie verbreitet das ist. Zwei Umfragedesigns lassen eine teilnehmende Person antworten, ohne ihre eigene Antwort preiszugeben, und erlauben der Studie trotzdem, die Prävalenz zu schätzen:

annotation_typeDesign
list_experimentDie Item-Count-Technik: "Wie viele davon treffen auf Sie zu?", mit der sensiblen Aussage nur in der Liste der Treatment-Gruppe
randomized_responseEine private Zufallsregel entscheidet, ob die teilnehmende Person wahrheitsgemäß antwortet (forced_response), oder die Person gibt nur an, ob zwei Aussagen übereinstimmen (crosswise). Siehe Randomized Response

Beide funktionieren auf Umfrageseiten und bei Annotationsitems, und der Export survey_experiments berechnet die Schätzungen.

Listenexperiment

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}

Teilnehmende in der Stufe treatment von list_group sehen vier Aussagen, alle anderen sehen drei. Der Server entfernt die sensible Aussage für die Kontrollgruppe aus der Seite, sodass sie nicht in deren HTML steht. Die teilnehmende Person antwortet mit einer Zahl. Die Bedingung stammt aus conditions, daher ist die Zuweisung über die beiden Gruppen ausgewogen (Experimentablauf).

Die Schätzung ist die mittlere Anzahl der Treatment-Gruppe minus der der Kontrollgruppe (der Differenz-der-Mittelwerte-Schätzer), mit einem Welch-Standardfehler und einem 95-%-Intervall. Sie setzt voraus, dass die sensible Aussage nicht verändert, wie Personen die anderen Aussagen beantworten, und dass niemand bei der Anzahl lügt.

SchlüsselStandardwertBedeutung
itemserforderlichDie Kontrollaussagen, mindestens zwei
sensitive_itemerforderlichDie Aussage, die nur die Treatment-Gruppe sieht
treatmenterforderlich{factor, level}: wer sie sieht. Der Faktor muss in conditions.factors stehen
sensitive_positionzuletztAn welche Stelle der Liste sie kommt, ab 0
count_prompt"Number of statements:"Die Beschriftung des Zahlenfelds

Wählen Sie Kontrollaussagen, die kaum jemand alle mit Ja oder alle mit Nein beantworten würde. Erreicht die Anzahl bei der Kontrollliste ihr Maximum, wird ein Ja zur sensiblen Aussage an der Anzahl sichtbar.

Randomized Response: Forced Response

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?

Die Seite fordert die teilnehmende Person auf, an den Monat zu denken, in dem ihre Mutter geboren wurde: bei Januar oder Februar mit Ja antworten, bei März oder April mit Nein, bei jedem anderen Monat die Frage wahrheitsgemäß beantworten. Geburtsmonate sind annähernd gleichverteilt, daher ist die Antwort mit Wahrscheinlichkeit 2/3 wahrheitsgemäß, mit 1/6 ein erzwungenes Ja und mit 1/6 ein erzwungenes Nein. Für eine andere Regel geben Sie randomizer an (den Text, den die Person liest) sowie p_truth, p_yes und p_no, deren Summe 1 sein muss.

Mit λ als Anteil der Ja-Antworten ist die Prävalenz π = (λ - p_yes) / p_truth, mit SE = √(λ(1 - λ)/n) / p_truth.

Randomized Response: Crosswise

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

Die teilnehmende Person antwortet nur mit "Both statements are true, or neither is" oder "Exactly one statement is true" (Yu, Tian & Tang, 2008). Mit λ als Anteil der ersten Antwort und p als Prävalenz der nicht sensiblen Aussage gilt π = (λ + p - 1) / (2p - 1), mit SE = √(λ(1 - λ)/n) / |2p - 1|. Das Design verlangt, dass p nicht nahe bei 0.5 liegt, und Werte, die weniger als 0.05 davon entfernt sind, werden abgelehnt.

Export

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

Der Export schreibt survey_experiments.csv, eine Zeile pro Schema, mit dem Design, der Schätzung, ihrem Standardfehler und 95-%-Intervall sowie den zugrunde liegenden Zählwerten. Bei einem Listenexperiment enthält die Zeile außerdem die Gruppengrößen und -mittelwerte sowie excluded: wie viele Antworten keine ganze Zahl von 0 bis zur Anzahl der Aussagen waren, die die teilnehmende Person gesehen hat, nicht numerische Antworten eingeschlossen. Das Zahlenfeld auf der Seite akzeptiert einen Wert mehr, als eine Person der Kontrollgruppe sieht, und Antworten werden so gespeichert, wie sie gesendet wurden. Diese Prüfung übernimmt daher der Export.

Schätzungen werden nicht auf den Bereich 0 bis 1 begrenzt. Ein Wert außerhalb davon bedeutet, dass die Stichprobe zu klein ist oder eine Annahme nicht zutrifft.

Potato 2.12.0 schreibt außerdem keine Antworten von Teilnehmenden mehr in DEBUG-Protokolle. Ein Design, das jede einzelne Antwort aus den Aufzeichnungen heraushalten soll, gibt sie daher nicht über das Serverprotokoll preis.

Weiterführende Informationen

Implementierungsdetails finden Sie in der Quelldokumentation.