Nothing
skip_on_cran()
require(testthat)
context("Multivariate Regression")
require(EdSurvey)
options(width = 500)
options(useFancyQuotes = FALSE)
sdf <- readNAEP(system.file("extdata/data", "M36NT2PM.dat", package = "NAEPprimer"))
context("Multivariate Regression: 2 DVs (2 non PV)")
test_that("mvrlm.sdf results align with lm.sdf", {
mvrlm.fit <- mvrlm.sdf(mrps51 | mrps22 ~ dsex | m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
lm.fit.mrps51 <- lm.sdf(mrps51 ~ dsex + m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
lm.fit.mrps22 <- lm.sdf(mrps22 ~ dsex + m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
# compare coefficient tables
expect_equal(mvrlm.fit$coefmat$mrps51, lm.fit.mrps51$coefmat)
expect_equal(mvrlm.fit$coefmat$mrps22, lm.fit.mrps22$coefmat)
# compare residuals
expect_equal(as.vector(mvrlm.fit$residuals[, 1]), as.vector(lm.fit.mrps51$residuals))
expect_equal(as.vector(mvrlm.fit$residuals[, 2]), as.vector(lm.fit.mrps22$residuals))
# compare residual covariance
mrps51 <- lm.fit.mrps51$residuals
mrps22 <- lm.fit.mrps22$residuals
ee <- cbind(mrps51, mrps22)
lmResidCov <- t(ee) %*% ee
expect_equivalent(mvrlm.fit$residCov, lmResidCov)
})
context("Multivariate Regression: 2 DVs (1 PV 1 non PV)")
test_that("mvrlm.sdf results align with lm.sdf", {
mvrlm.fit <- mvrlm.sdf(composite | mrps22 ~ dsex | m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
lm.fit.comp <- lm.sdf(composite ~ dsex + m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE, verbose = FALSE)
lm.fit.mrps22 <- lm.sdf(mrps22 ~ dsex + m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE, verbose = FALSE)
# compare coefficient tables
expect_equal(mvrlm.fit$coefmat$composite, lm.fit.comp$coefmat)
expect_equal(mvrlm.fit$coefmat$mrps22, lm.fit.mrps22$coefmat)
# compare residuals
dimnames(lm.fit.comp$PV.residuals)[[2]] <- c("mrpcm1", "mrpcm2", "mrpcm3", "mrpcm4", "mrpcm5")
mvrResid <- as.matrix(mvrlm.fit$residPV[[1]])
lmResid <- lm.fit.comp$PV.residuals
expect_equal(mvrResid, lmResid)
mvrResid <- as.vector(mvrlm.fit$residPV[[2]][, 1])
lmResid <- as.vector(lm.fit.mrps22$residuals)
expect_equal(mvrResid, lmResid)
# compare residual covariance
composite <- rowMeans(lm.fit.comp$PV.residuals)
mrps22 <- lm.fit.mrps22$residuals
ee <- cbind(composite, mrps22)
lmResidCov <- t(ee) %*% ee
expect_equivalent(mvrlm.fit$residCov, lmResidCov)
})
context("Multivariate Regression: 2 DVs (both PVs)")
test_that("mvrlm.sdf results align with lm.sdf", {
# compare coefficient tables
mvrlm.fit <- mvrlm.sdf(algebra | geometry ~ dsex | m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
lm.fit.alg <- lm.sdf(algebra ~ dsex + m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
lm.fit.geom <- lm.sdf(geometry ~ dsex + m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
expect_equal(mvrlm.fit$coefmat$algebra, lm.fit.alg$coefmat)
expect_equal(mvrlm.fit$coefmat$geometry, lm.fit.geom$coefmat)
# compare residuals
attr(lm.fit.alg$PV.residuals, "dimnames") <- NULL
attr(mvrlm.fit$residPV[[1]], "dimnames") <- NULL
expect_equal(mvrlm.fit$residPV[[1]], lm.fit.alg$PV.residuals)
attr(lm.fit.geom$PV.residuals, "dimnames") <- NULL
attr(mvrlm.fit$residPV[[2]], "dimnames") <- NULL
expect_equal(mvrlm.fit$residPV[[2]], lm.fit.geom$PV.residuals)
# compare residual covariance
algebra <- rowMeans(lm.fit.alg$PV.residuals)
geometry <- rowMeans(lm.fit.geom$PV.residuals)
ee <- cbind(algebra, geometry)
lmResidCov <- t(ee) %*% ee
expect_equivalent(mvrlm.fit$residCov, lmResidCov)
})
context("Multivariate Regression: 3 DVs (all PVs)")
test_that("mvrlm.sdf results align with lm.sdf", {
mvrlm.fit <- mvrlm.sdf(algebra | geometry | measurement ~ dsex | m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
### compare coefficients
lm.fit.alg <- lm.sdf(algebra ~ dsex + m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
lm.fit.geom <- lm.sdf(geometry ~ dsex + m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
lm.fit.meas <- lm.sdf(measurement ~ dsex + m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
expect_equal(mvrlm.fit$coefmat$algebra, lm.fit.alg$coefmat)
expect_equal(mvrlm.fit$coefmat$geometry, lm.fit.geom$coefmat)
expect_equal(mvrlm.fit$coefmat$measurement, lm.fit.meas$coefmat)
# compare residuals
attr(lm.fit.alg$PV.residuals, "dimnames") <- NULL
attr(mvrlm.fit$residPV[[1]], "dimnames") <- NULL
expect_equal(mvrlm.fit$residPV[[1]], lm.fit.alg$PV.residuals)
attr(lm.fit.geom$PV.residuals, "dimnames") <- NULL
attr(mvrlm.fit$residPV[[2]], "dimnames") <- NULL
expect_equal(mvrlm.fit$residPV[[2]], lm.fit.geom$PV.residuals)
attr(lm.fit.meas$PV.residuals, "dimnames") <- NULL
attr(mvrlm.fit$residPV[[3]], "dimnames") <- NULL
expect_equal(mvrlm.fit$residPV[[3]], lm.fit.meas$PV.residuals)
# compare residual covariance
algebra <- rowMeans(lm.fit.alg$PV.residuals)
geometry <- rowMeans(lm.fit.geom$PV.residuals)
measurement <- rowMeans(lm.fit.meas$PV.residuals)
ee <- cbind(algebra, geometry, measurement)
lmResidCov <- t(ee) %*% ee
expect_equivalent(mvrlm.fit$residCov, lmResidCov)
})
# regression tests
context("mvrlm.sdf Regression tests")
test_that("mvrlm.sdf results remain the same", {
skip_on_cran()
source("REF-13-MVRLM.R")
# no pv case
mvrlm.fit <- mvrlm.sdf(mrps51 | mrps22 ~ dsex | m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
expect_equal(mvrlm.fit$coefmat, mvrlm_coef_ref1)
expect_equal(mvrlm.fit$residPV, NULL)
expect_equal(mvrlm.fit$residCov, mvrlm_resid_cov1)
# mixed DV case
mvrlm.fit <- mvrlm.sdf(composite | mrps22 ~ dsex | m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
expect_equal(mvrlm.fit$coefmat, mvrlm_coef_ref2)
expect_equal(lapply(mvrlm.fit$residPV, head), mvrlm_residpv2)
expect_equal(mvrlm.fit$residCov, mvrlm_resid_cov2)
# 2 PV case
mvrlm.fit <- mvrlm.sdf(algebra | geometry ~ dsex | m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
expect_equal(mvrlm.fit$coefmat, mvrlm_coef_ref3)
expect_equal(lapply(mvrlm.fit$residPV, head), mvrlm_residpv3)
expect_equal(mvrlm.fit$residCov, mvrlm_resid_cov3)
# 3 PV case
mvrlm.fit <- mvrlm.sdf(algebra | geometry | measurement ~ dsex | m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
expect_equal(mvrlm.fit$coefmat, mvrlm_coef_ref4)
expect_equal(lapply(mvrlm.fit$residPV, head), mvrlm_residpv4)
expect_equal(mvrlm.fit$residCov, mvrlm_resid_cov4)
})
context("Wald Test Coefficient restrictions")
test_that("wald test works", {
options(digits = 2)
mvr <- mvrlm.sdf(algebra | geometry ~ dsex | m072801, data = sdf, jrrIMax = 5, returnVarEstInputs = TRUE)
hypothesis <- c("geometry_dsexFemale = 0", "algebra_dsexFemale = 0")
test1 <- linearHypothesis.edsurveyMvrlm(mvr, hypothesis = hypothesis, test = "F")
test2 <- linearHypothesis.edsurveyMvrlm(mvr, hypothesis = hypothesis, test = "Chisq")
waldtestF <- c(
"Linear hypothesis test",
"",
"Hypothesis:",
"geometry_dsexFemale = 0",
"algebra_dsexFemale = 0",
"",
"Model 1: restricted model",
"Model 2: algebra | geometry ~ dsex | m072801",
"",
" Res.Df Df F Pr(>F) ",
"1 3307 ",
"2 3305 2 4.81 0.0082 **",
"---",
"Signif. codes: ",
"0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"
)
waldtestChisq <- c(
"Linear hypothesis test",
"",
"Hypothesis:",
"geometry_dsexFemale = 0",
"algebra_dsexFemale = 0",
"",
"Model 1: restricted model",
"Model 2: algebra | geometry ~ dsex | m072801",
"",
" Res.Df Df Chisq Pr(>Chisq) ",
"1 3307 ",
"2 3305 2 9.62 0.0081 **",
"---", "Signif. codes: ",
"0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"
)
# Regression tests for wald test output
expect_equal(capture.output(test1)[1:12], waldtestF[1:12])
expect_equal(capture.output(test2)[1:12], waldtestChisq[1:12])
})
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.