R: Does the fitted object suffer from a known bug?

is.buggy {VGAM} | R Documentation

## Does the fitted object suffer from a known bug?

### Description

Checks to see if a fitted object suffers from some known bug.

### Usage

    is.buggy(object, ...)
    is.buggy.vlm(object, each.term = FALSE, ...)

### Arguments

`object` | A fitted VGAM object, e.g., from `vgam`.
`each.term` | Logical. If `TRUE` then a logical is returned for each term.
`...` | Unused for now.

### Details

It is known that `vgam` with `s` terms do not correctly handle constraint matrices (`cmat`, say) when `crossprod(cmat)` is not diagonal. This function detects whether this is so or not. Note that probably all VGAM family functions have defaults where all `crossprod(cmat)`s are diagonal, therefore do not suffer from this bug. It is more likely to occur if the user inputs constraint matrices using the `constraints` argument (and setting `zero = NULL` if necessary).

Second-generation VGAMs based on `sm.ps` are a modern alternative to using `s`. It does not suffer from this bug. However, G2-VGAMs require a reasonably large sample size in order to work more reliably.

### Value

The default is a single logical (`TRUE` if any term is `TRUE`), otherwise a vector of such with each element corresponding to a term. If the value is `TRUE` then I suggest replacing the VGAM by a similar model fitted by `vglm` and using regression splines, e.g., `bs`, `ns`.

### Note

When the bug is fixed this function may be withdrawn, otherwise always return `FALSE`s!

### Author(s)

T. W. Yee

### See Also

`vgam`. `vglm`, `s`, `sm.ps`, `bs`, `ns`.

### Examples

    fit1 <- vgam(cbind(agaaus, kniexc) ~ s(altitude, df = c(3, 4)),
                 binomialff(multiple.responses = TRUE), data = hunua)
    is.buggy(fit1)  # Okay
    is.buggy(fit1, each.term = TRUE)  # No terms are buggy

    fit2 <- vgam(cbind(agaaus, kniexc) ~ s(altitude, df = c(3, 4)),
                 binomialff(multiple.responses = TRUE), data = hunua,
                 constraints =
                 list("(Intercept)" = diag(2),
                      "s(altitude, df = c(3, 4))" = matrix(c(1, 1, 0, 1), 2, 2)))
    is.buggy(fit2)  # TRUE
    is.buggy(fit2, each.term = TRUE)
    constraints(fit2)

    # fit2b is an approximate alternative to fit2:
    fit2b <- vglm(cbind(agaaus, kniexc) ~ bs(altitude, df = 3) + bs(altitude, df = 4),
                  binomialff(multiple.responses = TRUE), data = hunua,
                  constraints =
                  list("(Intercept)" = diag(2),
                       "bs(altitude, df = 3)" = rbind(1, 1),
                       "bs(altitude, df = 4)" = rbind(0, 1)))
    is.buggy(fit2b)  # Okay
    is.buggy(fit2b, each.term = TRUE)
    constraints(fit2b)

[Package VGAM version 1.0-3 Index]