## ----setup, include=FALSE----------------------------------------------------- options(rmarkdown.html_vignette.check_title = FALSE) knitr::opts_chunk$set(echo = TRUE) ## ----------------------------------------------------------------------------- library(surveysd) set.seed(1234) eusilc <- demo.eusilc(prettyNames = TRUE) dat_boot <- draw.bootstrap(eusilc, REP = 10, hid = "hid", weights = "pWeight", strata = "region", period = "year") dat_boot_calib <- recalib(dat_boot, conP.var = "gender", conH.var = "region", epsP = 1e-2, epsH = 2.5e-2, verbose = FALSE) dat_boot_calib[, onePerson := nrow(.SD) == 1, by = .(year, hid)] ## print part of the dataset dat_boot_calib[1:5, .(year, povertyRisk, eqIncome, onePerson, pWeight, w1, w2, w3, w4, w5)] ## ----------------------------------------------------------------------------- povertyRate <- calc.stError(dat_boot_calib, var = "povertyRisk", fun = weightedRatio) totalIncome <- calc.stError(dat_boot_calib, var = "eqIncome", fun = weightedSum) ## ----------------------------------------------------------------------------- povertyRate$Estimates totalIncome$Estimates ## ----------------------------------------------------------------------------- ## define custom estimator myWeightedSum <- function(x, w) { sum(x*w) } ## check if results are equal to the one using `surveysd::weightedSum()` totalIncome2 <- calc.stError(dat_boot_calib, var = "eqIncome", fun = myWeightedSum) all.equal(totalIncome$Estimates, totalIncome2$Estimates) ## ----------------------------------------------------------------------------- ## use add.arg-argument fun <- function(x, w, b) { sum(x*w*b) } add.arg = list(b="onePerson") err.est <- calc.stError(dat_boot_calib, var = "povertyRisk", fun = fun, period.mean = 0, add.arg=add.arg) err.est$Estimates # compare with direct computation compare.value <- dat_boot_calib[,fun(povertyRisk,pWeight,b=onePerson), by=c("year")] all((compare.value$V1-err.est$Estimates$val_povertyRisk)==0) ## ----------------------------------------------------------------------------- # custom estimator to first derive poverty threshold # and then estimate a weighted ratio povmd <- function(x, w) { md <- laeken::weightedMedian(x, w)*0.6 pmd60 <- x < md # weighted ratio is directly estimated inside the function return(sum(w[pmd60])/sum(w)*100) } err.est <- calc.stError( dat_boot_calib, var = "povertyRisk", fun = weightedRatio, fun.adjust.var = povmd, adjust.var = "eqIncome") err.est$Estimates ## ----------------------------------------------------------------------------- # using fun.adjust.var and adjust.var to estimate povmd60 indicator # for each period and bootstrap weight before applying the weightedRatio povmd2 <- function(x, w) { md <- laeken::weightedMedian(x, w)*0.6 pmd60 <- x < md return(as.integer(pmd60)) } # set adjust.var="eqIncome" so the income vector is used to estimate # the povmd60 indicator for each bootstrap weight # and the resulting indicators are passed to function weightedRatio group <- "gender" err.est <- calc.stError( dat_boot_calib, var = "povertyRisk", fun = weightedRatio, group = "gender", fun.adjust.var = povmd2, adjust.var = "eqIncome") err.est$Estimates ## ----------------------------------------------------------------------------- multipleRates <- calc.stError(dat_boot_calib, var = c("povertyRisk", "onePerson"), fun = weightedRatio) multipleRates$Estimates ## ----------------------------------------------------------------------------- dat2 <- subset(dat_boot_calib, year == 2010) for (att in c("period", "weights", "b.rep")) attr(dat2, att) <- attr(dat_boot_calib, att) ## ----------------------------------------------------------------------------- povertyRates <- calc.stError(dat2, var = "povertyRisk", fun = weightedRatio, group = "region") povertyRates$Estimates ## ----------------------------------------------------------------------------- povertyRates <- calc.stError(dat2, var = "povertyRisk", fun = weightedRatio, group = c("gender", "region")) povertyRates$Estimates ## ----------------------------------------------------------------------------- povertyRates <- calc.stError(dat2, var = "povertyRisk", fun = weightedRatio, group = list(c("gender", "region"))) povertyRates$Estimates ## ----------------------------------------------------------------------------- povertyRates <- calc.stError(dat2, var = "povertyRisk", fun = weightedRatio, group = list("gender", "region", c("gender", "region"))) povertyRates$Estimates