Parameter S3 class
Parameters can be numeric vectors, matrices or cubes
(i.e. 3-dimensional arrays) with a “class” attribute specifying a set of
S3 classes. The S3 classes of a parameter control the parameter’s:
Main type
The main type specifies the mathematical character of the parameter,
i.e. as what does the parameter enter in the equations defining the
model. The main type S3 class is mandatory and can be one of the
following: “ScalarParameter”, “VectorParameter” and “MatrixParameter”.
Here’s an example:
OU <- PCM("OU", k = 3, regimes = c("a", "b"))
class(OU$X0)
## [1] "VectorParameter" "_Global" "numeric"
## [1] "MatrixParameter"
## [1] "VectorParameter" "matrix"
## [1] "MatrixParameter" "_UpperTriangularWithDiagonal"
## [3] "_WithNonNegativeDiagonal"
## [1] "MatrixParameter" "_UpperTriangularWithDiagonal"
## [3] "_WithNonNegativeDiagonal"
Scope
Every parameter can be global, i.e. having the same value for each
regime in a model, or local, i.e. having a different value for each
regime. A parameter is assumed to be local scope, unless its class
attribute includes the class “_Global”. For instance, in the above code
example, the root trait value X0
has a global scope.
Another example would be an OU model with a global selection strength,
drift and non-heritable variance matrices:
OU2 <- PCM(
paste0(
"OU_",
"_Global_X0_",
"_Global_H_",
"_Theta_",
"_UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigma_x_",
"_UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"),
k = 3, regimes = c("a", "b"))
class(OU2$X0)
## [1] "VectorParameter" "_Global" "numeric"
## [1] "MatrixParameter" "_Global" "matrix"
## [1] "VectorParameter" "matrix"
## [1] "MatrixParameter" "_UpperTriangularWithDiagonal"
## [3] "_WithNonNegativeDiagonal" "_Global"
## [5] "matrix"
## [1] "MatrixParameter" "_UpperTriangularWithDiagonal"
## [3] "_WithNonNegativeDiagonal" "_Global"
## [5] "matrix"
Omission
In some cases, a parameter has to be omitted, i.e. not present in a
model. For example, if a mixed Gaussian model has a global parameter
Σe, then
having a local scope parameter Σe for each
regime represents a non-identifiable case, i.e. infinitely many
different combinations of values for the global and local scope Σe parameters
would fit equally well to the data. To prevent this, it is possible to
specify that the local parameter Σe should be
omitted from each regime. This is done by including “_Omitted” in the
class attribute of the parameter. Here is an example:
BMOU <- MixedGaussian(
k = 3,
modelTypes = c(
"BM__Omitted_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x",
"OU__Omitted_X0__H__Theta__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"),
mapping = c(a = 1, b = 2))
class(BMOU$X0)
## [1] "VectorParameter" "_Global" "numeric"
## [1] "MatrixParameter" "_UpperTriangularWithDiagonal"
## [3] "_WithNonNegativeDiagonal" "_Global"
## [5] "matrix"
# There are no X0 and Sigmae_x parameters for the regimes because they are omitted:
names(BMOU$a)
## [1] "Sigma_x"
## [1] "H" "Theta" "Sigma_x"
Constancy
In some cases, a parameter will have a known and fixed value.
Constant classes include: “_Fixed”, “_Ones”, “_Zeros”, “_Identity”. For
example, in a mixed Gaussian model, we can specify a fixed value for the
global parameter Sigmae_x
:
BMOU2 <- MixedGaussian(
k = 3,
modelTypes = c(
"BM__Omitted_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x",
"OU__Omitted_X0__H__Theta__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"),
mapping = c(a = 1, b = 2),
Sigmae_x = structure(0,
class = c("MatrixParameter",
"_UpperTriangularWithDiagonal", "_WithNonNegativeDiagonal", "_Fixed", "_Global"),
description =
"A fixed upper triangular factor of the non-phylogenetic variance-covariance"))
BMOU2$Sigmae_x[] <- rbind(
c(0.5, 0.02, 0),
c(0, 0.2, 0.01),
c(0, 0, 0.1))
class(BMOU2$X0)
## [1] "VectorParameter" "_Global" "numeric"
## [1] "MatrixParameter" "_UpperTriangularWithDiagonal"
## [3] "_WithNonNegativeDiagonal" "_Fixed"
## [5] "_Global" "matrix"
# There are no X0 and Sigmae_x parameters for the regimes because they are omitted:
names(BMOU2$a)
## [1] "Sigma_x"
## [1] "H" "Theta" "Sigma_x"
# Notice that the BMOU model created in the previous example has more parameters than BMOU2:
PCMParamCount(BMOU)
## [1] 33
## [1] 27
Transformation
Due to constraints arising from their mathematical formulation or to
facilitate the biological interpretation, the parameters of Gaussian
models are often subject to restrictions. For example, the k × k matrix parameter
Σ of a BM or an OU
process should always be a symmetric positive-definite matrix; the
selection strength matrix H of an OU process is
usually restricted to be at least semi-positive-definite (but not
necessarily symmetric), in order to limit the interpretation to cases of
stabilizing selection rather than (usually unidentifiable) cases of
repulsion. Such parameter restrictions can pose a challenge, during a
parameter inference procedure, since many of the proposed parameter
values may violate some of the imposed restrictions. For most of the 𝒢LInv
models known to us, the common restrictions can be handled using an
appropriate parametrization with a transformation applied to the
parameters before calculating the functions ω⃗, Φ and V and the model
likelihood.
By default, the parameters named Sigma_x
,
Sigmae_x
and Sigmaj_x
are always transformed
using the formula Σ = ΣxΣxT
(see also the runtim option “PCMBase.Transpose.Sigma_x” in
?PCMOptions
for changing the above default behavior).
For other parameters, to specify that a parameter should be
transformed, its class and the class of the encompassing PCM object(s)
must include “_Transformable”. A further S3 class for the parameter
specifies the type of transformation. Once a parameter is transformed
via a call to the generic function PCMApplyTransformation
,
the “_Transformable” class is removed, i.e. the returned parameter is
not transformable. For convenience, the name of the transformed
parameter is kept the same as the name of the untransformed one.
Currently the following transformations are defined:
_CholeskyFactor
If a matrix parameter S has the classes
“_CholeskyFactor” and “_Transformable”, it will be transformed as STS.
Note that this is analogical but not equivalent to the transformation
SST,
which is the default for the parameters Sigma_x
(see
above). The transformed parameter will have classes
“_SemiPositiveDefinite” and “_Transformed”:
M <- structure(
rbind(c(0.2, 0.5, 1.2),
c(0, 0.1, 0.02),
c(0, 0, 1.02)),
class = c("MatrixParameter", "_CholeskyFactor", "_Transformable", "_Global"))
Mtransf <- PCMApplyTransformation(M)
Mtransf
## [,1] [,2] [,3]
## [1,] 0.04 0.10 0.24
## [2,] 0.10 0.26 0.60
## [3,] 0.24 0.60 2.48
## attr(,"class")
## [1] "MatrixParameter" "_Global" "_SemiPositiveDefinite"
## [4] "_Transformed" "matrix"
_Schur
If both, the positive-definiteness and the symmetry of a matrix
parameter are optional, e.g. the matrix H of an OU process, such
restrictions can be imposed through a Schur decomposition as shown
previously by (Clavel, Escarguel, and Merceron
2015). Specifically, we define a k × k-dimensional matrix
HS
as follows:
- the upper triangle of HS,
excluding the diagonal, specifies k(k − 1)/2 rotation angles
for Givens rotations (Golub and Van Loan
2013) to obtain a k × k-dimensional
orthoganal matrix Q;
- the lower triangle of HS
including the diagonal defines a k × k triangular matrix
T.
Then, H is obtained
from Q and T as follows (Clavel, Escarguel, and Merceron 2015): H = QTTQT
The matrix H
calculated in this way has all of its eigenvalues equal to the elements
on the diagonal of HS (Clavel, Escarguel, and Merceron 2015). Thus, by
restricting the diagonal of HS to
non-negative or strictly positive values, we guarantee that H will have all of its
eigenvalues non-negative or strictly positive (hence, guaranteeing semi-
or strict positive definiteness). Further, if HS is
diagonal, then so is the matrix H; if HS is
upper triangular, then T is diagonal and the
resulting matrix H is
symmetric. Finally, if HS is
neither diagonal nor triangular, then the resulting matrix H is asymmetric. Here is an
example:
# Diagonal
Hs1 <- structure(
rbind(c(0.2, 0, 0),
c(0, 0, 0),
c(0, 0, 1.02)),
class = c("MatrixParameter", "_Schur", "_Transformable", "_Global"))
PCMApplyTransformation(Hs1)
## [,1] [,2] [,3]
## [1,] 0.2 0 0
## [2,] 0.0 0 0
## [3,] 0.0 0 1
## attr(,"class")
## [1] "MatrixParameter" "_Global" "_Transformed" "matrix"
# Symmetric positive definite with eigenvalues 1.02, 0.1 and 0.02
Hs2 <- structure(
rbind(c(1.02, 0.5, 1.2),
c(0, 0.1, 0.02),
c(0, 0, 0.02)),
class = c("MatrixParameter", "_Schur", "_Transformable", "_Global"))
PCMApplyTransformation(Hs2)
## [,1] [,2] [,3]
## [1,] 0.348 -0.089 -0.45
## [2,] -0.089 0.132 0.16
## [3,] -0.453 0.159 0.66
## attr(,"class")
## [1] "MatrixParameter" "_Global" "_Transformed" "matrix"
eigen(PCMApplyTransformation(Hs2))$values
## [1] 1.02 0.10 0.02
# Asymmetric positive definite with eigenvalues 1.02, 0.1 and 0.02
Hs3 <- structure(
rbind(c(1.02, 0.5, 1.2),
c(0.2, 0.1, 0.02),
c(0.8, 0.1, 0.02)),
class = c("MatrixParameter", "_Schur", "_Transformable", "_Global"))
PCMApplyTransformation(Hs3)
## [,1] [,2] [,3]
## [1,] 0.75 -0.10 -0.16
## [2,] -0.15 0.11 0.12
## [3,] -0.99 0.17 0.28
## attr(,"class")
## [1] "MatrixParameter" "_Global" "_Transformed" "matrix"
eigen(PCMApplyTransformation(Hs3))$values
## [1] 1.02 0.10 0.02
Other restrictions
We may need to specify other restrictions for a parameter. For
example, by definition the matrix parameters Sigma_x
and
Sigmae_x
are required to be upper triangular with
non-negative diagonal elements (Mitov et al.
2019). Restriction classes include: ’_AllEqual’, ’_NonNegative’,
’_WithNonNegativeDiagonal’, ’_LowerTriangular’,
’_LowerTriangularWithDiagonal’, ’_UpperTriangular’,
’_UpperTriangularWithDiagonal’, ’_Symmetric’ and ’_ScalarDiagonal’.
Generating model parametrizations
It can be helpful to examine the structure of a 3-regime bivariate BM
model:
modelObject <- PCM("BM", k = 2L, regimes = c("a", "b", "c"))
# let's assign some values to the model parameters:
vec <- seq_len(PCMParamCount(modelObject))
PCMParamLoadOrStore(modelObject, vec, offset = 0, load=TRUE)
## [1] 20
## List of 3
## $ X0 : 'VectorParameter' num [1:2] 1 2
## ..- attr(*, "description")= chr "trait values at the root"
## $ Sigma_x : 'MatrixParameter' num [1:2, 1:2, 1:3] 3 0 4 5 6 0 7 8 9 0 ...
## ..- attr(*, "dimnames")=List of 3
## .. ..$ : NULL
## .. ..$ : NULL
## .. ..$ : chr [1:3] "a" "b" "c"
## ..- attr(*, "description")= chr "factor of the unit-time variance rate"
## $ Sigmae_x: 'MatrixParameter' num [1:2, 1:2, 1:3] 12 0 13 14 15 0 16 17 18 0 ...
## ..- attr(*, "dimnames")=List of 3
## .. ..$ : NULL
## .. ..$ : NULL
## .. ..$ : chr [1:3] "a" "b" "c"
## ..- attr(*, "description")= chr "factor of the non-heritable variance or the variance of the measurement error"
## - attr(*, "class")= chr [1:3] "BM" "GaussianPCM" "PCM"
## - attr(*, "k")= int 2
## - attr(*, "regimes")= chr [1:3] "a" "b" "c"
## - attr(*, "spec")=List of 3
## ..$ X0 : 'VectorParameter' num 0
## .. ..- attr(*, "description")= chr "trait values at the root"
## ..$ Sigma_x : 'MatrixParameter' num 0
## .. ..- attr(*, "description")= chr "factor of the unit-time variance rate"
## ..$ Sigmae_x: 'MatrixParameter' num 0
## .. ..- attr(*, "description")= chr "factor of the non-heritable variance or the variance of the measurement error"
## ..- attr(*, "class")= chr [1:3] "BM" "GaussianPCM" "PCM"
## ..- attr(*, "k")= int 2
## ..- attr(*, "regimes")= chr [1:3] "a" "b" "c"
## - attr(*, "p")= int 20
## - attr(*, "modelTypes")= chr "BM"
## - attr(*, "mapping")= int 1
Now let’s print the model parameters as a table:
options(digits = 1)
print(
PCMTable(modelObject, addTransformed = FALSE, removeUntransformed = FALSE),
xtable = TRUE, type='html')
regime
|
X0
|
Σx
|
Σe, x
|
:global:
|
$\begin{bmatrix}{} 1.0 \\ 2.0
\\ \end{bmatrix}$
|
|
|
a
|
|
$\begin{bmatrix}{} 3.0 & 4.0 \\ 0.0
& 5.0 \\ \end{bmatrix}$
|
$\begin{bmatrix}{} 12.0 & 13.0 \\ 0.0
& 14.0 \\ \end{bmatrix}$
|
b
|
|
$\begin{bmatrix}{} 6.0 & 7.0 \\ 0.0
& 8.0 \\ \end{bmatrix}$
|
$\begin{bmatrix}{} 15.0 & 16.0 \\ 0.0
& 17.0 \\ \end{bmatrix}$
|
c
|
|
$\begin{bmatrix}{} 9.0 & 10.0 \\ 0.0
& 11.0 \\ \end{bmatrix}$
|
$\begin{bmatrix}{} 18.0 & 19.0 \\ 0.0
& 20.0 \\ \end{bmatrix}$
|
We notice that the parameter Σe, x
is local for each regime in the model. In the context of a biological
application, it can be more appropriate to assume that this parameter is
shared by all regimes. Moreover, in many cases, e.g. when testing
hypotheses about the presence of correlation between the traits, it can
be necessary to assume that the matrices Σx and Σe, x
are diagonal, meaning that the model assumes trait independence.
Biologically, that would mean that any correlation between the traits
originates from genetic (not environmental) factors. To specify such a
scenario, first, we look at the list of available BM model types.
PCMModels(parentClass = "BM")
## [1] "BM"
## [2] "BM__Global_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [3] "BM__Global_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [4] "BM__Global_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
## [5] "BM__Global_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [6] "BM__Global_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [7] "BM__Global_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
## [8] "BM__Global_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [9] "BM__Global_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [10] "BM__Global_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
## [11] "BM__Omitted_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [12] "BM__Omitted_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [13] "BM__Omitted_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
## [14] "BM__Omitted_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [15] "BM__Omitted_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [16] "BM__Omitted_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
## [17] "BM__Omitted_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [18] "BM__Omitted_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [19] "BM__Omitted_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
We notice that the above list does not contain a BM model type with a
global diagonal parameter Sigmae_x
. This means that the S3
methods for such a model parametrization have not yet been generated and
loaded. The function PCMListParameterizations
returns a
named list, where each named element is a list of the possible S3 class
assignments for the corresponding parameter. So, let’s see what are the
available S3 classes for the parameter Sigmae_x
of a BM
model:
PCMListParameterizations(structure(0.0, class="BM"))$Sigmae_x
## [[1]]
## [1] "MatrixParameter" "_UpperTriangularWithDiagonal"
## [3] "_WithNonNegativeDiagonal"
##
## [[2]]
## [1] "MatrixParameter" "_Diagonal"
## [3] "_WithNonNegativeDiagonal"
##
## [[3]]
## [1] "MatrixParameter" "_ScalarDiagonal"
## [3] "_WithNonNegativeDiagonal"
##
## [[4]]
## [1] "MatrixParameter" "_UpperTriangularWithDiagonal"
## [3] "_WithNonNegativeDiagonal" "_Global"
##
## [[5]]
## [1] "MatrixParameter" "_Diagonal"
## [3] "_WithNonNegativeDiagonal" "_Global"
##
## [[6]]
## [1] "MatrixParameter" "_ScalarDiagonal"
## [3] "_WithNonNegativeDiagonal" "_Global"
##
## [[7]]
## [1] "MatrixParameter" "_Omitted"
We notice that, for Sigmae_x
, the 5th element above
contains “_Diagonal” and “_Global” in the list of S3-classes. We proceed
to generate all BM parametrizations with this S3-class assignment for
the parameter Sigmae_x
.
# 1. Filter the list of parametrizations to avoid generating too many S3 methods.
# (note that we could do the same type of filtering for the other parameters).
listParameterizationsBM <- PCMListParameterizations(structure(0.0, class="BM"))
listParameterizationsBM$Sigmae_x <- listParameterizationsBM$Sigmae_x[5]
# 2. Generate a table of parametrizations for this list:
dtParameterizations <- PCMTableParameterizations(
structure(0.0, class="BM"), listParameterizations = listParameterizationsBM)
print(dtParameterizations)
## X0
## <list>
## 1: VectorParameter,_Global
## 2: VectorParameter,_Fixed,_Global
## 3: VectorParameter,_AllEqual,_Global
## 4: VectorParameter,_Omitted
## 5: VectorParameter,_Global
## 6: VectorParameter,_Fixed,_Global
## 7: VectorParameter,_AllEqual,_Global
## 8: VectorParameter,_Omitted
## 9: VectorParameter,_Global
## 10: VectorParameter,_Fixed,_Global
## 11: VectorParameter,_AllEqual,_Global
## 12: VectorParameter,_Omitted
## Sigma_x
## <list>
## 1: MatrixParameter,_UpperTriangularWithDiagonal,_WithNonNegativeDiagonal
## 2: MatrixParameter,_UpperTriangularWithDiagonal,_WithNonNegativeDiagonal
## 3: MatrixParameter,_UpperTriangularWithDiagonal,_WithNonNegativeDiagonal
## 4: MatrixParameter,_UpperTriangularWithDiagonal,_WithNonNegativeDiagonal
## 5: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal
## 6: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal
## 7: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal
## 8: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal
## 9: MatrixParameter,_ScalarDiagonal,_WithNonNegativeDiagonal
## 10: MatrixParameter,_ScalarDiagonal,_WithNonNegativeDiagonal
## 11: MatrixParameter,_ScalarDiagonal,_WithNonNegativeDiagonal
## 12: MatrixParameter,_ScalarDiagonal,_WithNonNegativeDiagonal
## Sigmae_x
## <list>
## 1: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
## 2: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
## 3: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
## 4: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
## 5: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
## 6: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
## 7: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
## 8: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
## 9: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
## 10: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
## 11: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
## 12: MatrixParameter,_Diagonal,_WithNonNegativeDiagonal,_Global
# 3. Generate the parametrizations (optionally, we could select a subset of the
# rows in the data.table)
PCMGenerateParameterizations(structure(0.0, class="BM"),
tableParameterizations = dtParameterizations[])
Now the list of BM-models contains the generated model types with a
diagonal Sigma_x
and a global diagonal
Sigmae_x
:
## [1] "BM"
## [2] "BM__AllEqual_Global_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [3] "BM__AllEqual_Global_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [4] "BM__AllEqual_Global_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [5] "BM__Fixed_Global_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [6] "BM__Fixed_Global_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [7] "BM__Fixed_Global_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [8] "BM__Global_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [9] "BM__Global_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [10] "BM__Global_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [11] "BM__Global_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
## [12] "BM__Global_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [13] "BM__Global_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [14] "BM__Global_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [15] "BM__Global_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
## [16] "BM__Global_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [17] "BM__Global_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [18] "BM__Global_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [19] "BM__Global_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
## [20] "BM__Omitted_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [21] "BM__Omitted_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [22] "BM__Omitted_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [23] "BM__Omitted_X0__Diagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
## [24] "BM__Omitted_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [25] "BM__Omitted_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [26] "BM__Omitted_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [27] "BM__Omitted_X0__ScalarDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
## [28] "BM__Omitted_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [29] "BM__Omitted_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__Omitted_Sigmae_x"
## [30] "BM__Omitted_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Global_Sigmae_x"
## [31] "BM__Omitted_X0__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigma_x__UpperTriangularWithDiagonal_WithNonNegativeDiagonal_Sigmae_x"
## [32] "BM_drift"
BMModelGlobalSigmae <- paste0(
"BM" ,
"__Global_X0",
"__Diagonal_WithNonNegativeDiagonal_Sigma_x",
"__Diagonal_WithNonNegativeDiagonal_Global_Sigmae_x")
modelObject2 <- PCM(BMModelGlobalSigmae, k = 2, regimes = c("a", "b", "c"))
vec <- seq_len(PCMParamCount(modelObject2))
PCMParamLoadOrStore(modelObject2, vec, offset = 0, load=TRUE)
[1] 10
print(
PCMTable(modelObject2, addTransformed = FALSE, removeUntransformed = FALSE),
xtable = TRUE, type='html')
regime
|
X0
|
Σe, x
|
Σx
|
:global:
|
$\begin{bmatrix}{} 1.0 \\ 2.0
\\ \end{bmatrix}$
|
$\begin{bmatrix}{} 9.0 & 0.0 \\ 0.0
& 10.0 \\ \end{bmatrix}$
|
|
a
|
|
|
$\begin{bmatrix}{} 3.0 & 0.0 \\ 0.0
& 4.0 \\ \end{bmatrix}$
|
b
|
|
|
$\begin{bmatrix}{} 5.0 & 0.0 \\ 0.0
& 6.0 \\ \end{bmatrix}$
|
c
|
|
|
$\begin{bmatrix}{} 7.0 & 0.0 \\ 0.0
& 8.0 \\ \end{bmatrix}$
|