Skip to content

Commit b08bd6b

Browse files
authored
Merge pull request #3 from tbhat-ops/contrib-tbhat-ops-013
Add study: Decoy effect on survey participation
2 parents a9d63ec + c24c523 commit b08bd6b

17 files changed

Lines changed: 3077 additions & 0 deletions

studies/study_015/README.md

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
# Testing the Decoy Effect to Improve Online Survey Participation: Evidence from a Field Experiment
2+
3+
**Authors:** Sandro T. Stoffel, Yining Sun, Yasemin Hirst, Christian von Wagner, Ivo Vlaev
4+
**Year:** 2023
5+
**Published:** Journal of Behavioral Decision Making
6+
7+
---
8+
9+
## Description
10+
11+
This field experiment tests whether adding an inferior decoy survey option increases completion of a target online questionnaire about fear of coronavirus. The study examines the classical "decoy effect" (or attraction effect) in the context of survey participation, with implications for improving response rates in social science research. A particularly novel aspect is the examination of presentation order effects: does the effect of the decoy depend on whether the target or decoy option appears first in the comparison table?
12+
13+
---
14+
15+
## Experiments Included
16+
17+
This benchmark contains two nested experiments:
18+
19+
1. **Preliminary Questionnaire Study**: Online recruitment and manipulation validation (N=210). Participants indicated preferences for question types (closed-ended vs open-ended) and payment timing (1 week vs 4 weeks).
20+
21+
2. **Main Field Experiment**: Between-subjects field experiment (N=203 with valid emails, randomized to 3 conditions):
22+
- Control condition: Only target survey option offered
23+
- Decoy condition (target first): Both options shown, target survey shown first
24+
- Decoy condition (decoy first): Both options shown, decoy survey shown first
25+
26+
---
27+
28+
## Participants
29+
30+
**Preliminary Study:**
31+
- **N:** 210 who completed the preliminary questionnaire (241 started, 216 completed, 210 provided email addresses)
32+
- **Recruitment:** Students at UK-based university via Facebook, WhatsApp, WeChat (August 2022)
33+
- **Demographics:** Age 20-24: 26.7%, 25-29: 50.9%, 30-35: 22.4%; Male: 52.4%, Female: 47.6%; White: 57.1%, Asian: 23.8%, Black: 17.1%, Other: 1.9%; Christian: 71.9%, Other religion: 19.5%, No religion: 8.6%; Bachelor's: 51.9%, Graduate: 48.1%
34+
35+
**Main Experiment:**
36+
- **N:** 203 with valid emails (210 randomized, 7 bounce; control n=101, decoy n=102 split as target-first n=52, decoy-first n=50)
37+
- **Sample characteristics:** Age 20-24: 27.1%, 25-29: 50.2%, 30-35: 22.7%; Male: 52.2%, Female: 47.8%; White: 57.6%, Asian: 23.7%, Black: 16.7%, Other: 2.0%; Christian: 71.9%, Other religion: 8.9%, No religion: 19.2%; Bachelor's: 51.7%, Graduate: 48.3%
38+
39+
---
40+
41+
## Primary Outcomes
42+
43+
**Target Survey Completion Rate:**
44+
- Control: 33/101 = 32.7%
45+
- Decoy (overall): 57/102 = 55.9%
46+
- Target first: 43/52 = 82.7%
47+
- Decoy first: 14/50 = 28.0%
48+
49+
---
50+
51+
## Key Findings (Human Data)
52+
53+
### F1: Randomization Balance
54+
- Age difference: χ², p = 0.165 (no difference)
55+
- Gender difference: χ², p = 0.441 (no difference)
56+
- **Ethnicity difference: χ², p = 0.004** (imbalance: decoy condition had more White participants)
57+
- Religion difference: χ², p = 0.063 (marginal, no difference at α=0.05)
58+
- Education difference: χ², p = 0.233 (no difference)
59+
60+
### F2: The Decoy Effect on Target Survey Completion
61+
- **Chi-square test:** χ²(1, N=203) = 11.08, p < 0.001
62+
- **Unadjusted OR:** 2.610 (95% CI 1.475-4.618), p < 0.01
63+
- **Adjusted OR** (for age, gender, ethnicity, religion, education): 2.584 (95% CI 1.415-4.718), p < 0.01
64+
- **Conclusion:** The decoy significantly increased target survey completion.
65+
66+
### F3: Strong Order Effect Within Decoy Condition
67+
- **Target-first vs Control (unadjusted):** OR = 9.845 (95% CI 4.293-22.580), p < 0.01
68+
- **Target-first vs Control (adjusted):** aOR = 11.177 (95% CI 4.571-27.330), p < 0.01
69+
- **Decoy-first vs Control (unadjusted):** OR = 0.801 (95% CI 0.381-1.687), p not significant
70+
- **Decoy-first vs Control (adjusted):** aOR = 0.746 (95% CI 0.341-1.631), p not significant
71+
- **Conclusion:** The decoy effect on target completion only occurred when the target was shown first (82.7% vs 32.7%). When the decoy was shown first, completion (28.0%) was no higher than control.
72+
73+
### F4: Perceived Influence of Decoy
74+
- Among 57 target completers in the decoy condition, 33/57 (57.9%) reported that the decoy option at least somewhat influenced their decision to participate.
75+
76+
### F5: Non-Response Bias and Response Behavior
77+
- **FCQ score**: Wilcoxon-Mann-Whitney z = 0.488, p = 0.629. No difference in Fear of Coronavirus questionnaire responses between conditions.
78+
- **Demographic composition of completers:**
79+
- Ethnicity among completers differed (p = 0.006): decoy condition had more White completers.
80+
- Age, gender, religion, education among completers: no significant differences.
81+
- **Completers vs non-completers:**: No significant demographic differences on age, gender, religion, or education (ps > 0.05). Ethnicity comparison borderline: p = 0.661.
82+
83+
---
84+
85+
## Design Features
86+
87+
**Study Type:** Between-subjects field experiment with nested order manipulation
88+
89+
**Independent Variables:**
90+
1. Invitation condition (Control vs Decoy)
91+
2. Presentation order within decoy (Target first vs Decoy first)
92+
93+
**Dependent Variables:**
94+
1. Primary: Completion of target survey (binary)
95+
2. Secondary: Fear of Coronavirus Questionnaire responses (8 Likert items, summed 8-40)
96+
3. Secondary: Demographic characteristics of completers
97+
4. Exploratory: Self-reported influence of decoy on decision
98+
99+
**Control Condition:** Email invitation with only the target survey option (8 closed-ended FCQ items, demographics, debrief; £2 after 1 week)
100+
101+
**Decoy Condition:** Email invitation with a comparison table offering two survey options:
102+
- Target option (closed-ended, £2 after 1 week)
103+
- Decoy option (two open-ended questions requiring 100+ words each, £2 after 4 weeks)
104+
105+
---
106+
107+
## Materials
108+
109+
**source/specification.json**
110+
- Study design, participants, procedure, variables
111+
112+
**source/ground_truth.json**
113+
- All statistical tests, raw data, effect sizes
114+
115+
**source/materials/preliminary_questionnaire.json**
116+
- Preliminary questionnaire items and recruitment logic
117+
118+
**source/materials/main_experiment_control.json**
119+
- Control condition invitation email and questionnaire (demographics, FCQ, debrief)
120+
121+
**source/materials/main_experiment_decoy_target_first.json**
122+
- Decoy condition (target-first order): comparison table, target questionnaire, decoy questionnaire
123+
124+
**source/materials/main_experiment_decoy_decoy_first.json**
125+
- Decoy condition (decoy-first order): comparison table, decoy questionnaire, target questionnaire
126+
127+
---
128+
129+
## Replication Notes
130+
131+
**For LLM Agents:**
132+
133+
1. **Preliminary study:** Present questionnaire items, collect preference and willingness responses; use recorded preferences to validate suitability of decoy attributes.
134+
135+
2. **Main experiment - Control:** Present invitation email, agent decides whether to participate. If yes, complete target questionnaire (FCQ + demographics + debrief).
136+
137+
3. **Main experiment - Decoy:** Present invitation email with comparison table. Agent chooses target or decoy, then completes chosen questionnaire. Evaluate primary outcome (target completion), secondary outcomes (FCQ scores, perceived decoy influence).
138+
139+
4. **Critical details:**
140+
- The strong order effect is central: placing the target first dramatically increases the decoy effect (OR ~10), while placing the decoy first eliminates it (OR ~0.8).
141+
- Question type (closed vs open-ended) and payment timing (1 week vs 4 weeks) are the decoy attributes.
142+
- Sample completers vs non-completers show minimal non-response bias by demographic (except ethnicity imbalance).
143+
144+
---
145+
146+
## Files
147+
148+
**source/**
149+
- `specification.json` — Study design, participants, procedure
150+
- `ground_truth.json` — All findings, statistical tests, raw data
151+
- `metadata.json` — Additional metadata
152+
- `materials/preliminary_questionnaire.json` — Recruitment survey items
153+
- `materials/main_experiment_control.json` — Control condition materials
154+
- `materials/main_experiment_decoy_target_first.json` — Decoy condition (target first)
155+
- `materials/main_experiment_decoy_decoy_first.json` — Decoy condition (decoy first)
156+
- `decoy_effect_1.pdf` — Full paper
157+
- `decoy_effect_1_apndx.pdf` — Paper appendix
158+
- `exp.csv` — Participant-level data (203 participants, 36 columns)
159+
- `analysis_18082022.do` — Stata analysis script
160+
161+
**scripts/**
162+
- `config.py` — Study configuration and prompt builder
163+
- `evaluator.py` — Evaluation logic and statistical comparisons
164+
- `stats_lib.py` — Statistical utilities (if needed)
165+
- `study_utils.py` — Helper functions (if needed)

studies/study_015/index.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"title": "Testing the decoy effect to improve online survey participation: Evidence from a field experiment",
3+
"authors": [
4+
"Sandro T. Stoffel",
5+
"Yining Sun",
6+
"Yasemin Hirst",
7+
"Christian von Wagner",
8+
"Ivo Vlaev"
9+
],
10+
"year": 2023,
11+
"description": "A field experiment testing whether adding an inferior decoy survey option increases completion of a target online questionnaire. The study examines participation rates, order effects, and potential impacts on response behavior and non-response bias.",
12+
"contributors": [
13+
{
14+
"name": "Tanya Bhat",
15+
"github": "https://github.com/tbhat-ops",
16+
"institution": "UC San Diego"
17+
}
18+
]
19+
}
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import json
2+
import random
3+
from pathlib import Path
4+
from typing import Any, Dict, List, Optional
5+
6+
import sys
7+
sys.path.insert(0, str(Path(__file__).resolve().parent))
8+
from study_utils import BaseStudyConfig, PromptBuilder
9+
10+
11+
CONDITION_MATERIAL_MAP = {
12+
"control": "main_experiment_control",
13+
"decoy_target_first": "main_experiment_decoy_target_first",
14+
"decoy_decoy_first": "main_experiment_decoy_decoy_first",
15+
}
16+
17+
CONDITION_WEIGHTS = {
18+
"control": 101,
19+
"decoy_target_first": 52,
20+
"decoy_decoy_first": 50,
21+
}
22+
23+
24+
class DecoyEffectPromptBuilder(PromptBuilder):
25+
26+
def build_trial_prompt(self, trial_metadata: Dict[str, Any]) -> str:
27+
condition = trial_metadata["condition"]
28+
material = trial_metadata["material"]
29+
invitation = material["invitation_email"]
30+
31+
prompt = (
32+
"You are a university student who previously signed up for a research study. "
33+
"You completed a preliminary questionnaire about your attitudes and provided your "
34+
"email address to receive an invitation to a follow-up survey.\n\n"
35+
"You have now received the following email invitation:\n\n"
36+
"---\n"
37+
)
38+
39+
prompt += f"Subject: {invitation['subject']}\n\n"
40+
prompt += f"{invitation['body']}\n"
41+
42+
if condition == "control":
43+
prompt += (
44+
"\n---\n\n"
45+
"Based on this invitation, do you choose to complete the survey?\n\n"
46+
"RESPONSE_SPEC: Output CHOICE=<COMPLETE/DECLINE>\n"
47+
)
48+
else:
49+
table = material["comparison_table"]
50+
prompt += "\n\nHere is a comparison of the two available questionnaires:\n\n"
51+
52+
for i, col in enumerate(table["columns"]):
53+
label = chr(65 + i)
54+
prompt += f"Option {label}: {col['title']}\n"
55+
prompt += f" - Question type: {col['question_type']}\n"
56+
prompt += f" - Reward: {col['reward']}\n"
57+
prompt += f" - Reward timing: {col['reward_timing']}\n\n"
58+
59+
prompt += f"{table['footer']}\n"
60+
prompt += (
61+
"\n---\n\n"
62+
"Based on this invitation, which option do you choose?\n"
63+
" A) Complete Option A\n"
64+
" B) Complete Option B\n"
65+
" C) Decline to participate\n\n"
66+
"RESPONSE_SPEC: Output CHOICE=<A/B/C>\n"
67+
)
68+
69+
return prompt
70+
71+
72+
class StudyConfig(BaseStudyConfig):
73+
prompt_builder_class = DecoyEffectPromptBuilder
74+
PROMPT_VARIANT = "v1"
75+
76+
def create_trials(self, n_trials: Optional[int] = None) -> List[Dict[str, Any]]:
77+
spec = self.load_specification()
78+
79+
total_n = spec.get("participants", {}).get("main_experiment", {}).get("n", 0)
80+
if n_trials is not None:
81+
total_n = n_trials
82+
if total_n == 0:
83+
total_n = 50
84+
85+
total_weight = sum(CONDITION_WEIGHTS.values())
86+
condition_ns = {}
87+
assigned = 0
88+
conditions = list(CONDITION_WEIGHTS.keys())
89+
for i, cond in enumerate(conditions):
90+
if i == len(conditions) - 1:
91+
condition_ns[cond] = total_n - assigned
92+
else:
93+
n_cond = round(total_n * CONDITION_WEIGHTS[cond] / total_weight)
94+
condition_ns[cond] = n_cond
95+
assigned += n_cond
96+
97+
materials = {}
98+
for cond, mat_id in CONDITION_MATERIAL_MAP.items():
99+
materials[cond] = self.load_material(mat_id)
100+
101+
trials = []
102+
trial_id = 0
103+
for cond in conditions:
104+
mat = materials[cond]
105+
for _ in range(condition_ns[cond]):
106+
trials.append({
107+
"trial_id": trial_id,
108+
"sub_study_id": CONDITION_MATERIAL_MAP[cond],
109+
"condition": cond,
110+
"material": mat,
111+
"scenario_id": f"decoy_effect_{cond}",
112+
"items": mat.get("items", mat.get("target_questionnaire", {}).get("items", [])),
113+
"variant": self.PROMPT_VARIANT,
114+
})
115+
trial_id += 1
116+
117+
random.shuffle(trials)
118+
for i, t in enumerate(trials):
119+
t["trial_id"] = i
120+
121+
return trials

0 commit comments

Comments
 (0)