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 \(\Sigma_{e}\), then having a local scope parameter \(\Sigma_{e}\) for each regime represents a non-identifiable case, i.e. infinitely many different combinations of values for the global and local scope \(\Sigma_{e}\) parameters would fit equally well to the data. To prevent this, it is possible to specify that the local parameter \(\Sigma_{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\times k\) matrix parameter \(\mathbf{\Sigma}\) of a BM or an OU process should always be a symmetric positive-definite matrix; the selection strength matrix \(\mathbf{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 \(\mathcal{G}_{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 \(\vec{\omega}\), \(\mathbf{\Phi}\) and \(\mathbf{V}\) and the model likelihood.
By default, the parameters named Sigma_x
, Sigmae_x
and Sigmaj_x
are always transformed using the formula \(\mathbf{\Sigma} = \mathbf{\Sigma}_{x}\mathbf{\Sigma}_{x}^T\) (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 \(\mathbf{S}\) has the classes "_CholeskyFactor" and "_Transformable“, it will be transformed as \(\mathbf{S}^{T}\mathbf{S}\). Note that this is analogical but not equivalent to the transformation \(\mathbf{S}\mathbf{S}^T\), 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 \(\mathbf{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\times k\)-dimensional matrix \(\mathbf{H}_{S}\) as follows:
- the upper triangle of \(\mathbf{H}_{S}\), excluding the diagonal, specifies \(k(k-1)/2\) rotation angles for Givens rotations (Golub and Van Loan 2013) to obtain a \(k\times k\)-dimensional orthoganal matrix \(\mathbf{Q}\);
- the lower triangle of \(\mathbf{H}_{S}\) including the diagonal defines a \(k\times k\) triangular matrix \(\mathbf{T}\).
Then, \(\mathbf{H}\) is obtained from \(\mathbf{Q}\) and \(\mathbf{T}\) as follows (Clavel, Escarguel, and Merceron 2015): \[
\mathbf{H}=\mathbf{Q}\mathbf{T}^{T}\mathbf{Q}^{T}
\] The matrix \(\mathbf{H}\) calculated in this way has all of its eigenvalues equal to the elements on the diagonal of \(\mathbf{H}_{S}\) (Clavel, Escarguel, and Merceron 2015). Thus, by restricting the diagonal of \(\mathbf{H}_{S}\) to non-negative or strictly positive values, we guarantee that \(\mathbf{H}\) will have all of its eigenvalues non-negative or strictly positive (hence, guaranteeing semi- or strict positive definiteness). Further, if \(\mathbf{H}_{S}\) is diagonal, then so is the matrix \(\mathbf{H}\); if \(\mathbf{H}_{S}\) is upper triangular, then \(\mathbf{T}\) is diagonal and the resulting matrix \(\mathbf{H}\) is symmetric. Finally, if \(\mathbf{H}_{S}\) is neither diagonal nor triangular, then the resulting matrix \(\mathbf{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\)
|
\(\Sigma_{x}\)
|
\(\Sigma_{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 \(\Sigma_{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 \(\Sigma_{x}\) and \(\Sigma_{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
## 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
## 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
## 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\)
|
\(\Sigma_{e,x}\)
|
\(\Sigma_{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}\)
|