outcomerate
is a lightweight R package that implements
the standard outcome rates for surveys, as defined in the Standard
Definitions of the American Association of Public Opinion Research
(AAPOR).
Although the mathematical formulas are straightforward, it can get
tedious and repetitive calculating all the rates by hand, especially for
sub-groups of your study. The formulas are similar to one another and so
it is also dangerously easy to make a clerical mistake. The
outcomerate
package simplifies the analytically workflow by
defining all formulas as a collection of functions.
The latest development version is available via github:
install.packages("devtools")
::install_github("ropensci/outcomerate") devtools
Let’s say you try to survey 12 people. After finishing the fieldwork, you tabulate all your attempts into a table of disposition outcomes:
code | disposition | n |
---|---|---|
I | Complete interview | 4 |
P | Partial interview | 2 |
R | Refusal and break-off | 1 |
NC | Non-contact | 1 |
O | Other | 1 |
UH | Unknown if household | 1 |
NE | Known ineligible | 1 |
UO | Unknown, other | 1 |
Using this table, you may wish to report some of the common survey outcome rates, such as:
Most of these rates come under a number of variants, having
definitions that are standardized by AAPOR. The outcomerate
function lets your calculate these rates seamlessly:
# load package
library(outcomerate)
# set counts per disposition code (needs to be a named vector)
<- c(I = 4, P = 2, R = 1, NC = 1, O = 1, UH = 1, UO = 1, NE = 1)
freq
# calculate rates, assuming 90% of unknown cases are elligble
outcomerate(freq, e = eligibility_rate(freq))
#> RR1 RR2 RR3 RR4 RR5 RR6 COOP1 COOP2 COOP3 COOP4 REF1 REF2
#> 0.364 0.545 0.370 0.556 0.444 0.667 0.500 0.750 0.571 0.857 0.091 0.093
#> REF3 CON1 CON2 CON3 LOC1 LOC2
#> 0.111 0.727 0.741 0.889 0.818 0.833
Dispositions do not always come in a tabulated format. Survey
analysts often work with microdata directly, where each row represents
an interview. The outcomerate
package allows you to obtain
rates using such a format as well:
# define a vector of dispositions
<- c("I", "P", "I", "UO", "R", "I", "NC", "I", "O", "P", "UH")
x
# calculate desired rates
outcomerate(x, rate = c("RR2", "CON1"))
#> RR2 CON1
#> 0.55 0.73
# obtain a weighted rate
<- c(rep(1.3, 6), rep(2.5, 5))
w outcomerate(x, weight = w, rate = c("RR2", "CON1"))
#> RR2w CON1w
#> 0.50 0.69