1. Define an outcome, this can be of any form, but use an appropriate distribution for your outcome. Also define at least 1 continuous predictor.

I will use data from BRFSS with the outcome variable is general health and the continuous predictor variable will be sleep time.

  1. Using the gam() function, estimate a model with only linear terms in your model
library(mgcv)
## Loading required package: nlme
## 
## Attaching package: 'nlme'
## The following object is masked from 'package:dplyr':
## 
##     collapse
## This is mgcv 1.8-39. For overview type 'help("mgcv-package")'.
library(ggplot2)
library(dplyr)

dat <- data.frame(brfss2020)

gamfit <- gam(genhealth ~ sleptim1 + checkup1 + educa, data = dat, weights = mmsawt/mean(mmsawt, na.rm=T), family = binomial)
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!

## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
summary(gamfit)
## 
## Family: binomial 
## Link function: logit 
## 
## Formula:
## genhealth ~ sleptim1 + checkup1 + educa
## 
## Parametric coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        2.587463   0.122241  21.167  < 2e-16 ***
## sleptim1          -0.097657   0.003745 -26.076  < 2e-16 ***
## checkup11last5yrs -0.248483   0.017413 -14.270  < 2e-16 ***
## checkup12never    -0.397103   0.069727  -5.695 1.23e-08 ***
## educa2elementary   0.082819   0.124066   0.668    0.504    
## educa3somehs      -0.110699   0.121673  -0.910    0.363    
## educa4hsgrad      -0.486922   0.119734  -4.067 4.77e-05 ***
## educa5somecol     -0.572138   0.119638  -4.782 1.73e-06 ***
## educa6baorhigher  -1.021040   0.119510  -8.544  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## R-sq.(adj) =   0.02   Deviance explained = 1.88%
## UBRE = 0.062364  Scale est. = 1         n = 185745
  1. Repeat Step 2, but include a smooth term for at least one continuous variable
dat <- data.frame(brfss2020)

gamfitsm <- gam(genhealth ~ s(sleptim1) + checkup1 + educa, data = dat, weights = mmsawt/mean(mmsawt, na.rm=T), family = binomial)
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!

## Warning in eval(family$initialize): non-integer #successes in a binomial glm!

## Warning in eval(family$initialize): non-integer #successes in a binomial glm!

## Warning in eval(family$initialize): non-integer #successes in a binomial glm!

## Warning in eval(family$initialize): non-integer #successes in a binomial glm!

## Warning in eval(family$initialize): non-integer #successes in a binomial glm!

## Warning in eval(family$initialize): non-integer #successes in a binomial glm!

## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
summary(gamfitsm)
## 
## Family: binomial 
## Link function: logit 
## 
## Formula:
## genhealth ~ s(sleptim1) + checkup1 + educa
## 
## Parametric coefficients:
##                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        1.87319    0.11923  15.711  < 2e-16 ***
## checkup11last5yrs -0.25422    0.01746 -14.563  < 2e-16 ***
## checkup12never    -0.40985    0.06979  -5.873 4.29e-09 ***
## educa2elementary   0.09944    0.12406   0.802    0.423    
## educa3somehs      -0.11805    0.12168  -0.970    0.332    
## educa4hsgrad      -0.47258    0.11974  -3.947 7.92e-05 ***
## educa5somecol     -0.55438    0.11965  -4.634 3.60e-06 ***
## educa6baorhigher  -0.97341    0.11953  -8.144 3.83e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##               edf Ref.df Chi.sq p-value    
## s(sleptim1) 7.686   8.27   1355  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.0243   Deviance explained = 2.25%
## UBRE = 0.058399  Scale est. = 1         n = 185745
  1. Test if the model in step 3 is fitting the data better than the purely linear model.
anova(gamfit, gamfitsm, test="Chisq")
  1. Produce a plot of the smooth effect from the model in step 3
plot(gamfitsm)

