context("Model specification")
test_that("Basic model building blocks", {
m <- lvm(y[m]~x)
covariance(m) <- y~z
testthat::expect_true(covariance(m)$rel["z","y"]==1)
testthat::expect_true(regression(m)$rel["x","y"]==1)
## Children parent,nodes
testthat::expect_true(children(m,~x)=="y")
testthat::expect_true(parents(m,~y)=="x")
testthat::expect_equivalent(parents(m),vars(m))
testthat::expect_equivalent(children(m),vars(m))
## Remove association
cancel(m) <- y~z+x
testthat::expect_true(covariance(m)$rel["z","y"]==0)
testthat::expect_true(regression(m)$rel["x","y"]==0)
## Remove variable
kill(m) <- ~x
testthat::expect_equivalent(vars(m),c("y","z"))
testthat::expect_true(intercept(m)["y"]=="m")
m <- lvm(c(y1,y2,y3)~x)
d <- sim(m,50)
e <- estimate(m,d)
## Equivalence
##equivalence(e,silent=TRUE)
## formula
f <- formula(m,all=TRUE)
testthat::expect_true(length(f)==length(vars(m)))
testthat::expect_true(all(unlist(lapply(f,function(x) inherits(x,"formula")))))
## Parametrization
m <- lvm(c(y1,y2,y3)~u)
latent(m) <- ~u
m2 <- fixsome(m,param=NULL)
testthat::expect_true(all(is.na(regression(m2)$values)))
m2 <- fixsome(m,param="relative")
testthat::expect_true(regression(m2)$values["u","y1"]==1)
testthat::expect_true(intercept(m2)[["y1"]]==0)
m2 <- fixsome(m,param="hybrid")
testthat::expect_true(regression(m2)$values["u","y1"]==1)
testthat::expect_true(intercept(m2)[["u"]]==0)
m2 <- fixsome(m,param="absolute")
testthat::expect_true(all(is.na(regression(m2)$values)))
testthat::expect_true(intercept(m2)[["u"]]==0)
testthat::expect_true(covariance(m2)$values["u","u"]==1)
## Merge
m1 <- lvm(c(y1,y2,y3)~1*u1[m1:v1])
latent(m1) <- ~u1
m2 <- lvm(c(y1,y2,y3)~2*u2[m2:v2])
latent(m2) <- ~u2
mm <- m1%++%m2
testthat::expect_true(covariance(mm)$labels["u1","u1"]=="v1")
testthat::expect_true(intercept(mm)[["u2"]]=="m2")
## LISREL
mm <- fixsome(mm)
L <- lisrel(mm,rep(1,length(coef(mm))))
testthat::expect_equivalent(L$B,matrix(0,2,2))
testthat::expect_equivalent(L$Theta,diag(3))
testthat::expect_equivalent(L$Psi,diag(2))
})
test_that("Linear constraints", {
m <- lvm(c(y[m:v]~b*x))
constrain(m,b~a) <- base::identity
d <- sim(m,100,seed=1)
l <- lm(y~x, d)
e <- estimate(m, d)
err <- sum((coef(l)-coef(e)[c('y','a')])^2)
testthat::expect_true(err<1e-12)
})
if (requireNamespace("Rgraphviz",quietly = TRUE))
test_that("Graph attributes", {
m <- lvm(y~x)
suppressMessages(g1 <- graph::updateGraph(plot(m,noplot=TRUE)))
m1 <- graph2lvm(g1)
testthat::expect_equivalent(m1$M, m$M)
col <- "blue"
v <- "y"
g1 <- lava::addattr(g1, "fill", v, col)
testthat::expect_true(col == graph::nodeRenderInfo(g1)$fill[[v]])
nodecolor(m, v) <- "blue"
g2 <- Graph(m, add=TRUE)
testthat::expect_true(inherits(g2, "graph"))
testthat::expect_true(col == graph::nodeRenderInfo(g2)$fill[[v]])
testthat::expect_true(addattr(g2, "fill")[[v]] == "blue")
graph::graphRenderInfo(g2)$rankdir <- "LR"
Graph(m) <- g2
testthat::expect_true(graph::graphRenderInfo(Graph(m))$rankdir=="LR")
## Labels
labels(m) <- c(y = "Y")
addattr(Graph(m, add=TRUE), "label")
testthat::expect_true(addattr(finalize(m), "label")[["y"]]=="Y")
labels(g2) <- c(y = "Y")
testthat::expect_true(!is.null(graph::nodeRenderInfo(g2)$label["y"]))
edgelabels(m, y~x) <- "a"
testthat::expect_true(!is.null(edgelabels(finalize(m))))
})
test_that("Categorical variables", {
m <- lvm()
categorical(m,K=3,p=c(0.1,0.5)) <- ~x
d1 <- simulate(m,10,seed=1)
categorical(m,K=3) <- ~x
d2 <- simulate(m,10,seed=1)
testthat::expect_false(identical(d1,d2))
regression(m,additive=FALSE,y~x) <- c(0,-5,5)
d <- simulate(m,100,seed=1)
l <- lm(y~factor(x),d)
testthat::expect_true(sign(coef(l))[2]==-sign(coef(l))[3])
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.