## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
library(lotri)

## -----------------------------------------------------------------------------
iov <- lotri({
  iov.cl1 + iov.v1 ~ c(0.1,
                       0.01, 0.2)
  iov.cl2 + iov.v2 ~ same()
  iov.cl3 + iov.v3 ~ same()
})

iov

## -----------------------------------------------------------------------------
dim(iov)

## -----------------------------------------------------------------------------
lotri({
  a + b ~ c(1,
            0, 1)
  c1 + d1 ~ same()
})

## -----------------------------------------------------------------------------
lotri({
  eta.ka ~ 0.6
  iov.cl1 + iov.v1 ~ c(0.1,
                       0.01, 0.2) | occ
  iov.cl2 + iov.v2 ~ same() | occ
})

## ----error = TRUE-------------------------------------------------------------
try({
lotri({
  a + b ~ c(1,
            0.1, 2)
  c1 + d1 ~ same()
  prior(c1) ~ dnorm(0, 1)
})
})

## ----error = TRUE-------------------------------------------------------------
try({
lotri(a + b ~ c(1, 0.1, 2), c1 + d1 ~ same())
})

## -----------------------------------------------------------------------------
df <- as.data.frame(iov)
df[, c("neta1", "neta2", "name", "est", "condition")]

## -----------------------------------------------------------------------------
lotriBaseCondition(df$condition)

lotriIsSame(df$condition)

## -----------------------------------------------------------------------------
lotriSameMap(df)

## -----------------------------------------------------------------------------
broken <- lotriSameBreak(df, "iov.v2")
broken$condition

## -----------------------------------------------------------------------------
identical(as.data.frame(as.lotri(df)), df)

identical(as.data.frame(eval(as.expression(iov))), df)

as.expression(iov)

## -----------------------------------------------------------------------------
attr(lotriMat(lotriMatInv(iov)), "lotriSame")

## -----------------------------------------------------------------------------
nested <- lotri(lotri({
  a + b ~ c(1,
            0.1, 2)
  c1 + d1 ~ same()
}) | occ(same = 3L))

dim(lotriMat(nested, format = "ETA[%d]", start = 1L))

