Learn R Programming

FlexGAM (version 0.7.2)

flexgam: 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.

Value

Object of class flexgam. The list includes the

  • f_k: The estimated response function.

  • gam_temp: The final step of the Fisher-Scoring algorithm, so the weighted linear model based on the mgcv-package.

  • sm_par_vec: The estimated smoothing parameters.

  • coefficients: The coefficients of the predictor as well as of the response function.

  • se: The standard deviation of the coefficients.

  • mean_eta_k, sd_eta_k: Some information about the scaling of the predictor.

  • control: The applied control parameters.

  • control_input: The control parameters in the input

  • details: Information about the occurrence of modifications due to extreme values and the convergence. As well as information of the steps done in the algorithm (if saved).

  • As well as other stuff for internal usage

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.

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

Run this code
# NOT RUN {
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")

# }

Run the code above in your browser using DataLab