g02ja fits a linear mixed effects regression model using restricted maximum likelihood (REML).
Syntax
C# |
---|
public static void g02ja( int n, int ncol, double[,] dat, int[] levels, int yvid, int cwid, int nfv, int[] fvid, int fint, int nrv, int[] rvid, int nvpr, int[] vpr, int rint, int svid, double[] gamma, out int nff, out int nrf, out int df, out double reml, double[] b, double[] se, int maxit, double tol, out int warn, out int ifail ) |
Visual Basic |
---|
Public Shared Sub g02ja ( _ n As Integer, _ ncol As Integer, _ dat As Double(,), _ levels As Integer(), _ yvid As Integer, _ cwid As Integer, _ nfv As Integer, _ fvid As Integer(), _ fint As Integer, _ nrv As Integer, _ rvid As Integer(), _ nvpr As Integer, _ vpr As Integer(), _ rint As Integer, _ svid As Integer, _ gamma As Double(), _ <OutAttribute> ByRef nff As Integer, _ <OutAttribute> ByRef nrf As Integer, _ <OutAttribute> ByRef df As Integer, _ <OutAttribute> ByRef reml As Double, _ b As Double(), _ se As Double(), _ maxit As Integer, _ tol As Double, _ <OutAttribute> ByRef warn As Integer, _ <OutAttribute> ByRef ifail As Integer _ ) |
Visual C++ |
---|
public: static void g02ja( int n, int ncol, array<double,2>^ dat, array<int>^ levels, int yvid, int cwid, int nfv, array<int>^ fvid, int fint, int nrv, array<int>^ rvid, int nvpr, array<int>^ vpr, int rint, int svid, array<double>^ gamma, [OutAttribute] int% nff, [OutAttribute] int% nrf, [OutAttribute] int% df, [OutAttribute] double% reml, array<double>^ b, array<double>^ se, int maxit, double tol, [OutAttribute] int% warn, [OutAttribute] int% ifail ) |
F# |
---|
static member g02ja : n : int * ncol : int * dat : float[,] * levels : int[] * yvid : int * cwid : int * nfv : int * fvid : int[] * fint : int * nrv : int * rvid : int[] * nvpr : int * vpr : int[] * rint : int * svid : int * gamma : float[] * nff : int byref * nrf : int byref * df : int byref * reml : float byref * b : float[] * se : float[] * maxit : int * tol : float * warn : int byref * ifail : int byref -> unit |
Parameters
- n
- Type: System..::..Int32On entry: , the number of observations.Constraint: .
- ncol
- Type: System..::..Int32On entry: the number of columns in the data matrix, dat.Constraint: .
- dat
- Type: array<System..::..Double,2>[,](,)[,][,]An array of size [dim1, dim2]Note: dim1 must satisfy the constraint:Note: the second dimension of the array dat must be at least if , and at least otherwise.On entry: array containing all of the data. For the th observation:
- holds the dependent variable, ;
- if , holds the case weights;
- if , holds the subject variable.
The remaining columns hold the values of the independent variables.Constraints:- if , ;
- if , .
- levels
- Type: array<System..::..Int32>[]()[][]An array of size [ncol]On entry: contains the number of levels associated with the th variable of the data matrix dat. If this variable is continuous or binary (i.e., only takes the values zero or one) then should be ; if the variable is discrete then is the number of levels associated with it and is assumed to take the values to , for .Constraint: , for .
- yvid
- Type: System..::..Int32On entry: the column of dat holding the dependent, , variable.Constraint: .
- cwid
- Type: System..::..Int32On entry: the column of dat holding the case weights.If , no weights are used.Constraint: .
- nfv
- Type: System..::..Int32On entry: the number of independent variables in the model which are to be treated as being fixed.Constraint: .
- fvid
- Type: array<System..::..Int32>[]()[][]An array of size [nfv]On entry: the columns of the data matrix dat holding the fixed independent variables with holding the column number corresponding to the th fixed variable.Constraint: , for .
- fint
- Type: System..::..Int32On entry: flag indicating whether a fixed intercept is included ().Constraint: or .
- nrv
- Type: System..::..Int32On entry: the number of independent variables in the model which are to be treated as being random.Constraints:
- ;
- .
- rvid
- Type: array<System..::..Int32>[]()[][]An array of size [nrv]On entry: the columns of the data matrix holding the random independent variables with holding the column number corresponding to the th random variable.Constraint: , for .
- nvpr
- Type: System..::..Int32On entry: if and , nvpr is the number of variance components being , (), else .If , is not referenced.Constraint: if , .
- vpr
- Type: array<System..::..Int32>[]()[][]An array of size [nrv]On entry: holds a flag indicating the variance of the th random variable. The variance of the th random variable is , where if and and otherwise. Random variables with the same value of are assumed to be taken from the same distribution.Constraint: , for .
- rint
- Type: System..::..Int32On entry: flag indicating whether a random intercept is included ().If , rint is not referenced.Constraint: or .
- svid
- Type: System..::..Int32On entry: the column of dat holding the subject variable.If , no subject variable is used.Specifying a subject variable is equivalent to specifying the interaction between that variable and all of the random-effects. Letting the notation denote the interaction between variables and , fitting a model with , random-effects and subject variable is equivalent to fitting a model with random-effects and no subject variable. If the model is equivalent to fitting and no subject variable.Constraint: .
- gamma
- Type: array<System..::..Double>[]()[][]An array of size []On entry: holds the initial values of the variance components, , with the initial value for , for . If and , , else .If , the remaining elements of gamma are ignored and the initial values for the variance components are estimated from the data using MIVQUE0.On exit: , for , holds the final estimate of and holds the final estimate for .Constraint: , for .
- nff
- Type: System..::..Int32%On exit: the number of fixed effects estimated (i.e., the number of columns, , in the design matrix ).
- nrf
- Type: System..::..Int32%On exit: the number of random effects estimated (i.e., the number of columns, , in the design matrix ).
- df
- Type: System..::..Int32%On exit: the degrees of freedom.
- reml
- Type: System..::..Double%On exit: where is the log of the restricted maximum likelihood calculated at , the estimated variance components returned in gamma.
- b
- Type: array<System..::..Double>[]()[][]An array of size [dim1]Note: dim1 must satisfy the constraint: where if and otherwiseOn exit: the parameter estimates, , with the first nff elements of b containing the fixed effect parameter estimates, and the next nrf elements of b containing the random effect parameter estimates, .Fixed effectsIf , contains the estimate of the fixed intercept. Let denote the number of levels associated with the th fixed variable, that is . Define
- if , else if , ;
- , .
Then for :- if , contains the parameter estimate for the th level of the th fixed variable, for ;
- if , contains the parameter estimate for the th fixed variable.
Random effectsRedefining to denote the number of levels associated with the th random variable, that is . Define- if , else if , ;
, .
Then for :- if ,
- if , contains the parameter estimate for the th level of the th random variable, for ;
- if , contains the parameter estimate for the th random variable;
- if ,
- let denote the number of levels associated with the subject variable, that is ;
- if , contains the parameter estimate for the interaction between the th level of the subject variable and the th level of the th random variable, for and ;
- if , contains the parameter estimate for the interaction between the th level of the subject variable and the th random variable, for ;
- if , contains the estimate of the random intercept.
- se
- Type: array<System..::..Double>[]()[][]An array of size [dim1]Note: dim1 must satisfy the constraint: where if and otherwiseOn exit: the standard errors of the parameter estimates given in b.
- maxit
- Type: System..::..Int32On entry: the maximum number of iterations.If , the default value of is used.If , the parameter estimates and corresponding standard errors are calculated based on the value of supplied in gamma.
- tol
- Type: System..::..DoubleOn entry: the tolerance used to assess convergence.If , the default value of is used, where is the machine precision.
- warn
- Type: System..::..Int32%On exit: is set to if a variance component was estimated to be a negative value during the fitting process. Otherwise warn is set to .If , the negative estimate is set to zero and the estimation process allowed to continue.
- ifail
- Type: System..::..Int32%On exit: unless the method detects an error or a warning has been flagged (see [Error Indicators and Warnings]).
Description
g02ja fits a model of the form:
where
- is a vector of observations on the dependent variable,
- is a known by design matrix for the fixed independent variables,
- is a vector of length of unknown fixed effects,
- is a known by design matrix for the random independent variables,
- is a vector of length of unknown random effects,
- is a vector of length of unknown random errors.
Both and are assumed to have a Gaussian distribution with expectation zero and
where , is the identity matrix and is a diagonal matrix. It is assumed that the random variables, , can be subdivided into groups with each group being identically distributed with expectations zero and variance . The diagonal elements of matrix therefore take one of the values , depending on which group the associated random variable belongs to.
The model therefore contains three sets of unknowns, the fixed effects, , the random effects and a vector of variance components, , where . Rather than working directly with , g02ja uses an iterative process to estimate . Due to the iterative nature of the estimation a set of initial values, , for is required. g02ja allows these initial values either to be supplied by you or calculated from the data using the minimum variance quadratic unbiased estimators (MIVQUE0) suggested by Rao (1972).
g02ja fits the model using a quasi-Newton algorithm to maximize the restricted log-likelihood function:
where
Once the final estimates for have been obtained, the value of is given by:
Case weights, , can be incorporated into the model by replacing and with and respectively, for a diagonal weight matrix .
The log-likelihood, , is calculated using the sweep algorithm detailed in Wolfinger et al. (1994).
References
Goodnight J H (1979) A tutorial on the SWEEP operator The American Statistician 33(3) 149–158
Harville D A (1977) Maximum likelihood approaches to variance component estimation and to related problems JASA 72 320–340
Rao C R (1972) Estimation of variance and covariance components in a linear model J. Am. Stat. Assoc. 67 112–115
Stroup W W (1989) Predictable functions and prediction space in the mixed model procedure Applications of Mixed Models in Agriculture and Related Disciplines Southern Cooperative Series Bulletin No. 343 39–48
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
Error Indicators and Warnings
Errors or warnings detected by the method:
Some error messages may refer to parameters that are dropped from this interface
(LDDAT, LB) In these
cases, an error in another parameter has usually caused an incorrect value to be inferred.
On entry, , or , or or , or or , or or , or and , or or or , or or , or and , or or ,
On entry, , for at least one , or , or , for at least one , or , or , for at least one , or or , for at least one , or at least one discrete variable in array dat has a value less than or greater than that specified in levels, or , for at least one , and .
- Degrees of freedom . The number of parameters exceed the effective number of observations.
- The method failed to converge to the specified tolerance in maxit iterations. See [Further Comments] for advice.
Accuracy
The accuracy of the results can be adjusted through the use of the tol parameter.
Parallelism and Performance
None.
Further Comments
Wherever possible any block structure present in the design matrix should be modelled through a subject variable, specified via svid, rather than being explicitly entered into dat.
g02ja uses an iterative process to fit the specified model and for some problems this process may fail to converge (see ). If the method fails to converge then the maximum number of iterations (see maxit) or tolerance (see tol) may require increasing; try a different starting estimate in gamma. Alternatively, the model can be fit using maximum likelihood (see g02jb) or using the noniterative MIVQUE0.
To fit the model just using MIVQUE0, the first element of gamma should be set to and maxit should be set to zero.
Although the quasi-Newton algorithm used in g02ja tends to require more iterations before converging compared to the Newton–Raphson algorithm recommended by Wolfinger et al. (1994), it does not require the second derivatives of the likelihood function to be calculated and consequentially takes significantly less time per iteration.
Example
The following dataset is taken from Stroup (1989) and arises from a balanced split-plot design with the whole plots arranged in a randomized complete block-design.
In this example the full design matrix for the random independent variable, , is given by:
where
(1) |
The block structure evident in (1) is modelled by specifying a four-level subject variable, taking the values . The first column of is added to by setting . The remaining columns of are specified by a three level factor, taking the values, .
Example program (C#): g02jae.cs