require(locfit)
require(mgcv)
heart <- read.delim("http://web.as.uky.edu/statistics/users/pbreheny/621/data/heart.txt")
bwr <- colorRampPalette(c("blue","white","red"))

## 2D local regression (slide 4)
fit <- locfit(chd~lp(age, ldl, deg=1, nn=.5, scale=TRUE),heart,family="binomial")
plot(fit, m=100, type="image", col=bwr(64), main="Local regression\n(deg=1)")
fit <- locfit(chd~lp(age, ldl, scale=TRUE, nn=0.9), heart, family="binomial")
plot(fit, m=100, type="image", col=bwr(64), main="Local regression\n(deg=2)")

## 2D splines (slide 8)
heart$sLDL <- with(heart, scale(ldl))
heart$sAge <- with(heart, scale(age))
fit <- gam(chd~s(age, ldl, sp=0.015), heart, family="binomial")
vis.gam(fit, plot.type="contour", type="response", main="Thin-plate\noriginal units")
fit <- gam(chd~s(sAge, sLDL, sp=0.05), heart, family="binomial")
vis.gam(fit, plot.type="contour", type="response", main="Thin-plate\nrescaled")
fit <- gam(chd~te(age, ldl, sp=rep(.2,2)), heart, family="binomial")
vis.gam(fit, plot.type="contour", type="response", main="Tensor product")

## Slide 13
fit <- gam(chd~age+ldl, heart, family="binomial")
vis.gam(fit, plot.type="persp", n.grid=29, ticktype="detailed", col="white", border="blue", d=5, theta=-15, zlab="f(ldl, age)", main="GLM")
fit <- gam(chd~age*ldl, heart, family="binomial")
vis.gam(fit, plot.type="persp", n.grid=29, ticktype="detailed", col="white", border="blue", d=5, theta=-15, zlab="f(ldl, age)", main="GLM w/ interaction")
fit <- gam(chd~s(age, sp=.01)+s(ldl, sp=.01), heart, family="binomial")
vis.gam(fit, plot.type="persp", n.grid=29, ticktype="detailed", col="white", border="blue", d=5, theta=-15, zlab="f(ldl, age)", main="GAM")
fit <- gam(chd~te(age, ldl, sp=rep(.2,2)), heart, family="binomial")
vis.gam(fit, plot.type="persp", n.grid=29, ticktype="detailed", col="white", border="blue", d=5, theta=-15, zlab="f(ldl, age)", main="Tensor product")

## Slide 14
fit <- gam(chd~age+ldl, heart, family="binomial")
vis.gam(fit, plot.type="contour", type="response", main="GLM")
fit <- gam(chd~age*ldl, heart, family="binomial")
vis.gam(fit, plot.type="contour", type="response", main="GLM w/ interaction")
fit <- gam(chd~s(age, sp=.01)+s(ldl, sp=.01), heart, family="binomial")
vis.gam(fit, plot.type="contour", type="response", main="GAM")
fit <- gam(chd~te(age, ldl, sp=rep(.2,2)), heart, family="binomial")
vis.gam(fit, plot.type="contour", type="response", main="Tensor product")

## Slide 18
detach("package:mgcv")
require(gam)
fit <- gam(chd~s(age)+lo(ldl)+obesity,data=heart,family="binomial")
fit0 <- gam(chd~s(age)+ldl+obesity,data=heart,family="binomial")
anova(fit0,fit)
detach("package:gam")
require(mgcv)

## Slide 22
fit <- gam(chd ~ te(age,ldl) + s(obesity) + tobacco, data=heart, family=binomial)
summary(fit)

## Slide 23
fit0 <- gam(chd ~ te(age,ldl) + obesity + tobacco, data=heart, family=binomial)
anova(fit0, fit, test="Chisq")

## Slide 24
fit0 <- gam(chd ~ te(age,ldl) + tobacco, data=heart, family=binomial)
anova(fit0, fit, test="Chisq")
