Frustrated with confint not returning a data frame of confidence intervals when applied to a gam from mgcv?
Want that, but tidy?
Fear not, mgcv.helper is here!
This package allows you to call confint the same way you would for an lm, glm or nls object and get back a tidy data frame filled with the confidence intervals for parametric terms. Arguments taken are:
object- a fittedgamparm- a vector of parameters you care aboutlevel- a confidence level
You can also use tidy_smooths to extract fitted non-parametric smooths (either 1D or 2D but not both at once) from a gam object and store them as a tidy data frame ready for ggplot2::ggplot.
We also provide a method for calculating the vif from a fitted gam object.
Future plans include:
- Allowing multiple confidence levels to be used
- Renaming columns corresponding to confidence intervals with the quantile value
# library(devtools)
devtools::install_github("samclifford/mgcv.helper")First, let's generate some data and fit a GAM
library(mgcv)
library(dplyr)
library(mgcv.helper)
set.seed(101)
N <- 100
x1 <- runif(n=N)
x2 <- runif(n=N)
x3 <- runif(n=N) + 0.9*x1 - 1.75*x2
df <- data.frame(x1 = x1,
x2 = x2,
x3 = x3) %>%
mutate(y = rnorm(n=N,
mean = 1 - 2*x1 + 3*x2 - 0.5*x3,
sd = 0.5))
fit1 <- gam(data=df, y ~ x1 + x2 + x3)
summary(fit1)##
## Family: gaussian
## Link function: identity
##
## Formula:
## y ~ x1 + x2 + x3
##
## Parametric coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.9966 0.1410 7.071 2.48e-10 ***
## x1 -1.7966 0.2215 -8.111 1.65e-12 ***
## x2 2.8581 0.3377 8.464 2.94e-13 ***
## x3 -0.6007 0.1652 -3.637 0.000446 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## R-sq.(adj) = 0.891 Deviance explained = 89.5%
## GCV = 0.22009 Scale est. = 0.21129 n = 100
Now that we've got our parameter estimates, etc., we may want to know the confidence intervals for them,
confint(fit1)## Joining, by = "Term"
## Term Estimate `Std. Error` `2.5%` `97.5%`
## 1 (Intercept) 0.9966307 0.1409523 0.7168425 1.2764188
## 2 x1 -1.7966401 0.2215098 -2.2363335 -1.3569467
## 3 x2 2.8581132 0.3376971 2.1877896 3.5284367
## 4 x3 -0.6007309 0.1651840 -0.9286186 -0.2728432
And we might want to know whether or not our variables are related to each other in the sense that their variance inflation factors are large
vif.gam(fit1)## variable vif
## 1 x1 2.047334
## 2 x2 4.900343
## 3 x3 5.393642