R: Seemingly Unrelated Regressions Family Function

SURff {VGAM} | R Documentation

## Seemingly Unrelated Regressions Family Function

### Description

Fits a system of seemingly unrelated regressions.

### Usage

    SURff(mle.normal = FALSE,
          divisor = c("n", "n-max(pj,pk)", "sqrt((n-pj)*(n-pk))"),
          parallel = FALSE, Varcov = NULL, matrix.arg = FALSE)

### Arguments

`mle.normal` | Logical. If `TRUE` then the MLE, assuming multivariate normal errors, is computed; the effect is just to add a `loglikelihood` slot to the returned object. Then it results in the maximum likelihood estimator.
`divisor` | Character, partial matching allowed and the first choice is the default. The divisor for the estimate of the covariances. If `"n"` then the estimate will be biased. If the others then the estimate will be unbiased for some elements. If `mle.normal = TRUE` and this argument is not `"n"` then a warning or an error will result.
`parallel` | See `CommonVGAMffArguments`. If `parallel = TRUE` then the constraint applies to the intercept too.
`Varcov` | Numeric. This may be assigned a variance-covariance of the errors. If `matrix.arg` then this is a M x M matrix. If `!matrix.arg` then this is a M x M matrix in matrix-band format (a vector with at least M and at most `M*(M+1)/2` elements).
`matrix.arg` | Logical. Of single length.

### Details

Proposed by Zellner (1962), the basic seemingly unrelated regressions (SUR) model is a set of LMs (M > 1 of them) tied together at the error term level. Each LM's model matrix may potentially have its own set of predictor variables.

Zellner's efficient (ZEF) estimator (also known as Zellner's two-stage Aitken estimator) can be obtained by setting `maxit = 1` (and possibly `divisor = "sqrt"` or `divisor = "n-max"`).

The default value of `maxit` (in `vglm.control`) probably means iterative GLS (IGLS) estimator is computed because IRLS will probably iterate to convergence. IGLS means, at each iteration, the residuals are used to estimate the error variance-covariance matrix, and then the matrix is used in the GLS. The IGLS estimator is also known as Zellner's iterative Aitken estimator, or IZEF.

### Value

An object of class `"vglmff"` (see `vglmff-class`). The object is used by modelling functions such as `vglm` and `vgam`.

### Warning

The default convergence criterion may be a little loose. Try setting `epsilon = 1e-11`, especially with `mle.normal = TRUE`.

### Note

The fitted object has slot `@extra$ncols.X.lm` which is a M vector with the number of parameters for each LM. Also, `@misc$values.divisor` is the M-vector of `divisor` values.

Constraint matrices are needed in order to specify which response variables that each term on the RHS of the formula is a regressor for. See the `constraints` argument of `vglm` for more information.

### Author(s)

T. W. Yee.

### References

Zellner, A. (1962). An Efficient Method of Estimating Seemingly Unrelated Regressions and Tests for Aggregation Bias. J. Amer. Statist. Assoc., 57(298), 348–368.

Kmenta, J. and Gilbert, R. F. (1968). Small Sample Properties of Alternative Estimators of Seemingly Unrelated Regressions. J. Amer. Statist. Assoc., 63(324), 1180–1200.

### See Also

`uninormal`, `gew`.

### Examples

    # Obtain some of the results of p.1199 of Kmenta and Gilbert (1968)
    clist <- list("(Intercept)" = diag(2),
                  "capital.g"   = rbind(1, 0),
                  "value.g"     = rbind(1, 0),
                  "capital.w"   = rbind(0, 1),
                  "value.w"     = rbind(0, 1))
    zef1 <- vglm(cbind(invest.g, invest.w) ~
                 capital.g + value.g + capital.w + value.w,
                 SURff(divisor = "sqrt"), maxit = 1,
                 data = gew, trace = TRUE, constraints = clist)

    round(coef(zef1, matrix = TRUE), digits = 4)  # ZEF
    zef1@extra$ncols.X.lm
    zef1@misc$divisor
    zef1@misc$values.divisor
    round(sqrt(diag(vcov(zef1))),    digits = 4)  # SEs
    nobs(zef1, type = "lm")
    df.residual(zef1, type = "lm")

    mle1 <- vglm(cbind(invest.g, invest.w) ~
                 capital.g + value.g + capital.w + value.w,
                 SURff(mle.normal = TRUE),
                 epsilon = 1e-11,
                 data = gew, trace = TRUE, constraints = clist)
    round(coef(mle1, matrix = TRUE), digits = 4)  # MLE
    round(sqrt(diag(vcov(mle1))),    digits = 4)  # SEs

[Package VGAM version 1.1-3 Index]