Changelog
Source:NEWS.md
attrition 1.0.0
First release. The package implements the estimators of Coppock, Gerber, Green, and Kern (2017) for randomized experiments with nonignorable missing outcomes.
Estimators
estimator_ev(): worst-case (Manski 1990) bounds from a single round of data collection, with a joint Imbens-Manski (2004) confidence interval.estimator_ds(): the double-sampling bounds of the paper, with its analytic variance. A random sample of the initial nonrespondents is pursued a second time, and only the subjects who refuse twice get worst-case treatment.estimator_ds_sens()andsensitivity_ds(): the interpolation between worst-case bounds and ignorability, indexed bydelta, the share of follow-up nonrespondents left unmodeled, and a sweep overdeltafor delta*, the smallest value at which the confidence interval reaches zero.estimator_trim(): trimming bounds on the effect among always-reporters. The design and the selection assumption are separate choices. Which response arguments are supplied picks the design, single sample (R) or double sampling (R1,Attempt,R2);monotonicitypicks the assumption,"treatment_increases_response"(Lee 2009),"treatment_decreases_response", or"none", which gives the sharp bounds of Imai (2008, Proposition 1) under random assignment alone. All four combinations estimate. Standard errors come from Lee (2009, Proposition 3) where that derivation applies, which is the single-sample, one-group-trimmed case, and from a bootstrap resampled within treatment arm everywhere else; asking for analytic standard errors where they do not apply is an error rather than a silent substitution.estimator_ev(),estimator_ds(),estimator_ds_sens()andsensitivity_ds()take astrataargument for poststratification on a discrete covariate, which targets the same identification region and estimates it more precisely.
Output
Every estimator returns the same six named elements in the same order, under broom’s names:
estimate_lowerandestimate_upper, the two ends of the identification region;std.error_lowerandstd.error_upper, their standard errors; andconf.lowandconf.high, the joint Imbens-Manski interval.estimator_trim()follows them with the intermediate quantities of the path taken.print(),summary()andtidy()methods for every result.summary()names the estimand and the assumptions that produced the numbers; for trimming bounds that includes the design, the direction assumed, how much of which group was trimmed, and where the standard errors came from.tidy()returns a three-row tibble, aboundsrow carrying the whole vector and a row per endpoint, soDeclareDesign::declare_estimator()can select an endpoint withterm.sensitivity_ds()returns a classed list whoseprint()reports delta* and whosetidy()returns the bounds at every value ofdelta.A formula interface on every estimator,
estimator_ds(Y ~ Z, R1 = "R1", Attempt = "Attempt", R2 = "R2", ...), which is whatdeclare_estimator(.method = ...)expects. Response, attempt and stratification arguments accept an unquoted column name, a quoted string, or a one-sided formula.
Guards
The assumed support of the outcome must cover the observed outcomes,
alphaanddeltamust lie in their ranges, and every treatment group needs at least one respondent, one follow-up attempt and one follow-up respondent (within every stratum, when strata are supplied). Each of these is an error naming the problem rather than aNaNor a bound that is not a bound.A monotonicity violation in the direction assumed returns
NAbounds with a warning naming the direction the response rates do admit. A zero trimming proportion warns that Lee’s interior-point condition fails. Missingness rates summing to one or more, or a trimming proportion that leaves one side of a group empty, are errors, and the bootstrap drops the replicates in which they occur and reports how many survived.
Data
levendusky_replication: the replication study reported in the paper, a two-wave survey experiment in which 536 of 1,980 subjects did not answer the second wave and 100 of them were followed up at a higher incentive. The tibble holds the polarized-versus-moderate contrast the paper analyzes, with columns named for the roles they play.data-raw/levendusky_replication.Rrebuilds it from the Harvard Dataverse deposit.vignette("attrition")works through the design and all five estimators on those data, reproduces Table 3 of the paper, draws the imputation the worst-case bounds average over, and closes with every estimator on one axis, grouped by the population each one describes.
Changes from the development version on GitHub
For anyone who installed the pre-release package from GitHub:
Output names changed. The bounding estimators returned
low_est,upp_est,low_var,upp_var,ci_lowerandci_upper, andestimator_trim()returnedlower_bound,upper_bound,lower_seandupper_se. The third pair of the old names held variances; the newstd.error_lowerandstd.error_upperare standard errors.The dataset was
levenduskyand held all three experimental conditions with the archive’s column names. It is nowlevendusky_replication, the analyzed contrast alone.sensitivity_ds()returnsdelta_star, a single number orNA, in place ofp_star, and itssims_dfhas adeltacolumn in place ofp.The Imbens-Manski critical value was found by a bounded optimizer whose search interval only covered
alphanear 0.05, so confidence intervals at other levels were wrong: atalpha = 0.01it returned 2.000 against a correct 2.326. The root is now found withuniroot()on a bracket derived fromalpha. Bound estimates and variances are unaffected.estimator_trim()withR1,AttemptandR2previously trimmed both groups without a way to assume monotonicity, and withRassumed monotonicity in one fixed direction. Both defaults are unchanged, and themonotonicityargument now reaches the other combinations.