context("ubmsFit ranef method")
skip_on_cran()
#Setup umf
set.seed(123)
sc <- data.frame(x1=rnorm(3), x2=factor(c("a","b","c")),
x4=factor(c("d","e","f")))
oc <- data.frame(x3=rnorm(9))
umf <- unmarkedFrameOccu(y=matrix(c(1,0,0,1,1,0,0,1,0), nrow=3),
siteCovs=sc, obsCovs=oc)
#Fit model
good_fit <- TRUE
tryCatch({
fit <- suppressWarnings(stan_occu(~x3~x1+(1|x2), umf,
chains=2, iter=40, refresh=0))
fit2 <- suppressWarnings(stan_occu(~x3~x1+(1+x1||x2), umf,
chains=2, iter=40, refresh=0))
fit3 <- suppressWarnings(stan_occu(~x3~x1+(1|x2)+(1|x4), umf,
chains=2, iter=40, refresh=0))
fit4 <- suppressWarnings(stan_occu(~x3~x1+(1|x2)-1, umf,
chains=2, iter=40, refresh=0))
}, error=function(e){
good_fit <<- FALSE
})
skip_if(!good_fit, "Test setup failed")
test_that("ranef on submodel without random effect errors",{
expect_error(ranef(fit, "det"))
})
test_that("ranef on submodel with one random effect works",{
r <- ranef(fit, "state")
expect_is(r, "list")
expect_equal(names(r), "x2")
expect_is(r$x2, "list")
expect_equal(names(r$x2), "(Intercept)")
expect_equal(length(r$x2$`(Intercept)`), 3)
})
test_that("ranef works with means parameterization",{
#Might want to do a longer run here in future to match to fit1 results
r_mn <- ranef(fit4, "state")
expect_is(r_mn, "list")
})
test_that("ranef summary works with one random effect",{
r <- ranef(fit, "state", summary=TRUE)
df <- r$x2$`(Intercept)`
expect_is(df, "data.frame")
expect_equal(names(df), c("Estimate","SD","2.5%","97.5%"))
expect_equal(dim(df), c(3,4))
})
test_that("ranef works with both random slope/intercept",{
r <- ranef(fit2, "state")
expect_equal(names(r$x2), c("(Intercept)", "x1"))
expect_true(all(sapply(r, function(x) inherits(x, "list"))))
r2 <- ranef(fit2, "state", summary=TRUE)
expect_equal(names(r2$x2), c("(Intercept)", "x1"))
expect_true(all(sapply(r2$x2, inherits, "data.frame")))
})
test_that("ranef works with multiple random effects",{
r <- ranef(fit3, "state")
expect_equal(names(r), c("x2","x4"))
expect_equivalent(lapply(r, names), c("(Intercept)","(Intercept)"))
expect_true(all(sapply(r, inherits, "list")))
r2 <- ranef(fit3, "state", summary=TRUE)
})
test_that("setting add_mean = FALSE works", {
r <- expect_message(ranef(fit, 'state'))
r2 <- expect_no_message(ranef(fit, 'state', add_mean=FALSE))
# manually add the mean
r2_mn <- coef(fit)[1] + r2$x2[[1]]
expect_equal(r$x2[[1]], r2_mn)
})
test_that("combine_same_name combines lists properly",{
test1 <- list(a=list(a1=c(1,1)), a=list(a2=c(2,2)), b=list(b1=c(1,1)))
expect_equal(length(test1$a), 1)
comb1 <- combine_same_name(test1)
expect_equal(length(comb1), 2)
expect_equal(names(comb1$a), c("a1","a2"))
expect_equal(names(comb1$b), "b1")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.