R: Residuals of Hidden Markov Model

residuals {HiddenMarkov} | R Documentation

## Residuals of Hidden Markov Model

### Description

Provides methods for the generic function `residuals`. There is currently no method for objects of class `"mmpp"`.

### Usage

    ## S3 method for class 'dthmm'
    residuals(object, ...)
    ## S3 method for class 'mmglm0'
    residuals(object, ...)
    ## S3 method for class 'mmglm1'
    residuals(object, ...)
    ## S3 method for class 'mmglmlong1'
    residuals(object, ...)

### Arguments

`object` | an object with class `dthmm`, `mmglm0`, `mmglm1` or `mmglmlong1`.
`...` | other arguments.

### Details

The calculated residuals are pseudo residuals. Under satisfactory conditions they have an approximate standard normal distribution. Initially the function `probhmm` is called. If the model fits satisfactorily, the returned values should be approximately uniformly distributed. Hence by applying the function `qnorm`, the resultant “residuals” should have an approximate standard normal distribution.

A continuity adjustment is made when the observed distribution is discrete. In the case of count distributions (e.g. binomial and Poisson) where the observed count is close to or on the boundary of the domain (e.g. binomial or Poisson count is zero, or binomial count is “n”), the pseudo residuals will give a very poor indication of the models goodness of fit; see the Poisson example below.

The code for the methods `"dthmm"`, `"mmglm0"`, `"mmglm1"` or `"mmglmlong1"` can be viewed by typing `residuals.dthmm`, `residuals.mmglm0`, `residuals.mmglm1` or `residuals.mmglmlong1`, respectively, on the R command line.

### Value

A vector containing the pseudo residuals.

### Examples

    #   Example Using Beta Distribution

    Pi <- matrix(c(0.8, 0.2,
                   0.3, 0.7),
                 byrow=TRUE, nrow=2)

    n <- 2000

    x <- dthmm(NULL, Pi, c(0,1), "beta",
               list(shape1=c(2, 6), shape2=c(6, 2)))

    x <- simulate(x, nsim=n, seed=5)

    y <- residuals(x)

    w <- hist(y, main="Beta HMM: Pseudo Residuals")
    z <- seq(-3, 3, 0.01)
    points(z, dnorm(z)*n*(w$breaks[2]-w$breaks[1]), col="red", type="l")
    box()

    qqnorm(y, main="Beta HMM: Q-Q Plot of Pseudo Residuals")
    abline(a=0, b=1, lty=3)
    abline(h=seq(-2, 2, 1), lty=3)
    abline(v=seq(-2, 2, 1), lty=3)

    #-----------------------------------------------
    #   Example Using Gaussian Distribution

    Pi <- matrix(c(1/2, 1/2,   0,   0,   0,
                   1/3, 1/3, 1/3,   0,   0,
                     0, 1/3, 1/3, 1/3,   0,
                     0,   0, 1/3, 1/3, 1/3,
                     0,   0,   0, 1/2, 1/2),
                 byrow=TRUE, nrow=5)

    x <- dthmm(NULL, Pi, c(0, 1, 0, 0, 0), "norm",
               list(mean=c(1, 4, 2, 5, 3), sd=c(0.5, 1, 1, 0.5, 0.1)))

    n <- 2000
    x <- simulate(x, nsim=n, seed=5)

    y <- residuals(x)

    w <- hist(y, main="Gaussian HMM: Pseudo Residuals")
    z <- seq(-3, 3, 0.01)
    points(z, dnorm(z)*n*(w$breaks[2]-w$breaks[1]), col="red", type="l")
    box()

    qqnorm(y, main="Gaussian HMM: Q-Q Plot of Pseudo Residuals")
    abline(a=0, b=1, lty=3)
    abline(h=seq(-2, 2, 1), lty=3)
    abline(v=seq(-2, 2, 1), lty=3)

    #-----------------------------------------------
    #   Example Using Poisson Distribution

    Pi <- matrix(c(0.8, 0.2,
                   0.3, 0.7),
                 byrow=TRUE, nrow=2)

    x <- dthmm(NULL, Pi, c(0, 1), "pois",
               list(lambda=c(1, 5)), discrete=TRUE)

    n <- 2000
    x <- simulate(x, nsim=n, seed=5)

    y <- residuals(x)

    w <- hist(y, main="Poisson HMM: Pseudo Residuals")
    z <- seq(-3, 3, 0.01)
    points(z, dnorm(z)*n*(w$breaks[2]-w$breaks[1]), col="red", type="l")
    box()

    qqnorm(y, main="Poisson HMM: Q-Q Plot of Pseudo Residuals")
    abline(a=0, b=1, lty=3)
    abline(h=seq(-2, 2, 1), lty=3)
    abline(v=seq(-2, 2, 1), lty=3)

[Package HiddenMarkov version 1.8-8 Index]