Skip to content

Commit a1a7dce

Browse files
authored
Support for survey-Anova tables (#1043)
* Support for survey-Anova tables Fixes #600 * fix
1 parent 45edee5 commit a1a7dce

File tree

7 files changed

+80
-2
lines changed

7 files changed

+80
-2
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Type: Package
22
Package: parameters
33
Title: Processing of Model Parameters
4-
Version: 0.23.0.9
4+
Version: 0.23.0.10
55
Authors@R:
66
c(person(given = "Daniel",
77
family = "Lüdecke",

NAMESPACE

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ S3method(model_parameters,rqss)
327327
S3method(model_parameters,scam)
328328
S3method(model_parameters,selection)
329329
S3method(model_parameters,sem)
330+
S3method(model_parameters,seqanova.svyglm)
330331
S3method(model_parameters,slopes)
331332
S3method(model_parameters,stanfit)
332333
S3method(model_parameters,stanmvreg)

NEWS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
* Added support for `coxph.panel` models.
1111

12+
* Added support for `anova()` from models of the *survey* package.
13+
1214
## Bug fixes
1315

1416
* Fixed bug when extracting 'pretty labels' for model parameters, which could

R/extract_parameters_anova.R

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
parameters <- .extract_anova_aovlist(model)
1616
} else if (inherits(model, "anova.rms")) {
1717
parameters <- .extract_anova_aov_rms(model)
18+
} else if (inherits(model, "seqanova.svyglm")) {
19+
parameters <- .extract_anova_aov_svyglm(model)
1820
}
1921

2022
# Rename
@@ -70,7 +72,7 @@
7072
# Reorder
7173
row.names(parameters) <- NULL
7274
col_order <- c(
73-
"Response", "Group", "Parameter", "Coefficient", "SE", "Pillai", "AIC",
75+
"Response", "Group", "Parameter", "Coefficient", "DEff", "SE", "Pillai", "AIC",
7476
"BIC", "Log_Likelihood", "Chi2", "Chi2_df", "RSS", "Sum_Squares",
7577
"Sum_Squares_Partial", "Sum_Squares_Error", "df", "Deviance", "Statistic",
7678
"df_num", "df_error", "Deviance_error", "Mean_Square", "F", "Rao", "p"
@@ -255,6 +257,23 @@
255257
}
256258

257259

260+
# Anova.seqanova.svyglm -------------
261+
.extract_anova_aov_svyglm <- function(model) {
262+
if (identical(attributes(model)$method, "Wald")) {
263+
params <- lapply(model, function(x) {
264+
data.frame(F = as.vector(x$Ftest), df = x$df, df_error = x$ddf, p = as.vector(x$p))
265+
})
266+
} else {
267+
params <- lapply(model, function(x) {
268+
data.frame(Chi2 = x$chisq, DEff = x$lambda, df = x$df, df_error = x$ddf, p = as.vector(x$p))
269+
})
270+
}
271+
272+
params <- do.call(rbind, params)
273+
cbind(data.frame(Parameter = sapply(model, "[[", "test.terms"), params))
274+
}
275+
276+
258277

259278

260279
# test helper -------------

R/methods_aov.R

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,10 @@ model_parameters.Anova.mlm <- model_parameters.aov
312312
#' @export
313313
model_parameters.maov <- model_parameters.aov
314314

315+
#' @export
316+
model_parameters.seqanova.svyglm <- model_parameters.aov
317+
318+
315319

316320
# helper ------------------------------
317321

tests/testthat/_snaps/model_parameters.anova.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,33 @@
2626
2727
Anova Table (Type 3 tests)
2828

29+
# anova survey
30+
31+
Code
32+
print(model_parameters(out))
33+
Output
34+
# Fixed Effects
35+
36+
Parameter | DEff | Chi2(1) | df (error) | p
37+
-----------------------------------------------
38+
ell | 0.77 | 1.13 | 38 | 0.236
39+
meals | 1.24 | 4.82 | 37 | 0.058
40+
ell:meals | 1.48 | 16.52 | 36 | 0.002
41+
42+
Anova Table (Type 1 tests)
43+
44+
---
45+
46+
Code
47+
print(model_parameters(out))
48+
Output
49+
# Fixed Effects
50+
51+
Parameter | df | df (error) | F | p
52+
------------------------------------------
53+
ell | 1 | 38 | 1.47 | 0.234
54+
meals | 1 | 37 | 3.54 | 0.068
55+
ell:meals | 1 | 36 | 9.10 | 0.005
56+
57+
Anova Table (Type 1 tests)
58+

tests/testthat/test-model_parameters.anova.R

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,3 +273,25 @@ test_that("anova rms", {
273273
expect_named(mp, c("Parameter", "Chi2", "df", "p"))
274274
expect_equal(mp$Chi2, data.frame(a)$Chi.Square, tolerance = 1e-3)
275275
})
276+
277+
skip_if_not_installed("withr")
278+
skip_if_not_installed("survey")
279+
280+
withr::with_package(
281+
"survey",
282+
test_that("anova survey", {
283+
data(api, package = "survey")
284+
dclus2 <<- survey::svydesign(id = ~dnum + snum, weights = ~ pw, data = apiclus2)
285+
model0 <- survey::svyglm(
286+
I(sch.wide == "Yes") ~ ell * meals,
287+
design = dclus2,
288+
family = quasibinomial()
289+
)
290+
291+
out <- anova(model0)
292+
expect_snapshot(print(model_parameters(out)))
293+
294+
out <- anova(model0, method = "Wald")
295+
expect_snapshot(print(model_parameters(out)))
296+
})
297+
)

0 commit comments

Comments
 (0)