This dataset is included as a tutorial example to illustrate willingness-to-pay and compensating differential analysis with a numeric cost attribute. It is not one of the three main applications analyzed in the paper.
This chapter applies the structural estimator to a climate-treaty conjoint experiment whose design follows Bechtel and Scheve (2013). Respondents evaluate pairs of hypothetical international climate agreements varying on six attributes — including a numeric cost attribute (cost_usd) — and select the one they prefer. Because cost is numeric, this dataset is a natural showcase for willingness-to-pay (WTP) analysis via sc_wtp() and compensating differentials via sc_compensating().
6.1 Data preparation
data(bs2013, package ="sconjoint")dim(bs2013)
[1] 20000 13
head(bs2013, 4)
respondent task profile choice cost_usd distribution
1 122303373 1 1 0 141 Prop. current emissions
2 122303373 1 2 1 28 Prop. hist. emissions
3 122303373 2 1 0 84 Prop. current emissions
4 122303373 2 2 1 28 Only rich pay
participation emissions sanctions monitoring
1 160 countries 40% reduction $17/mo sanctions United Nations
2 160 countries 60% reduction No sanctions Greenpeace
3 80 countries 80% reduction No sanctions Greenpeace
4 80 countries 40% reduction No sanctions Independent commission
resp_female resp_age resp_ideo
1 1 57 2
2 1 57 2
3 1 57 2
4 1 57 2
Each respondent contributes six forced-choice tasks with two treaty profiles each (12 rows per respondent). The respondent-level moderators are resp_female (binary), age (standardized), and resp_ideo (standardized ideology).
The Stage-2 MAP refinement runs by default for all scfit() calls. Set stage2 = "none" to recover v0.1 behavior. Note: this Bechtel- Scheve climate-policy example is not in the paper; it lives in the tutorial as a fourth showcase.
plot(fit_bs, "loss_trace")
6.3 Population-average estimates
plot_amce(fit_bs, groups = bs_groups, labels = bs_labels)
6.4 Individual-level preferences
plot(fit_bs, "beta_ridgelines", groups = bs_groups, labels = bs_labels)
sc_wtp() returns \(-\hat\beta_k / \hat\beta_{\text{cost}}\), the respondent-level cost the average voter would accept to gain feature \(k\), in the same units as cost_usd. Positive values mean the feature is desired enough that voters would pay for it.
sc_quantity: wtp
estimate = -2.379 se = 0.7135 95% CI = [-3.778, -0.9808]
6.5.4 Compensating differentials
How much cost would respondents accept to gain a preferred treaty feature? sc_compensating() computes the per-respondent ratio and reports the trimmed mean.
plot_fraction(fit_bs, groups = bs_groups, labels = bs_labels)
6.5.6 Heterogeneity test
Plot the per-attribute heterogeneity variance. Because the numeric cost_usd attribute is on a much larger scale than the 0/1 dummies, its MAP-shrunk per-respondent variance dominates a shared x-axis. We pass which_beta = "dnn" (read the well-scaled Stage-1 view) and facet_scales = "free" (each attribute group gets its own x range).
plot_hetero(fit_bs, groups = bs_groups, labels = bs_labels,which_beta ="dnn", facet_scales ="free")