Nothing
suppressPackageStartupMessages(library("survey"))
library("robsurvey", quietly = TRUE)
attach(workplace)
# design object
dn <- svydesign(ids = ~ID, strata = ~strat, fpc = ~fpc, weights = ~weight,
data = workplace)
source("check_functions.R")
#===============================================================================
# 1 Test against MASS::rlm
#===============================================================================
if (requireNamespace("MASS", quietly = TRUE)) {
library(MASS)
# make a copy of MASS::rlm
rlm_mod <- MASS:::rlm.default
# replace wmad-function with our weighted mad
body(rlm_mod)[[4]] <- substitute(wmad <- function(x, w) weighted_mad(x, w))
#---------------------------------------------------------------------------
# Huber regression M-estimator
est <- svyreg_huberM(payroll ~ employment, dn, k = 1.345, tol = 1e-9)
ref <- rlm_mod(x = est$model$x, y = est$model$y, weights = est$model$w,
k = 1.345, scale.est = "MAD", method = "M", wt.method = "case",
acc = 1e-9, maxit = 50, test.vec = "coef")
all_equal(coef(est), coef(ref), tolerance = 1e-7,
label = "Huber regression regression: coefficients")
# model-based covariance matrix
all_equal(vcov(est, "model"), vcov(ref), tolerance = 1e-7,
label = "Huber regression M-est: model-based cov")
# design-based covariance matrix (test against fixed values)
ref <- matrix(c(61704317.084028, -3367311.1407500, -3367311.140750,
870905.6027803), ncol = 2)
colnames(ref) <- rownames(ref) <- c("(Intercept)", "employment")
all_equal(vcov(est), ref,
label = "Huber regression M-est: design-based cov")
#---------------------------------------------------------------------------
# Tukey regression M-estimator
est <- svyreg_tukeyM(payroll ~ employment, dn, k = 4.6, tol = 1e-9)
ref <- rlm_mod(x = est$model$x, y = est$model$y, weights = est$model$w,
c = 4.6, psi = psi.bisquare, scale.est = "MAD", method = "M",
wt.method = "case", acc = 1e-9, maxit = 50, test.vec = "coef")
all_equal(coef(est), coef(ref), tolerance = 1e-7,
label = "Tukey regression regression: coefficients")
# model-based covariance matrix
all_equal(vcov(est, "model"), vcov(ref), tolerance = 1e-7,
label = "Tukey regression M-est: model-based cov")
# design-based covariance matrix (test against fixed values)
ref <- matrix(c(43513457.824988, -1421272.808406, -1421272.808406,
589121.583227), ncol = 2)
colnames(ref) <- rownames(ref) <- c("(Intercept)", "employment")
all_equal(vcov(est), ref,
label = "Tukey regression M-est: design-based cov")
}
#===============================================================================
# 2 Test against survey::svyglm
#===============================================================================
# survey weighted regression
ref <- svyglm(payroll ~ employment, dn)
est <- svyreg(payroll ~ employment, dn)
all_equal(coef(est), coef(ref),
label = "Survey weighted regression: coefficients")
# design-based covariance matrix (test against survey::svyglm)
all_equal(vcov(est, "design"), vcov(ref),
label = "Survey weighted regression: design-based cov")
# model-based covariance matrix (test against MASS::rlm)
ref <- rlm(payroll ~ employment, weights = weights(dn), data = dn$variables,
method = "M", wt.method = "case", k = 1000)
all_equal(vcov(est, "model"), vcov(ref),
label = "Survey weighted regression: model-based cov")
#-------------------------------------------------------------------------------
# Mallows regression GM-estimator: Huber psi
xwgt <- simpsonWgt(employment / weighted_median(employment, weight), a = 1,
b = 20)
est <- svyreg_huberGM(payroll ~ employment, dn, k = 1.345, type = "Mallows",
xwgt = xwgt)
all_equal(coef(est),
c("(Intercept)" = 7843.4909, employment = 14425.3658),
tolerance = 1e-4, label = "Huber Mallows regression GM-est")
# model-based covariance matrix
ref <- matrix(c(35768.4163, -572.71408, -572.71408, 52.40226), ncol = 2)
colnames(ref) <- c("(Intercept)", "employment")
rownames(ref) <- c("(Intercept)", "employment")
all_equal(vcov(est, "model"), ref, tolerance = 1e-4,
label = "Huber Mallows regression GM-est: model-based cov")
#-------------------------------------------------------------------------------
# Schweppe regression GM-estimator: Huber psi
xwgt <- simpsonWgt(employment / weighted_median(employment, weight), a = 1,
b = 20)
est <- svyreg_huberGM(payroll ~ employment, dn, k = 1.345, type = "Schweppe",
xwgt = xwgt)
all_equal(coef(est),
c("(Intercept)" = 7769.1899, employment = 14424.6617),
tolerance = 1e-4, label = "Huber Schweppe regression GM-est")
# model-based covariance matrix
ref <- matrix(c(35697.6180, -620.1554, -620.1554, 57.4449), ncol = 2)
colnames(ref) <- c("(Intercept)", "employment")
rownames(ref) <- c("(Intercept)", "employment")
all_equal(vcov(est, "model"), ref, tolerance = 1e-4,
label = "Huber Schweppe regression GM-est: model-based cov")
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.