where
$R={\sigma}_{R}^{2}I$, $I$ is the $n\times n$ identity matrix and $G$ is a diagonal matrix. It is assumed that the random variables, $Z$, can be subdivided into $g\le q$ groups with each group being identically distributed with expectation zero and variance ${\sigma}_{i}^{2}$. The diagonal elements of matrix $G$, therefore, take one of the values $\{{\sigma}_{i}^{2}:i=1,2,\dots ,g\}$, depending on which group the associated random variable belongs to.
The model, therefore, contains three sets of unknowns: the fixed effects $\beta $, the random effects $\nu $ and a vector of $g+1$ variance components $\gamma $, where
$\gamma =\{{\sigma}_{1}^{2},{\sigma}_{2}^{2},\dots ,{\sigma}_{g-1}^{2},{\sigma}_{g}^{2},{\sigma}_{R}^{2}\}$.
Case weights can be incorporated into the model by replacing $X$ and $Z$ with ${W}_{c}^{1/2}X$ and ${W}_{c}^{1/2}Z$ respectively where ${W}_{c}$ is a diagonal weight matrix.
The design matrices, $X$ and $Z$, are constructed from an $n\times {m}_{d}$ data matrix, $D$, a description of the fixed independent variables, ${\mathcal{M}}_{f}$, and a description of the random independent variables, ${\mathcal{M}}_{r}$. See Section 11 for further details.
4References
Rao C R (1972) Estimation of variance and covariance components in a linear model J. Am. Stat. Assoc.67 112–115
Wolfinger R, Tobias R and Sall J (1994) Computing Gaussian likelihoods and their derivatives for general linear mixed models SIAM Sci. Statist. Comput.15 1294–1310
5Arguments
1: $\mathbf{hlmm}$ – Type (c_ptr)Input/Output
On entry: must be set to c_null_ptr or, alternatively, an existing G22 handle may be supplied in which case g02jff will destroy the supplied G22 handle as if g22zaf had been called.
On exit: holds a G22 handle to the internal data structure containing a description of the model. You must not change the G22 handle other than through the routines in Chapters G02 or G22.
2: $\mathbf{hddesc}$ – Type (c_ptr)Input
On entry: a G22 handle to the internal data structure containing a description of the data matrix, $D$, as returned in hddesc by g22ybf.
3: $\mathbf{hfixed}$ – Type (c_ptr)Input
On entry: a G22 handle to the internal data structure containing a description of the fixed part of the model ${\mathcal{M}}_{f}$ as returned in hform by g22yaf.
If hfixed is c_null_ptr then the model is assumed to not have a fixed part.
4: $\mathbf{nrndm}$ – IntegerInput
On entry: the number of elements used to describe the random part of the model.
Constraint:
${\mathbf{nrndm}}\ge 0$.
5: $\mathbf{hrndm}\left({\mathbf{nrndm}}\right)$ – Type (c_ptr)Input
On entry: a series of G22 handles to internal data structures containing a description of the random part of the model ${\mathcal{M}}_{r}$ as returned in hform by g22yaf.
6: $\mathbf{weight}$ – Character(1)Input
On entry: indicates if weights are to be used.
${\mathbf{weight}}=\text{'U'}$
No weights are used.
${\mathbf{weight}}=\text{'W'}$
Case weights are used and must be supplied in array wt.
Constraint:
${\mathbf{weight}}=\text{'U'}$ or $\text{'W'}$.
7: $\mathbf{n}$ – IntegerInput
On entry: $n$, the number of observations in the dataset, $D$.
Constraint:
$1\le {\mathbf{n}}\le {n}_{d}$, where ${n}_{d}$ is the value supplied in nobs when hddesc was created.
8: $\mathbf{y}\left({\mathbf{n}}\right)$ – Real (Kind=nag_wp) arrayInput
On entry: $y$, the vector of observations on the dependent variable.
Constraint:
${\mathbf{y}}\left(i\right)\ne 0.0$ for at least one $i=1,2,\dots ,n$.
9: $\mathbf{wt}\left(*\right)$ – Real (Kind=nag_wp) arrayInput
Note: the dimension of the array wt
must be at least
${\mathbf{n}}$ if ${\mathbf{weight}}=\text{'W'}$.
On entry: if ${\mathbf{weight}}=\text{'W'}$, wt must contain the diagonal elements of the weight matrix ${W}_{c}$.
If ${\mathbf{wt}}\left(i\right)=0.0$, the $i$th observation is not included in the model and the effective number of observations is the number of observations with nonzero weights.
If ${\mathbf{weight}}=\text{'U'}$, wt is not referenced and the effective number of observations is $n$.
Constraint:
if ${\mathbf{weight}}=\text{'W'}$, ${\mathbf{wt}}\left(\mathit{i}\right)\ge 0.0$, for $\mathit{i}=1,2,\dots ,n$.
10: $\mathbf{dat}({\mathbf{lddat}},{\mathbf{sddat}})$ – Real (Kind=nag_wp) arrayInput
On entry: the data matrix, $D$. By default,
${D}_{ij}$, the $\mathit{i}$th value for the $\mathit{j}$th variable, for $\mathit{i}=1,2,\dots ,n$ and $\mathit{j}=1,2,\dots ,{m}_{d}$, should be supplied in ${\mathbf{dat}}(i,j)$.
If the optional parameter Storage Order, described in g22ybf, is set to $\mathrm{VAROBS}$, ${D}_{ij}$ should be supplied in ${\mathbf{dat}}(j,i)$.
If either ${y}_{i}$, ${w}_{i}$ or ${D}_{ij}$, for a variable $j$ used in the model, is NaN (Not A Number) then that value is treated as missing and the whole observation is excluded from the analysis.
11: $\mathbf{lddat}$ – IntegerInput
On entry: the first dimension of the array dat as declared in the (sub)program from which g02jff is called.
Constraints:
if the optional parameter Storage Order, described in g22ybf, is set to $\mathrm{VAROBS}$, ${\mathbf{lddat}}\ge {m}_{d}$;
otherwise ${\mathbf{lddat}}\ge n$.
12: $\mathbf{sddat}$ – IntegerInput
On entry: the second dimension of the array dat as declared in the (sub)program from which g02jff is called.
Constraints:
if the optional parameter Storage Order, described in g22ybf, is set to $\mathrm{VAROBS}$, ${\mathbf{sddat}}\ge n$;
otherwise ${\mathbf{sddat}}\ge {m}_{d}$.
13: $\mathbf{fnlsv}$ – IntegerOutput
On exit: the number of levels for the overall subject variable in ${\mathcal{M}}_{f}$. If there is no overall subject variable, ${\mathbf{fnlsv}}=1$.
14: $\mathbf{nff}$ – IntegerOutput
On exit: the number of fixed effects estimated in each of the fnlsv subject blocks. The number of columns, $p$, in the design matrix $X$ is given by $p={\mathbf{nff}}\times {\mathbf{fnlsv}}$.
15: $\mathbf{rnlsv}$ – IntegerOutput
On exit: the number of levels for the overall subject variable in ${\mathcal{M}}_{r}$. If there is no overall subject variable, ${\mathbf{rnlsv}}=1$.
16: $\mathbf{nrf}$ – IntegerOutput
On exit: the number of random effects estimated in each of the rnlsv subject blocks. The number of columns, $q$, in the design matrix $Z$ is given by $q={\mathbf{nrf}}\times {\mathbf{rnlsv}}$.
17: $\mathbf{nvpr}$ – IntegerOutput
On exit: $g$, the number of variance components being estimated (excluding the overall variance, ${\sigma}_{R}^{2}$). This is defined by the number of terms in the random part of the model, ${\mathcal{M}}_{r}$ (see Section 11 for details).
18: $\mathbf{rcomm}\left({\mathbf{lrcomm}}\right)$ – Real (Kind=nag_wp) arrayCommunication Array
On exit: a communication array as required by the routines g02jgforg02jhf.
19: $\mathbf{lrcomm}$ – IntegerInput
On entry: the dimension of the array rcomm as declared in the (sub)program from which g02jff is called.
On exit: a communication array as required by the routines g02jgforg02jhf.
If licomm or lrcomm are too small and ${\mathbf{licomm}}\ge 2$, then ${\mathbf{ifail}}={\mathbf{192}}$ and ${\mathbf{icomm}}\left(1\right)$ holds the minimum required value for licomm and ${\mathbf{icomm}}\left(2\right)$ holds the minimum required value for lrcomm.
21: $\mathbf{licomm}$ – IntegerInput
On entry: the dimension of the array icomm as declared in the (sub)program from which g02jff is called.
22: $\mathbf{ifail}$ – IntegerInput/Output
On entry: ifail must be set to $0$, $\mathrm{-1}$ or $1$ to set behaviour on detection of an error; these values have no effect when no error is detected.
A value of $0$ causes the printing of an error message and program execution will be halted; otherwise program execution continues. A value of $\mathrm{-1}$ means that an error message is printed while a value of $1$ means that it is not.
If halting is not appropriate, the value $\mathrm{-1}$ or $1$ is recommended. If message printing is undesirable, then the value $1$ is recommended. Otherwise, the value $0$ is recommended. When the value $-\mathbf{1}$ or $\mathbf{1}$ is used it is essential to test the value of ifail on exit.
On exit: ${\mathbf{ifail}}={\mathbf{0}}$ unless the routine detects an error or a warning has been flagged (see Section 6).
6Error Indicators and Warnings
If on entry ${\mathbf{ifail}}=0$ or $\mathrm{-1}$, explanatory error messages are output on the current error message unit (as defined by x04aaf).
Errors or warnings detected by the routine:
${\mathbf{ifail}}=11$
On entry, hlmm is not c_null_ptr or a recognised G22 handle.
hfixed is not a G22 handle as generated by g22yaf.
${\mathbf{ifail}}=33$
A variable name used when creating hfixed is not present in hddesc. Variable name: $\u27e8\mathit{\text{value}}\u27e9$.
${\mathbf{ifail}}=34$
The fixed part of the model contains categorical variables, but no intercept or main effects terms have been requested.
${\mathbf{ifail}}=41$
On entry, ${\mathbf{nrndm}}=\u27e8\mathit{\text{value}}\u27e9$. Constraint: ${\mathbf{nrndm}}\ge 0$.
${\mathbf{ifail}}=51$
$i=\u27e8\mathit{\text{value}}\u27e9$. ${\mathbf{hrndm}}\left(i\right)$ has not been initialized or is corrupt.
${\mathbf{ifail}}=52$
$i=\u27e8\mathit{\text{value}}\u27e9$. ${\mathbf{hrndm}}\left(i\right)$ is not a G22 handle as generated by g22yaf.
${\mathbf{ifail}}=53$
No model has been specified.
${\mathbf{ifail}}=54$
A variable name used when creating hrndm is not present in hddesc. Variable name: $\u27e8\mathit{\text{value}}\u27e9$.
${\mathbf{ifail}}=61$
On entry, weight had an illegal value.
Constraint: ${\mathbf{weight}}=\text{'U'}$ or $\text{'W'}$.
${\mathbf{ifail}}=71$
On entry, ${\mathbf{n}}=\u27e8\mathit{\text{value}}\u27e9$.
Constraint: ${\mathbf{n}}\ge 1$.
${\mathbf{ifail}}=72$
On entry, ${\mathbf{n}}=\u27e8\mathit{\text{value}}\u27e9$ and ${n}_{d}=\u27e8\mathit{\text{value}}\u27e9$. Constraint: ${\mathbf{n}}\le {n}_{d}$, where ${n}_{d}$ is the value supplied in nobs when hddesc was created.
${\mathbf{ifail}}=73$
On entry, no observations due to zero weights or missing values.
${\mathbf{ifail}}=91$
On entry, $i=\u27e8\mathit{\text{value}}\u27e9$ and ${\mathbf{wt}}\left(i\right)=\u27e8\mathit{\text{value}}\u27e9$. Constraint: ${\mathbf{wt}}\left(i\right)\ge 0.0$.
${\mathbf{ifail}}=101$
On entry, column $j$ of the data matrix, $D$, is not consistent with information supplied in hddesc, $j=\u27e8\mathit{\text{value}}\u27e9$.
${\mathbf{ifail}}=102$
Column $j$ of the data matrix, $D$, required rounding more than expected when being treated as a categorical variable, $j=\u27e8\mathit{\text{value}}\u27e9$.
All output is returned using the rounded value(s).
${\mathbf{ifail}}=111$
On entry, $n=\u27e8\mathit{\text{value}}\u27e9$ and ${\mathbf{lddat}}=\u27e8\mathit{\text{value}}\u27e9$. Constraint: ${\mathbf{lddat}}\ge n$.
${\mathbf{ifail}}=112$
On entry, ${m}_{d}=\u27e8\mathit{\text{value}}\u27e9$ and ${\mathbf{lddat}}=\u27e8\mathit{\text{value}}\u27e9$. Constraint: ${\mathbf{lddat}}\ge {m}_{d}$.
${\mathbf{ifail}}=121$
On entry, ${m}_{d}=\u27e8\mathit{\text{value}}\u27e9$ and ${\mathbf{sddat}}=\u27e8\mathit{\text{value}}\u27e9$. Constraint: ${\mathbf{sddat}}\ge {m}_{d}$.
${\mathbf{ifail}}=122$
On entry, $n=\u27e8\mathit{\text{value}}\u27e9$ and ${\mathbf{sddat}}=\u27e8\mathit{\text{value}}\u27e9$. Constraint: ${\mathbf{sddat}}\ge n$.
${\mathbf{ifail}}=191$
On entry, ${\mathbf{licomm}}=\u27e8\mathit{\text{value}}\u27e9$ and ${\mathbf{lrcomm}}=\u27e8\mathit{\text{value}}\u27e9$. Constraint: ${\mathbf{licomm}}\ge \u27e8\mathit{\text{value}}\u27e9$ and ${\mathbf{lrcomm}}\ge \u27e8\mathit{\text{value}}\u27e9$. The minimum array sizes for licomm and lrcomm are held in the first two elements of icomm repectively.
${\mathbf{ifail}}=192$
On entry, ${\mathbf{licomm}}=\u27e8\mathit{\text{value}}\u27e9$ and ${\mathbf{lrcomm}}=\u27e8\mathit{\text{value}}\u27e9$. Constraint: ${\mathbf{licomm}}\ge \u27e8\mathit{\text{value}}\u27e9$ and ${\mathbf{lrcomm}}\ge \u27e8\mathit{\text{value}}\u27e9$. icomm is not large enough to hold the minimum array sizes.
${\mathbf{ifail}}=-99$
An unexpected error has been triggered by this routine. Please
contact NAG.
See Section 7 in the Introduction to the NAG Library FL Interface for further information.
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library FL Interface for further information.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.
See Section 9 in the Introduction to the NAG Library FL Interface for further information.
7Accuracy
Not applicable.
8Parallelism and Performance
Background information to multithreading can be found in the Multithreading documentation.
g02jff makes calls to BLAS and/or LAPACK routines, which may be threaded within the vendor library used by this implementation. Consult the documentation for the vendor library for further information.
Please consult the X06 Chapter Introduction for information on how to control and interrogate the OpenMP environment used within this routine. Please also consult the Users' Note for your implementation for any additional implementation-specific information.
9Further Comments
None.
10Example
This example fits a random effects model with three random submodels and two fixed effects to a simulated dataset with $90$ observations and $12$ variables. The model is fit using maximum likelihood (ML). Standard labels for the parameter estimates and variance components are obtained from g22ydf. See g02jhf for an example of how to construct custom labels.
The fixed effects design matrix, $X$, is constructed from the data matrix $D$ and ${\mathcal{M}}_{f}$, as encoded in hfixed. Details of the construction are described in Section 3 in g22yaf and Section 3 in g22ycf.
It is possible to store the cross-product matrix, ${X}^{\mathrm{T}}X$ in a block diagonal form if ${\mathcal{M}}_{f}$ contains an overall subject effect, ${S}_{f}$. In this context ${S}_{f}$ is defined as a main effect or interaction term that is contained in all other terms. For example, if ${\mathcal{M}}_{f}$ simplifies to ${V}_{1}.{V}_{4}+{V}_{1}.{V}_{2}.{V}_{4}+{V}_{1}.{V}_{2}.{V}_{3}.{V}_{4}$, then ${S}_{f}={V}_{1}.{V}_{4}$. If it is advantageous to do so, g02jff will make use of this block diagonal structure and fnlsv will be set to the number of levels in ${S}_{f}$, otherwise ${\mathbf{fnlsv}}=1$.
11.2Random Effects Design Matrix, $\mathit{Z}$
The random effects design matrix, $Z$, is constructed from the data matrix $D$ and ${\mathcal{M}}_{r}$ which is made up of nrndm submodels, ${\mathcal{M}}_{ri}$, where ${\mathcal{M}}_{ri}$ is encoded in ${\mathbf{hrndm}}\left(i\right)$. Each submodel is made up of two parts, the random effects and a subject term. The random effects are specified as described in Section 3 in g22yaf and the subject term is specified via the g22yaf optional parameter Subject. The design matrix $Z$ is constructed as described in Section 3 in g22ycf using a model constructed from the nrndm submodels. As an example, if there were $3$ submodels:
-1+V07+V08+V09 / SUBJECT = V13
-1+V05+V06 / SUBJECT = V11.V12
V03+V04 / SUBJECT = V10.V11.V12
then $Z$ would be constructed as if g22ycf was called using the model
It should be noted that unless specified otherwise (by the inclusion of -1) a submodel will contain an intercept. This results in a term corresponding to the subject term being included in the combined model (V10.V11.V12 in this instance).
Each term in the expanded model corresponds to a variance component, so in this case, $g=8$.
When constructing $Z$ all contrast information specified when the submodels are constructed in calls to g22yaf is ignored and dummy variables are used throughout.
It is possible to store the cross-product matrix, ${Z}^{\mathrm{T}}Z$ in a block diagonal form if ${\mathcal{M}}_{r}$ contains an overall subject effect, ${S}_{r}$. In this context ${S}_{r}$ is defined as a main effect or interaction term that is contained in all other subject terms. For example, if the random effects model is constructed from $3$ submodels with subject terms ${V}_{1}.{V}_{4}$, ${V}_{1}.{V}_{2}.{V}_{4}$ and ${V}_{1}.{V}_{2}.{V}_{3}.{V}_{4}$, then ${S}_{r}={V}_{1}.{V}_{4}$ and rnlsv will be set to the number of levels in ${S}_{r}$, otherwise ${\mathbf{rnlsv}}=1$.
12Optional Parameters
As well as the optional parameters common to all G22 handles described in g22zmfandg22znf, a number of additional optional parameters can be specified for a G22 handle holding the description of a linear mixed model, as returned by g02jff in hlmm.
Each writeable optional parameter has an associated default value; to set any of them to a non-default value, use g22zmf. The value of any optional parameter can be queried using g22znf.
Most of the optional parameters described in this section are related to the behaviour g02jhf when fitting the model. These descriptions should, therefore, be read in conjunction with the documentation for that routine.
The remainder of this section can be skipped if you wish to use the default values for all optional parameters.
The following is a list of the optional parameters available. A full description of each optional parameter is provided in Section 12.1.
Optional parameter List enables printing of each optional parameter specification as it is supplied. NoList suppresses this printing.
Major Iteration Limit
$i$
Default $\text{}=\text{special}$
The number of major iterations.
When ${\mathbf{Solver}}=\mathrm{E04LB}$, g02jhf passes Major Iteration Limit to the solver as
maxcal.
In this case, the default value used is $1000$.
When ${\mathbf{Solver}}=\mathrm{E04UC}$, g02jhf passes Major Iteration Limit to the solver as
Major Iteration Limit.
In this case, the default value used is $\mathrm{max}\phantom{\rule{0.125em}{0ex}}(50,3\times g)$, where $g$ is the number of variance components being estimated (excluding the overall variance, ${\sigma}_{R}^{2}$).
Major Print Level
$i$
Default $\text{}=\text{special}$
The frequency that monitoring information is output to Unit Number.
When ${\mathbf{Solver}}=\mathrm{E04LB}$, g02jhf passes Major Print Level to the solver as
iprint.
In this case, the default value used is $-1$ and hence no monitoring information will be output.
When ${\mathbf{Solver}}=\mathrm{E04UC}$, g02jhf passes Major Print Level to the solver as
Major Print Level.
In this case, the default value used is $0$ and hence no monitoring information will be output.
Maximum Number of Threads
$i$
Default $\text{}=\text{special}$
Controls the maximum number of threads used by g02jhf in a multithreaded library. By default, the maximum number of available threads are used.
In a library that is not multithreaded, this option has no effect.
When ${\mathbf{Solver}}=\mathrm{E04LB}$, this option is ignored.
When ${\mathbf{Solver}}=\mathrm{E04UC}$, g02jhf passes Minor Iteration Limit to the solver as
Minor Iteration Limit.
In this case, the default value used is $\mathrm{max}\phantom{\rule{0.125em}{0ex}}(50,3\times g)$, where $g$ is the number of variance components being estimated (excluding the overall variance, ${\sigma}_{R}^{2}$).
Minor Print Level
$i$
Default $\text{}=0$
The frequency that additional monitoring information is output to Unit Number.
When ${\mathbf{Solver}}=\mathrm{E04LB}$, this option is ignored.
When ${\mathbf{Solver}}=\mathrm{E04UC}$, g02jhf passes Minor Print Level to the solver as
Minor Print Level.
The default value of $0$ means that no additional monitoring information will be output.
If ${\mathbf{Maximum\; Number\; of\; Threads}}>0$ then Parallelisation Strategy
controls how g02jhf is parallelised in a multithreaded library.
${\mathbf{Parallelisation\; Strategy}}=1$
g02jhf will attempt to parallelise operations involving $Z$, even if ${\mathbf{rnlsv}}=1$.
${\mathbf{Parallelisation\; Strategy}}=2$
g02jhf will only attempt to parallelise operations involving $Z$, if ${\mathbf{rnlsv}}>1$.
By default, ${\mathbf{Parallelisation\; Strategy}}=1$, however, for some models / datasets, this may be slower than using ${\mathbf{Parallelisation\; Strategy}}=2$ when ${\mathbf{rnlsv}}=1$.
In a library that is not multithreaded, this option has no effect.
Constraint:
${\mathbf{Parallelisation\; Strategy}}=1$ or $2$.
When ${\mathbf{Solver}}=\mathrm{E04UC}$, this option is ignored.
Solver
$a$
Default $\text{}=\text{special}$
Controls which solver g02jhf will use when fitting the model. By default, ${\mathbf{Solver}}=\mathrm{E04LB}$ is used for small problems and ${\mathbf{Solver}}=\mathrm{E04UC}$, otherwise.
If ${\mathbf{Solver}}=\mathrm{E04LB}$, then the solver used is the one implemented in e04lbf and if ${\mathbf{Solver}}=\mathrm{E04UC}$, then the solver used is the one implemented in e04ucf/e04uca.
Constraint:
${\mathbf{Solver}}=\mathrm{E04LB}$ or $\mathrm{E04UC}$.
Sweep Tolerance
$r$
Default $\text{}=\text{special}$
The sweep tolerance used by g02jhf when performing the sweep operation Wolfinger et al. (1994). The default value used is ${\mathbf{Sweep\; Tolerance}}=\mathrm{max}\phantom{\rule{0.125em}{0ex}}(\epsilon ,\epsilon \times \left({\displaystyle \underset{i}{\mathrm{max}}}\phantom{\rule{0.25em}{0ex}}{\left({Z}^{\mathrm{T}}\right)}_{ii}\right))$, where $\epsilon =\sqrt{\mathit{machineprecision}}$.
Unit Number
$i$
Default
$=\text{advisory message unit number}$
The monitoring unit number to which g02jhf will send any monitoring information.