Nothing
# NOTE: The estimators of the population mean for a model without a
# regression intercept are excluded from the test because they
# differ from the implementation based on survey::calibrate
suppressPackageStartupMessages(library("survey"))
library("robsurvey", quietly = TRUE)
source("check_functions.R")
#===============================================================================
# 1 MU284strat data (weights are calibrated to N)
#===============================================================================
dataset <- "MU284strat"
dn <- svydesign(ids = ~LABEL, strata = ~Stratum, fpc = ~fpc,
weights = ~weights, data = MU284strat)
f0 <- RMT85 ~ -1 + P85 + S82 + CS82
f <- RMT85 ~ P85 + S82 + CS82
N <- 284
aux_totals <- c(P85 = 8339, S82 = 13500, CS82 = 2583)
#--------------------------------------
# 1.1 total
#--------------------------------------
# GREG total with intercept
ref <- svytotal(~RMT85, calibrate(dn, f, c("(Intercept)" = N, aux_totals)))
est <- svytotal_reg(svyreg(f, dn), aux_totals, N, type = "ADU")
check(ref, est, dataset, "total with intercept")
# type "projective" and "ADU" coincide
est <- svytotal_reg(svyreg(f, dn), aux_totals, N, type = "projective")
check(ref, est, dataset, "total with intercept: projective")
# GREG total with intercept + heteroscedasticity
ref <- svytotal(~RMT85, calibrate(dn, f, c("(Intercept)" = N, aux_totals),
variance = MU284strat$P85))
est <- svytotal_reg(svyreg(f, dn, var = ~ P85), aux_totals, N, type = "ADU")
check(ref, est, dataset, "total with intercept: hetero")
# GREG total without intercept
ref <- svytotal(~RMT85, calibrate(dn, f0, aux_totals))
est <- svytotal_reg(svyreg(f0, dn), aux_totals, type = "ADU")
check(ref, est, dataset, "total w/o intercept")
#--------------------------------------
# 1.2 mean
#--------------------------------------
# GREG mean with intercept
ref <- svymean(~RMT85, calibrate(dn, f, c("(Intercept)" = N, aux_totals)))
est <- svymean_reg(svyreg(f, dn), aux_totals, N, type = "ADU")
check(ref, est, dataset, "mean with intercept")
# GREG mean with intercept + heteroscedasticity
ref <- svymean(~RMT85, calibrate(dn, f, c("(Intercept)" = N, aux_totals),
variance = MU284strat$P85))
est <- svymean_reg(svyreg(f, dn, var = ~ P85), aux_totals, N, type = "ADU")
check(ref, est, dataset, "mean with intercept: hetero")
# GREG mean without intercept, see NOTE:
if (FALSE) {
ref <- svymean(~RMT85, calibrate(dn, f0, aux_totals))
est <- svymean_reg(svyreg(f0, dn), aux_totals, N, type = "ADU")
check(ref, est, dataset, "mean w/o intercept")
}
#===============================================================================
# 2 workplace data (weights are calibrated to N)
#===============================================================================
dataset <- "workplace"
dn <- svydesign(ids = ~ID, strata = ~strat, fpc = ~fpc, weights = ~weight,
data = workplace)
f0 <- payroll ~ -1 + employment
f <- payroll ~ employment
N <- 86514
aux_totals <- c(employment = 953555 * 1.05)
#--------------------------------------
# 2.1 total
#--------------------------------------
# GREG total with intercept
ref <- svytotal(~payroll, calibrate(dn, f, c("(Intercept)" = N, aux_totals)))
est <- svytotal_reg(svyreg(f, dn), aux_totals, N, type = "ADU")
check(ref, est, dataset, "total with intercept")
# type "projective" and "ADU" coincide
est <- svytotal_reg(svyreg(f, dn), aux_totals, N, type = "projective")
check(ref, est, dataset, "total with intercept: projective")
# GREG total without intercept
ref <- svytotal(~payroll, calibrate(dn, f0, aux_totals))
est <- svytotal_reg(svyreg(f0, dn), aux_totals, type = "ADU")
check(ref, est, dataset, "total w/o intercept")
# GREG total without intercept + heteroscedasticity (ratio estimator)
ref <- svytotal(~payroll, calibrate(dn, f0, aux_totals,
variance = workplace$employment))
est <- svytotal_reg(svyreg(f0, dn, var = ~employment), aux_totals,
type = "ADU")
check(ref, est, dataset, "total w/o intercept: hetero")
#--------------------------------------
# 2.2 mean
#--------------------------------------
# GREG mean with intercept
ref <- svymean(~payroll, calibrate(dn, f, c("(Intercept)" = N, aux_totals)))
est <- svymean_reg(svyreg(f, dn), aux_totals, N, type = "ADU")
check(ref, est, dataset, "mean with intercept")
# GREG mean without intercept; see NOTE:
if (FALSE) {
ref <- svymean(~payroll, calibrate(dn, f0, aux_totals))
est <- svymean_reg(svyreg(f0, dn), aux_totals, N, type = "ADU")
check(ref, est, dataset, "mean w/o intercept")
}
# GREG mean without intercept + heteroscedasticity (ratio estimator); see NOTE:
if (FALSE) {
ref <- svymean(~payroll, calibrate(dn, f0, aux_totals,
variance = workplace$employment))
est <- svymean_reg(svyreg(f0, dn, var = ~employment), aux_totals, N,
type = "ADU")
check(ref, est, dataset, "mean w/o intercept: hetero")
}
#===============================================================================
# 3 workplace data (weights are NOT calibrated to N)
#===============================================================================
dataset <- "workplace"
# modify workplace data (mulitply weights of the first unit in each stratum
# by 0.25; thus, the weights are not calibrated)
wp <- workplace
wp[wp$ID == 2, "weight"] <- 0.25 * wp[wp$ID == 2, "weight"]
wp[wp$ID == 1, "weight"] <- 0.25 * wp[wp$ID == 1, "weight"]
wp[wp$ID == 7, "weight"] <- 0.25 * wp[wp$ID == 7, "weight"]
dn <- svydesign(ids = ~ID, strata = ~strat, fpc = ~fpc, weights = ~weight,
data = wp)
#--------------------------------------
# 3.1 total
#--------------------------------------
# GREG total with intercept
ref <- svytotal(~payroll, calibrate(dn, f, c("(Intercept)" = N, aux_totals)))
est <- svytotal_reg(svyreg(f, dn), aux_totals, N, type = "ADU")
check(ref, est, paste0(dataset, " (not calibrated)"), "total with intercept")
# type "projective" and "ADU" coincide
est <- svytotal_reg(svyreg(f, dn), aux_totals, N, type = "projective")
check(ref, est, paste0(dataset, " (not calibrated)"),
"total with intercept: projective")
# GREG total without intercept
ref <- svytotal(~payroll, calibrate(dn, f0, aux_totals))
est <- svytotal_reg(svyreg(f0, dn), aux_totals, type = "ADU")
check(ref, est, paste0(dataset, " (not calibrated)"), "total w/o intercept")
# GREG total without intercept + heteroscedasticity (ratio estimator)
ref <- svytotal(~payroll, calibrate(dn, f0, aux_totals,
variance = wp$employment))
est <- svytotal_reg(svyreg(f0, dn, var = ~employment), aux_totals,
type = "ADU")
check(ref, est, paste0(dataset, " (not calibrated)"),
"total w/o intercept: hetero")
#--------------------------------------
# 3.2 mean
#--------------------------------------
# GREG mean with intercept
ref <- svymean(~payroll, calibrate(dn, f, c("(Intercept)" = N, aux_totals)))
est <- svymean_reg(svyreg(f, dn), aux_totals, N, type = "ADU")
check(ref, est, paste0(dataset, " (not calibrated)"), "mean with intercept")
# GREG mean without intercept; see NOTE:
if (FALSE) {
ref <- svymean(~payroll, calibrate(dn, f0, aux_totals))
est <- svymean_reg(svyreg(f0, dn), aux_totals, N, type = "ADU")
check(ref, est, paste0(dataset, " (not calibrated)"), "mean w/o intercept")
}
# GREG mean without intercept + heteroscedasticity (ratio estimator); see NOTE:
if (FALSE) {
ref <- svymean(~payroll, calibrate(dn, f0, aux_totals,
variance = wp$employment))
est <- svymean_reg(svyreg(f0, dn, var = ~employment), aux_totals, N,
type = "ADU")
check(ref, est, paste0(dataset, " (not calibrated)"),
"mean w/o intercept: hetero")
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.