Nothing
# Required data -------------------------------------------------------------------------------------------------------------------------------------------------------------------
data("dataMultilevelIV")
f.multilevel.L3 <- y ~ X11 + X12 + X13 + X14 + X15 + X21 + X22 + X23 + X24 + X31 + X32 + X33 + (1 | CID) + (1 | SID) | endo(X15)
f.multilevel.L2 <- y ~ X11 + X12 + X13 + X14 + X15 + X21 + X22 + X23 + X24 + X31 + X32 + X33 + (1 | SID) | endo(X15)
context("S3methods - multilevelIV - S3methods")
expect_silent(res.ml.L3 <- multilevelIV(formula = f.multilevel.L3, data = dataMultilevelIV, verbose = FALSE))
expect_silent(res.ml.L2 <- multilevelIV(formula = f.multilevel.L2, data = dataMultilevelIV, verbose = FALSE))
all.L3.models <- c("REF", "FE_L2", "FE_L3", "GMM_L2", "GMM_L3")
all.L2.models <- c("REF", "FE_L2", "GMM_L2")
# Summary ----------------------------------------------------------------------------------------------------------------------------------
test_that("Summary works for every model for L3 case",{
expect_silent(summary(res.ml.L3)) #non given
for(m in all.L3.models)
expect_silent(summary(res.ml.L3, model = m))
})
test_that("Summary works for every L2 model for L2 case",{
for(m in all.L2.models)
expect_silent(summary(res.ml.L2, model = m))
})
test_that("Summary fails for L3 models in L2 object",{
expect_error(summary(res.ml.L2, model = "FE_L3"), regexp = "The above errors were encountered!")
expect_error(summary(res.ml.L2, model = "GMM_L3"), regexp = "The above errors were encountered!")
})
test_that("summary() - coef", {
for(m in all.L3.models){
expect_silent(sum.coef <- coef(summary(res.ml.L3, model=m)))
# right cols
expect_true(ncol(sum.coef) == 4)
expect_true(all(colnames(sum.coef) != ""))
# right rows
expect_true(nrow(sum.coef) == nrow(coef(res.ml.L3)))
expect_true(all(rownames(sum.coef) == rownames(coef(res.ml.L3))))
}
})
fct.check.vcov.structure <- function(res.model, vcov){
res.attr <- attributes(vcov)
expect_named(res.attr, c("dim", "dimnames"))
expect_length(res.attr$dimnames, 2)
expect_equal(res.attr$dim, c(nrow(coef(res.model)), nrow(coef(res.model))) )
expect_equal(res.attr$dimnames[[1]], rownames(coef(res.model)))
expect_equal(res.attr$dimnames[[2]], rownames(coef(res.model)))
}
test_that("summary() - vcov", {
for(m in all.L3.models)
fct.check.vcov.structure(res.model = res.ml.L3, vcov=vcov(summary(res.ml.L3, model=m)))
})
test_that("S3 functions have all models as default argument model", {
for(fct in c("fitted.rendo.multilevel", "residuals.rendo.multilevel",
"vcov.rendo.multilevel", "confint.rendo.multilevel",
"summary.rendo.multilevel")){
default.arg <- eval(formals(get(x=fct, envir = getNamespace("REndo")))[["model"]])
expect_equal(default.arg, c("REF", "FE_L2", "FE_L3", "GMM_L2", "GMM_L3"))
}
})
# vcov ----------------------------------------------------------------------------------------------------------------------------------
test_that("vcov works for every model for L3 case", {
expect_silent(res.vcov <- vcov(res.ml.L3))
for(m in all.L3.models)
expect_silent(res.vcov <- vcov(res.ml.L3, m))
})
test_that("vcov works for every model for L2 case", {
expect_silent(res.vcov <- vcov(res.ml.L2)) # no given
for(m in all.L2.models)
expect_silent(res.vcov <- vcov(res.ml.L2, m))
})
test_that("vcov fails for L3 models in L2 object",{
expect_error(vcov(res.ml.L2, model = "FE_L3"), regexp = "The above errors were encountered!")
expect_error(vcov(res.ml.L2, model = "GMM_L3"), regexp = "The above errors were encountered!")
})
test_that("vcov structure", {
expect_silent(res.vcov <- vcov(res.ml.L3))
fct.check.vcov.structure(res.model = res.ml.L3, vcov=res.vcov)
})
# Basic S3 functionalities -----------------------------------------------------------------------------
# Cannot use .test.s3methods.basic.structure as to many deviations
# Copy and adapt
names.coef <- c("(Intercept)","X11","X12","X13","X14","X15","X21","X22","X23","X24","X31","X32","X33")
test_that("nobs", {
expect_silent(res.nobs <- nobs(res.ml.L3))
expect_is(res.nobs, "integer")
expect_equal(res.nobs, nrow(dataMultilevelIV))
})
test_that("fitted", {
expect_silent(fitted(res.ml.L3)) #non given
for(m in all.L3.models){
# Residuals
expect_silent(res <- fitted(res.ml.L3, model=m))
expect_length(res, nrow(dataMultilevelIV))
expect_named(res, rownames(dataMultilevelIV), ignore.order = TRUE)
expect_type(res, "double")
# alias
expect_silent(res <- fitted.values(res.ml.L3, model=m))
expect_length(res, nrow(dataMultilevelIV))
expect_named(res, rownames(dataMultilevelIV), ignore.order = TRUE)
expect_type(res, "double")
}
})
test_that("residuals", {
expect_silent(residuals(res.ml.L3)) #non given
for(m in all.L3.models){
# Residuals
expect_silent(res <- residuals(res.ml.L3, model=m))
expect_length(res, nrow(dataMultilevelIV))
expect_named(res, rownames(dataMultilevelIV), ignore.order = TRUE)
expect_type(res, "double")
# alias
expect_silent(res <- resid(res.ml.L3, model=m))
expect_length(res, nrow(dataMultilevelIV))
expect_named(res, rownames(dataMultilevelIV), ignore.order = TRUE)
expect_type(res, "double")
}
})
test_that("coef", {
# coef
expect_silent(res.coef <- coef(res.ml.L3))
expect_named(res.coef[,1], names.coef, ignore.order = TRUE)
expect_type(res.coef, "double")
# alias
expect_silent(res.coef <- coefficients(res.ml.L3))
expect_named(res.coef[,1], names.coef, ignore.order = TRUE)
expect_type(res.coef, "double")
})
# This breaks too many things when used for lm and ivreg models.
# reduced to the minimum
test_that("formula", {
expect_silent(res.form <- formula(res.ml.L3))
expect_true("formula" %in% class(res.form))
})
# test_that("formula", {
# expect_silent(res.form <- formula(res.ml.L3))
# expect_type(res.form, "language")
# expect_s3_class(res.form, "formula")
# expect_s3_class(res.form, "Formula")
# expect_equal(res.form, Formula::as.Formula(input.form))
# res.attr <- attributes(res.form)
# expect_named(res.attr, c("class", ".Environment", "lhs", "rhs"))
# expect_equal(res.attr$.Environment, environment(input.form)) # not 100% sure about this one
# # # contains no dot
# expect_false(any(all.vars(res.form) == "."))
# })
test_that("Printing methods", {
# Just that they work and return their input
expect_output(res <- show(res.ml.L3))
expect_null(res)
expect_output(res <- print(res.ml.L3))
expect_identical(res, res.ml.L3)
# Summary
for(m in all.L3.models){
expect_silent(res.sum <- summary(res.ml.L3, model=m))
expect_output(res <- show(res.sum))
expect_null(res)
expect_output(res <- print(res.sum))
expect_equal(res, res.sum)
}
})
# confint ------------------------------------------------------------------------------------------------------------------------
# confint structure is correct
.test.s3methods.confint.multilevel(res.model = res.ml.L2)
.test.s3methods.confint.multilevel(res.model = res.ml.L3)
test_that("confint works for all L2 models", {
expect_silent(confint(object = res.ml.L2)) #non given
for(m in all.L2.models){
expect_silent(res.ci <- confint(object = res.ml.L2, model=m))
expect_true(!is.null(res.ci))
expect_true(all.equal(rownames(res.ci), rownames(coef(res.ml.L2))))
expect_true(all.equal(colnames(res.ci), c("2.5 %", "97.5 %")))
expect_true(nrow(res.ci) == nrow(coef(res.ml.L2)))
}
})
test_that("confint works for all L3 models", {
expect_silent(confint(object = res.ml.L3)) #non given
for(m in all.L3.models){
expect_silent(res.ci <- confint(object = res.ml.L3, model=m))
expect_true(!is.null(res.ci))
expect_true(all.equal(rownames(res.ci), rownames(coef(res.ml.L3))))
expect_true(all.equal(colnames(res.ci), c("2.5 %", "97.5 %")))
expect_true(nrow(res.ci) == nrow(coef(res.ml.L3)))
}
})
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.