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 |
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., Wood, S.N., Zaffran, M., Nedellec, R. and Goude, Y., 2020. Fast calibrated additive quantile regression. Journal of the American Statistical Association (to appear). https://www.tandfonline.com/doi/full/10.1080/01621459.2020.1725521.
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)