library(survey)
library(dplyr)
data(api)
dstrata <- apistrat %>%
as_survey_design(strata = stype, weights = pw)
dstrata %>%
summarise(api99_unw = unweighted(mean(api99)),
n = unweighted(n()))
dstrata %>%
group_by(stype) %>%
summarise(api_diff_unw = unweighted(mean(api00 - api99)))
# Some survey designs, like ones with raked weights, are not removed
# when filtered to preserve the structure. So if you don't use `unweighted()`
# your results can be wrong.
# Declare basic clustered design ----
cluster_design <- as_survey_design(
.data = apiclus1,
id = dnum,
weights = pw,
fpc = fpc
)
# Add raking weights for school type ----
pop.types <- data.frame(stype=c("E","H","M"), Freq=c(4421,755,1018))
pop.schwide <- data.frame(sch.wide=c("No","Yes"), Freq=c(1072,5122))
raked_design <- rake(
cluster_design,
sample.margins = list(~stype,~sch.wide),
population.margins = list(pop.types, pop.schwide)
)
raked_design %>%
filter(cname != "Alameda") %>%
group_by(cname) %>%
summarize(
direct_unw_mean = mean(api99),
wrapped_unw_mean = unweighted(mean(api99))
) %>%
filter(cname == "Alameda")
# Notice how the results are different when using `unweighted()`
Run the code above in your browser using DataLab