NEWS.md
Before you could specify matrices as:
Now you can specify per row as:
This form is now the default when converting from a matrix to a lotri expression. In addition if the matrix is large enough (by default a 5x5 matrix), these would be named when changing them to an expression:
m <- lotri({
a ~ c(a=1)
b ~ c(a=0.5, b=1)
c ~ c(a=0.5, b=0.5, c=1)
d ~ c(a=0.5, b=0.5, c=0.5, d=1)
e ~ c(a=0.5, b=0.5, c=0.5, d=1,
e=1)
})
This way changing to an R parsed expression will be rendered in a more human readable format.
You can change the deparsing options that are used by default with lotri
with options(lotri.plusNames=TRUE)
which prefers the a+b+c
syntax when deparsing. Otherwise, the line format is used by default. The dimension number before naming the values in the line-format can be controlled with options(lotri.nameEst=2)
or some other dimension.
New option of cov
added which check for matrix suitability for covariance matrix. When cov=TRUE
, off-diagonal elements in covariance matrices may no longer be nonzero if the diagonal value is zero (rxode2#481). This will also check tht the matrix is non-positive definite on the non-diagonal terms. cov
can also be a function to allow correction of the matrix to a positive definite matrix automatically.
New option of rcm
; When enabled, and lotriIsBlockMat()
is not true, lotri()
will permute the matrix to try to get a banded matrix using the Reverse Cuthill McKee algorithm.
Change internals for lotri
so that new rxode2
is no longer required to be binary linked to lotri
.
Add new function rcm()
which permutes the matrix to get a band matrix (if possible). This uses the Reverse Reverse Cuthill McKee (RCM) algorithm.
Moved nmNearPD()
to this package and renamed to lotriNearPD()
. In addition to moving, this function will now retain the dimension names.
New exported function lotriAsExpression()
which has more fine control than as.expression()
and will work without converting the matrix to a lotri form. This by default uses the new line form, but can be changed back to the option(lotri.plusNames=TRUE)
. Also be default it will name each element in a matrix when the dimension is above 5x5
. You can change that number by option(lotri.nameEst=10)
to increase it to be named above 10x10
. If you do not like the naming you can also disable it with option(lotri.nameEst=TRUE)
, or if you always want it on you can use `option(lotri.nameEst=FALSE)
lotri(n1+n2~omega)
Can convert lotri objects to data-frames similar to the internal data frame used in nlmixr()
; These can then be converted back with as.lotri()
Added the ability to add estimates to a lotri object. These estimates are an attached data.frame
to the original lotri matrix. You can extract them or drop them with the function lotriEst()
Allow specifying fixed components in lotri()
matrices.
Add cov
, cor
, sd
, var
, and chol
options for matrix specification. The final matrix will always be the covariance matrix
Add function lotriMatInv()
which takes a symmetric block matrix and converts it into a list of matrices. An sort of inverse operation of lotriMat()
Add error for lotri(~c(40))
Added ability to flag fixed
and unfixed
components in a matrix. Currently lotri
only supports one type.
For the lotriFix
objects, ie those created with population types of estimates and covariance estimates, allow them to be converted to an equivalent expression with as.expression()
for the lotri object and lotriDataFrameToLotriExpression()
for the data.frame
Added lotriIsBlockMat()
to check to see if a matrix is in a block diagonal matrix form.
call.=FALSE
or equivalent.rchk
lotriMat
to mix named and unnamed matrices; When mixed, an unnamed matrix will be returned.$lower
and $upper
gives default values even if it wasn’t specified.Matrix
import and added lotriMat
to create banded matrices (faster than Matrix
for now included repeated matrices with list(matrix, rep)
).upper
and lower
bounds are specified