R: Extended log-F model with variable scale

elflss {qgam} | R Documentation

## Extended log-F model with variable scale

### Description

The `elflss` family implements the Extended log-F (ELF) density of Fasiolo et al. (2017) and it is supposed to work in conjuction with the general GAM fitting methods of Wood et al. (2017), implemented by `mgcv`. It differs from the `elf` family, because here the scale of the density (sigma, aka the learning rate) can depend of the covariates, while in while in `elf` it is a single scalar. NB this function was use within the `qgam` function, but since `qgam` version 1.3 quantile models with varying learning rate are fitted using different methods (a parametric location-scale model, see Fasiolo et al. (2017) for details.).

### Usage

    elflss(link = list("identity", "log"), qu, co, theta, remInter = TRUE)

### Arguments

`link` | vector of two characters indicating the link function for the quantile location and for the log-scale.
`qu` | parameter in (0, 1) representing the chosen quantile. For instance, to fit the median choose `qu=0.5`.
`co` | positive vector of constants used to determine parameter lambda of the ELF density (lambda = co / sigma).
`theta` | a scalar representing the intercept of the model for the log-scale log(sigma).
`remInter` | if TRUE the intercept of the log-scale model is removed.

### Details

This function is meant for internal use only.

### Value

An object inheriting from mgcv's class `general.family`.

### Author(s)

Matteo Fasiolo <matteo.fasiolo@gmail.com> and Simon N. Wood.

### References

Fasiolo, M., Goude, Y., Nedellec, R. and Wood, S. N. (2017). Fast calibrated additive quantile regression. Available at https://arxiv.org/abs/1707.03307.

Wood, Simon N., Pya, N. and Safken, B. (2017). Smoothing parameter and model selection for general smooth models. Journal of the American Statistical Association.

### Examples

    ## Not run:
    set.seed(651)
    n <- 1000
    x <- seq(-4, 3, length.out = n)
    X <- cbind(1, x, x^2)
    beta <- c(0, 1, 1)
    sigma =  1.2 + sin(2*x)
    f <- drop(X %*% beta)
    dat <- f + rnorm(n, 0, sigma)
    dataf <- data.frame(cbind(dat, x))
    names(dataf) <- c("y", "x")

    # Fit median using elflss directly: NOT RECOMMENDED
    fit <- gam(list(y~s(x, bs = "cr"), ~ s(x, bs = "cr")),
               family = elflss(theta = 0, co = rep(0.2, n), qu = 0.5),
               data = dataf)

    plot(x, dat, col = "grey", ylab = "y")
    tmp <- predict(fit, se = TRUE)
    lines(x, tmp$fit[ , 1])
    lines(x, tmp$fit[ , 1] + 3 * tmp$se.fit[ , 1], col = 2)
    lines(x, tmp$fit[ , 1] - 3 * tmp$se.fit[ , 1], col = 2)

    ## End(Not run)

[Package qgam version 1.3.2 Index]