flexgam {FlexGAM}R Documentation

Estimation of generalized additive model with flexible response function

Description

Main function to estimate generalized additive models with flexible response function. Currently the response must be binomial, Poisson, Gaussian or Gamma distributed.

Usage

flexgam(formula, data, type = c("FlexGAM1","FlexGAM2","FlexGAM1n",
        "FlexGAM2n"), family, control = NULL)

Arguments

formula

Formula of the covariate effects. The formula must be in the design of the mgcv package.

data

Data to fit the model.

type

Should the response function be estimated completely flexible ("FlexGAM2") or with a surrounding canonical link ("FlexGAM1")? "FlexGAM1n" and "FlexGAM2n" are similar to "FlexGAM1" and "FlexGAM2", but without monotonicity constraint. Therefore we do not recommend to use "FlexGAM1n" and "FlexGAM2n".

family

Family of the data. Currently only binomial(link="logit"), poisson(link="log"), gaussian(link="identity") and Gamma(link="log") are possible.

control

Control parameters to fit the model. The default values are described in
match_flexgam_control.

Details

To reduce the bias of miss-specified response functions the function estimates the response function jointly with the covariate effects. The covariate effects are build similar to the standard mgcv::gam, while the response function is either estimated as a strictly monotone P-spline or a combination of the canonical link and a transformation of the "linear"-predictor. In the outer loop the response function is estimated, while in the inner loop a modified version of the Fisher-Scoring algorithm is applied to get the covariate effects. In the algorithm step-halving is applied. Identifiability is achieved due to at least two smooth effects and scaling of the predictors.

Value

Object of class flexgam. The list includes the

Author(s)

Elmar Spiegel

References

Spiegel, Elmar, Thomas Kneib and Fabian Otto-Sobotka. Generalized additive models with flexible response functions. Statistics and Computing (2017). https://doi.org/10.1007/s11222-017-9799-6

See Also

predict.flexgam, plot.flexgam, deviance.flexgam, match_flexgam_control

Examples

set.seed(1)
n <- 1000
x1 <- runif(n)
x2 <- runif(n)
x3 <- runif(n)
eta_orig <- -1 + 2*sin(6*x1) + exp(x2) + x3
pi_orig <- pgamma(eta_orig, shape=2, rate=sqrt(2))
y <- rbinom(n,size=1,prob=pi_orig)

Data <- data.frame(y,x1,x2,x3)
formula <- y ~ s(x1,k=20,bs="ps") + s(x2,k=20,bs="ps") + x3

# Fix smoothing parameters to save computational time.
control2 <- list("fix_smooth" = TRUE, "quietly" = TRUE, "sm_par_vec" = 
                     c("lambda" = 100, "s(x1)" = 2000, "s(x2)" = 9000))

set.seed(2)
model_2 <- flexgam(formula=formula, data=Data, type="FlexGAM2", 
                   family=binomial(link=logit), control = control2)

print(model_2)
summary(model_2)

plot(model_2, type = "response")
plot(model_2, type = "covariate")


[Package FlexGAM version 0.7.2 Index]