LS0tDQp0aXRsZTogIkhvbWV3b3JrIEFzc2lnbm1lbnQgOSINCmF1dGhvcjogIlNlbGVuZSBNLiBHb21leiINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiDQpvdXRwdXQ6DQogICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGZpZ19oZWlnaHQ6IDcNCiAgICBmaWdfd2lkdGg6IDcNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KLS0tDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShzdGFyZ2F6ZXIpDQpsaWJyYXJ5KHN1cnZleSkNCmxpYnJhcnkocXVlc3Rpb25yKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoaGF2ZW4pDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoamFuaXRvcikNCmBgYA0KDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpicmZzczIwMjA8LSByZWFkUkRTKHVybCgiaHR0cHM6Ly9naXRodWIuY29tL2NvcmV5c3BhcmtzL0RFTTcyODMvYmxvYi9tYXN0ZXIvZGF0YS9icmZzczIwc20ucmRzP3Jhdz10cnVlIikpDQoNCm5hbWVzKGJyZnNzMjAyMCkgPC0gdG9sb3dlcihnc3ViKHBhdHRlcm4gPSAiXyIscmVwbGFjZW1lbnQgPSAgIiIseCA9ICBuYW1lcyhicmZzczIwMjApKSkNCg0KYnJmc3MyMDIwJHNsZXB0aW0xW2JyZnNzMjAyMCRzbGVwdGltMT4yNF0gPC0gTkENCg0KYnJmc3MyMDIwJHNleDwtYXMuZmFjdG9yKGlmZWxzZShicmZzczIwMjAkc2V4PT0xLCAiTWFsZSIsICJGZW1hbGUiKSkNCg0KYnJmc3MyMDIwJGJsYWNrPC1SZWNvZGUoYnJmc3MyMDIwJHJhY2VncjMsDQogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjI9MTsgOT1OQTsgZWxzZT0wIikNCmJyZnNzMjAyMCR3aGl0ZTwtUmVjb2RlKGJyZnNzMjAyMCRyYWNlZ3IzLA0KICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPTE7IDk9TkE7IGVsc2U9MCIpDQpicmZzczIwMjAkb3RoZXI8LVJlY29kZShicmZzczIwMjAkcmFjZWdyMywNCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMzo0PTE7IDk9TkE7IGVsc2U9MCIpDQpicmZzczIwMjAkaGlzcGFuaWM8LVJlY29kZShicmZzczIwMjAkcmFjZWdyMywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iNT0xOyA5PU5BOyBlbHNlPTAiKQ0KDQpicmZzczIwMjAkcmFjZWV0aDwtUmVjb2RlKGJyZnNzMjAyMCRyYWNlZ3IzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPSduaHdoaXRlJzsgMj0nbmhibGFjayc7IDM9J25ob3RoZXInOzQ9J25obXVsdGknOyA1PSdoaXNwYW5pYyc7IGVsc2U9TkEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3IgPSBUKQ0KDQpicmZzczIwMjAkY2hlY2t1cDE8LVJlY29kZShicmZzczIwMjAkY2hlY2t1cDEsDQogICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxOjI9JzBsYXN0Mnlycyc7IDM6ND0nMWxhc3Q1eXJzJzsgOD0nMm5ldmVyJzsgNz1OQTsgOT1OQSIsDQogICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3I9VCkNCmJyZnNzMjAyMCRjaGVja3VwMTwtZmN0X3JlbGV2ZWwoYnJmc3MyMDIwJGNoZWNrdXAxLCcwbGFzdDJ5cnMnLCcxbGFzdDV5cnMnLCcybmV2ZXInKSANCg0KYnJmc3MyMDIwJGdlbmhlYWx0aDwtUmVjb2RlKGJyZnNzMjAyMCRnZW5obHRoLCByZWNvZGVzPSIxPTE7IDI9MjsgMz0zOyA0PTQ7IDU9NTsgOT1OQTsgZWxzZT1OQSIsIGFzLmZhY3Rvcj1UKQ0KDQpicmZzczIwMjAkZWR1Y2EgPC0gUmVjb2RlKGJyZnNzMjAyMCRlZHVjYSwgcmVjb2Rlcz0iMT0nMW5vc2Nob29sJzsgMj0nMmVsZW1lbnRhcnknOyAzPSczc29tZWhzJzsgND0nNGhzZ3JhZCc7IDU9JzVzb21lY29sJzsgNj0nNmJhb3JoaWdoZXInOyBlbHNlPU5BIiwgYXMuZmFjdG9yPVQpDQoNCg0KaW5zdGFsbC5wYWNrYWdlcygibWFncml0dHIiLCByZXBvcyA9ICJodHRwOi8vY3Jhbi51cy5yLXByb2plY3Qub3JnIikNCmxpYnJhcnkobWFncml0dHIpDQoNCmJyZnNzMjAyMDwtYnJmc3MyMDIwICU+JQ0KICANCiAgZmlsdGVyKHNleCE9OSwNCiAgICAgICAgIGlzLm5hKHNsZXB0aW0xKT09RiwNCiAgICAgICAgIGlzLm5hKGdlbmhlYWx0aCk9PUYsDQogICAgICAgICBpcy5uYShlZHVjYSk9PUYsDQogICAgICAgICBpcy5uYShjaGVja3VwMSk9PUYsDQogICAgICAgICBpcy5uYShyYWNlZXRoKT09RikNCg0KYnJmc3MyMDIwICU+JSBkcm9wX25hKCkNCg0Kb3B0aW9ucyhzdXJ2ZXkubG9uZWx5LnBzdSA9ICJhZGp1c3QiKQ0KDQpkZXM8LXN2eWRlc2lnbihpZHM9fjEsIHN0cmF0YT1+c3RzdHIsIHdlaWdodHM9fm1tc2F3dCwgZGF0YSA9IGJyZnNzMjAyMCApDQpkZXMNCmBgYA0KDQoNCjEpIERlZmluZSBhbiBvdXRjb21lLCB0aGlzIGNhbiBiZSBvZiBhbnkgZm9ybSwgYnV0IHVzZSBhbiBhcHByb3ByaWF0ZSBkaXN0cmlidXRpb24gZm9yIHlvdXIgb3V0Y29tZS4gQWxzbyBkZWZpbmUgYXQgbGVhc3QgMSBjb250aW51b3VzIHByZWRpY3Rvci4NCg0KSSB3aWxsIHVzZSBkYXRhIGZyb20gQlJGU1Mgd2l0aCB0aGUgb3V0Y29tZSB2YXJpYWJsZSBpcyBnZW5lcmFsIGhlYWx0aCBhbmQgdGhlIGNvbnRpbnVvdXMgcHJlZGljdG9yIHZhcmlhYmxlIHdpbGwgYmUgc2xlZXAgdGltZS4NCg0KMikgVXNpbmcgdGhlIGdhbSgpIGZ1bmN0aW9uLCBlc3RpbWF0ZSBhIG1vZGVsIHdpdGggb25seSBsaW5lYXIgdGVybXMgaW4geW91ciBtb2RlbA0KDQpgYGB7cn0NCmxpYnJhcnkobWdjdikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQoNCmRhdCA8LSBkYXRhLmZyYW1lKGJyZnNzMjAyMCkNCg0KZ2FtZml0IDwtIGdhbShnZW5oZWFsdGggfiBzbGVwdGltMSArIGNoZWNrdXAxICsgZWR1Y2EsIGRhdGEgPSBkYXQsIHdlaWdodHMgPSBtbXNhd3QvbWVhbihtbXNhd3QsIG5hLnJtPVQpLCBmYW1pbHkgPSBiaW5vbWlhbCkNCg0Kc3VtbWFyeShnYW1maXQpDQoNCmBgYA0KDQozKSBSZXBlYXQgU3RlcCAyLCBidXQgaW5jbHVkZSBhIHNtb290aCB0ZXJtIGZvciBhdCBsZWFzdCBvbmUgY29udGludW91cyB2YXJpYWJsZQ0KDQpgYGB7cn0NCmRhdCA8LSBkYXRhLmZyYW1lKGJyZnNzMjAyMCkNCg0KZ2FtZml0c20gPC0gZ2FtKGdlbmhlYWx0aCB+IHMoc2xlcHRpbTEpICsgY2hlY2t1cDEgKyBlZHVjYSwgZGF0YSA9IGRhdCwgd2VpZ2h0cyA9IG1tc2F3dC9tZWFuKG1tc2F3dCwgbmEucm09VCksIGZhbWlseSA9IGJpbm9taWFsKQ0KDQpzdW1tYXJ5KGdhbWZpdHNtKQ0KDQpgYGANCg0KDQo0KSBUZXN0IGlmIHRoZSBtb2RlbCBpbiBzdGVwIDMgaXMgZml0dGluZyB0aGUgZGF0YSBiZXR0ZXIgdGhhbiB0aGUgcHVyZWx5IGxpbmVhciBtb2RlbC4NCg0KYGBge3J9DQphbm92YShnYW1maXQsIGdhbWZpdHNtLCB0ZXN0PSJDaGlzcSIpDQoNCmBgYA0KDQo1KSBQcm9kdWNlIGEgcGxvdCBvZiB0aGUgc21vb3RoIGVmZmVjdCBmcm9tIHRoZSBtb2RlbCBpbiBzdGVwIDMNCg0KYGBge3J9DQpwbG90KGdhbWZpdHNtKQ0KDQpgYGANCg0KDQoNCg0KDQoNCg==