context("Survey designs")
data(api, package = "survey")
dclus1 <- svydesign(id = ~dnum, weights = ~pw,
data = apiclus1, fpc = ~fpc)
test_that("Survey designs work", {
expect_is(
iNZightPlot(api00, api99, design = dclus1, plot = FALSE),
"inzplotoutput"
)
})
test_that("Summary information is correct - dot plot", {
x <- getPlotSummary(enroll, design = dclus1)
pe <- which(grepl("Population estimates", x)) + 3
xpe <- gsub("\\|", "", x[pe])
expect_equal(
round(scan(textConnection(xpe), quiet = TRUE))[-(1:3)],
round(c(
# as.numeric(
# svyquantile(~enroll,
# design = dclus1, quantiles = c(0.25, 0.5, 0.75)
# )
# ),
as.numeric(svymean(~enroll, design = dclus1)),
sqrt(as.numeric(svyvar(~enroll, design = dclus1))),
as.numeric(svytotal(~enroll, design = dclus1)),
coef(svytotal(cbind(rep(1, nrow(dclus1$variables))), dclus1)),
nrow(apiclus1),
min(apiclus1$enroll),
max(apiclus1$enroll)
))
)
## standard errors ...
# ...
se <- which(grepl("Standard error of estimates", x)) + 2
xse <- gsub("\\|", "", x[se])
expect_equivalent(
round(
scan(text = xse, quiet = TRUE),
c(2, 2, 2, 2, 2, 0, 0)
)[-(1:3)],
round(
c(
# SE(svyquantile(~enroll,
# design = dclus1, quantiles = c(0.25, 0.5, 0.75),
# se = TRUE
# )),
SE(svymean(~enroll, design = dclus1)),
sqrt(
vcov(svyvar(~enroll, dclus1)) /
4 / coef(svyvar(~enroll, dclus1))
),
SE(svytotal(~enroll, design = dclus1)),
SE(svytotal(cbind(rep(1, nrow(dclus1$variables))), dclus1))
),
c(2, 2, 0, 0)
)
)
})
test_that("Summary information is correct - dot plot (by factor)", {
x <- getPlotSummary(enroll, stype, design = dclus1)
pe <- which(grepl("Population estimates", x)) + 3:5
xpe <- gsub("\\||[A-Z]", "", x[pe])
expect_equivalent(
round(do.call(
rbind,
lapply(xpe, function(z) round(scan(textConnection(z), quiet = TRUE)))
))[,-(1:3)],
round(cbind(
# as.matrix(svyby(~enroll, ~stype, dclus1, svyquantile, keep.var = FALSE,
# quantiles = c(0.25, 0.5, 0.75))[,-1]),
mean=coef(svyby(~enroll, ~stype, dclus1, svymean)),
sd=sqrt(coef(svyby(~enroll, ~stype, dclus1, svyvar))),
total=coef(svyby(~enroll, ~stype, dclus1, svytotal)),
pop=tapply(weights(dclus1), dclus1$variables$stype, sum),
n=table(dclus1$variables$stype),
min=tapply(dclus1$variables$enroll, dclus1$variables$stype, min),
max=tapply(dclus1$variables$enroll, dclus1$variables$stype, max)
))
)
## standard errors
se <- which(grepl("Standard error of estimates", x)) + 2:4
xse <- gsub("\\||[A-Z]", "", x[se])
expect_equivalent(
do.call(rbind,
lapply(xse, function(z)
round(
scan(text = z, quiet = TRUE),
c(2, 2, 2, 2, 2, 0, 1)
)
)
)[,-(1:3)],
as.matrix(cbind(
# suppressWarnings(
# round(SE(svyby(~enroll, ~stype, dclus1, svyquantile,
# ci = TRUE, se = TRUE,
# quantiles = c(0.25, 0.5, 0.75))), 2)
# ),
mean = round(SE(svyby(~enroll, ~stype, dclus1, svymean)), 2),
sd = {
vv <- svyby(~enroll, ~stype, dclus1, svyvar)
vc <- suppressWarnings(diag(vcov(vv)))
round(sqrt(vc / 4 / coef(vv)), 2)
},
total = round(SE(svyby(~enroll, ~stype, dclus1, svytotal))),
pop = round(SE(svytotal(~stype, dclus1)), 1)
))
)
})
test_that("Design effects are included - numeric", {
x <- getPlotSummary(enroll, design = dclus1,
survey.options = list(deff = TRUE))
de <- which(grepl("Design effects", x)) + 2
xde <- gsub("\\||[A-Z]", "", x[de])
expect_equivalent(
round(scan(textConnection(xde), quiet = TRUE)),
round(c(
mean=deff(svymean(~enroll, dclus1, deff = TRUE)),
total=deff(svytotal(~enroll, dclus1, deff = TRUE))
))
)
})
test_that("Design effects are included - numeric x categorical", {
x <- getPlotSummary(enroll, stype, design = dclus1,
survey.options = list(deff = TRUE))
de <- which(grepl("Design effects", x)) + 2:4
xde <- gsub("\\||[A-Z]", "", x[de])
expect_equivalent(
round(do.call(
rbind,
lapply(xde, function(z) round(scan(textConnection(z), quiet = TRUE)))
)),
round(cbind(
mean=deff(svyby(~enroll, ~stype, dclus1, svymean, deff = TRUE)),
total=deff(svyby(~enroll, ~stype, dclus1, svytotal, deff = TRUE))
))
)
})
# test_that("Design effects are included - numeric x numeric", {
# x <- getPlotSummary(api00, api99, design = dclus1,
# trend = "linear",
# survey.options = list(deff = TRUE))
# # de <- which(grepl("Design effects", x)) + 2:4
# # xde <- gsub("\\||[A-Z]", "", x[de])
# # expect_equivalent(
# # round(do.call(
# # rbind,
# # lapply(xde, function(z) round(scan(textConnection(z), quiet = TRUE)))
# # )),
# # round(cbind(
# # mean=deff(svyby(~enroll, ~stype, dclus1, svymean, deff = TRUE)),
# # total=deff(svyby(~enroll, ~stype, dclus1, svytotal, deff = TRUE))
# # ))
# # )
# })
test_that("Design effects are included - categorical", {
x <- getPlotSummary(stype, design = dclus1,
survey.options = list(deff = TRUE))
de <- which(grepl("Design effects", x))
xde <- gsub("\\||Design effects", "", x[de])
expect_equivalent(
round(scan(textConnection(xde), quiet = TRUE), 2),
round(
deff(svymean(~stype, dclus1, deff = TRUE)),
2
)
)
})
test_that("Design effects are included - categorical x categorical", {
x <- getPlotSummary(stype, awards, design = dclus1,
survey.options = list(deff = TRUE))
de <- which(grepl("Design effects", x)) + 3:4
xde <- gsub("\\||[A-Za-z]", "", x[de])
expect_equivalent(
round(do.call(
rbind,
lapply(xde, function(z)
round(scan(textConnection(z), quiet = TRUE), 2))
), 2),
round(as.matrix(
deff(svyby(~stype, ~awards, dclus1, svymean, deff=T))
), 2)
)
})
test_that("Scatter plots work for surveys", {
skip_if_offline()
nhanes <- try(
suppressWarnings(
iNZightTools::smart_read("https://inzight.nz/testdata/nhanes.csv") %>%
dplyr::mutate(
Gender.cat = ifelse(Gender == 1, "Male", "Female"),
Education.cat = as.factor(Education)
)
)
)
skip_if(inherits(nhanes, "try-error"), "Unable to load resource")
nhanes.svy <- svydesign(~SDMVPSU, strata = ~SDMVSTRA,
weights = ~WTINT2YR, data = nhanes, nest = TRUE)
px <- inzplot(Weight ~ Height, design = nhanes.svy, plot = FALSE)
sx <- nhanes.svy$variables$Height
sx <- sx[!is.na(sx) & !is.na(nhanes.svy$variables$Weight)]
expect_equal(px$all$all$x, sx)
tp <- tempfile(fileext=".pdf")
on.exit(unlink(tp))
pdf(tp)
expect_is(
inzplot(Weight ~ Height, design = nhanes.svy, plot = TRUE,
smooth = 0.8),
"inzplotoutput"
)
})
test_that("Factors with one level return error", {
dclus1$variables$test <- factor(rep("test", nrow(dclus1$variables)))
dclus1$variables$test2 <- factor(rep("test", nrow(dclus1$variables)))
expect_error(inzplot(test ~ api00, design = dclus1, plot = FALSE))
})
test_that("Log transformation works with surveys", {
expect_is(
inzplot(~meals, design = dclus1, transform = list(x = "log"),
plot = FALSE
),
"inzplotoutput"
)
})
test_that("SRS fpc-only works", {
srs_data <- data.frame(
v = sample(5:20, size = 20, replace = TRUE),
y = 100
)
srs_des <- svydesign(~1, fpc = ~y, data = srs_data)
expect_is(inzplot(~v, design = srs_des), "inzplotoutput")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.