Skip to content

Instantly share code, notes, and snippets.

@dill
Last active May 6, 2021 19:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dill/6145f7b5c25886ccd4681fc2c3adb30c to your computer and use it in GitHub Desktop.
Save dill/6145f7b5c25886ccd4681fc2c3adb30c to your computer and use it in GitHub Desktop.
🐷🦷 cursed data from Hodges chapter 4
# Hodges pig jawbone
# http://www.biostat.umn.edu/~hodges/RPLMBook/Datasets/06_Pig_jawbone/Ex6.html
library(mgcv)
library(ggplot2)
source("smooth.construct.tr.smooth.spec.R")
whitey <- read.csv("Pig_jawbone_Whitey_only.csv")
whitey$fTransect <- factor(whitey$Transect, ordered=TRUE)
# base plot
p <- ggplot(whitey, aes(x=distmm, y=ElMod)) +
geom_point(colour="grey60") +
facet_wrap(~fTransect) +
theme_minimal()
print(p)
# prediction grid
predg <- expand.grid(distmm = seq(0, 1.5, length.out=150),
fTransect = factor(1:9, levels=levels(whitey$fTransect)))
## fit some models
# hodges (4.11)
b_411 <- gam(ElMod ~ fTransect + fTransect:distmm + fTransect:I(distmm^2) +
s(distmm, by=fTransect, bs="tr", k=25),
method="REML", data=whitey)
summary(b_411)
# what does that look like?
p_411 <- cbind(predg, ElMod=predict(b_411, predg))
p + geom_line(data=p_411)
# hodges (4.12) - (4.14)
# this adds a "global" smooth of distmm
b_412 <- gam(ElMod ~ fTransect + fTransect:distmm + fTransect:I(distmm^2) +
s(distmm, bs="tr", k=25) +
s(distmm, by=fTransect, bs="tr", k=25),
method="REML", data=whitey)
summary(b_412)
# compre these models
p_412 <- cbind(predg, ElMod=predict(b_412, predg))
p + geom_line(data=p_411, colour="red") + geom_line(data=p_412, colour="blue")
# a better version of 4.11, using the fs basis (fewer DF, smoopars)
b_fs11 <- gam(ElMod ~ fTransect + fTransect:distmm + fTransect:I(distmm^2) +
s(distmm, fTransect, bs="fs",
xt=list(bs="tr", k=25)),
method="REML", data=whitey)
summary(b_fs11)
# get rid of those fixed effects?
b_fs11_2 <- gam(ElMod ~ fTransect +
s(distmm, fTransect, bs="fs",
xt=list(bs="tr", k=25)),
method="REML", data=whitey)
summary(b_fs11_2)
# compare? v. similar but diff. extrapolative behaviour?
p_fs11 <- cbind(predg, ElMod=predict(b_fs11, predg))
p_fs11_2 <- cbind(predg, ElMod=predict(b_fs11_2, predg))
p + geom_line(data=p_fs11, colour="red") + geom_line(data=p_fs11_2, colour="blue")
# not much point in doing fs versions of (4.12)-(4.14) as the above fs models
# already do the global smooth + diffs thing?
# mainly to compare degrees of freedom...
AIC(b_411, b_412, b_fs11, b_fs11_2)
## what about setting-up the RW model?
# setup design matrix, this is awful code
pattern <- matrix(0, 9, 8)
pattern[lower.tri(pattern)] <- 1
Xrw <- apply(pattern, 2, rep, times=as.numeric(table(whitey$Transect)))
# construct penalty
Srw <- diag(8)
whitey$Xrw <- Xrw
b_rw <- gam(ElMod ~ distmm + I(distmm^2) + Xrw +
s(distmm, bs="tr", k=25),
paraPen=list(Xrw=list(Srw)),
method="REML", data=whitey)
summary(b_rw)
# model with just a random effect and overall smooth
b_re <- gam(ElMod ~ distmm + I(distmm^2) +
s(fTransect, bs="re") +
s(distmm, bs="tr", k=25),
method="REML", data=whitey)
summary(b_re)
# compare fixed effects sizes
coef(b_re)[1:3]
coef(b_rw)[1:3]
# compare fits
p_re <- cbind(predg, ElMod=predict(b_re, predg))
predg$Xrw <- apply(pattern, 2, rep, times=as.numeric(table(predg$fTransect)))
p_rw <- cbind(predg, ElMod=predict(b_rw, predg))
p + geom_line(data=p_re, colour="red") + geom_line(data=p_rw, colour="blue")
cor(predict(b_re), predict(b_rw))
Transect CorMdA distmm ElMod Hard
1 C 0.015 5.3 0.13
1 C 0.045 6.5 0.21
1 C 0.06 6.7 0.19
1 C 0.075 5.2 0.14
1 C 0.195 7.1 0.14
1 C 0.21 6.1 0.11
1 C 0.225 5.6 0.1
1 C 0.24 8 0.15
1 C 0.255 7.5 0.15
1 C 0.27 7.4 0.15
1 C 0.285 7.5 0.14
1 C 0.3 5.8 0.08
1 C 0.315 3.6 0.02
1 C 0.33 8 0.16
1 C 0.345 8.3 0.16
1 C 0.36 8.1 0.14
1 C 0.375 8.7 0.19
1 C 0.39 8.4 0.18
1 C 0.405 9.1 0.19
1 C 0.42 8.1 0.19
1 C 0.45 6.6 0.16
1 C 0.465 10.1 0.19
1 C 0.48 12.7 0.23
1 C 0.495 10.6 0.17
1 C 0.51 8.6 0.12
1 C 0.525 11.4 0.19
1 C 0.54 10.6 0.18
1 C 0.555 12.8 0.19
1 C 0.57 13.9 0.21
1 C 0.72 6.3 0.19
1 C 0.735 4.4 0.17
1 C 0.78 2.5 0.05
1 C 0.795 8.4 0.21
1 C 0.81 9 0.19
1 C 0.825 8.7 0.18
1 C 0.84 7.8 0.11
1 C 0.855 8.2 0.13
1 C 0.87 8.2 0.17
1 C 0.885 7.2 0.13
1 C 0.9 7.5 0.16
1 C 0.915 7.5 0.18
1 C 0.93 8.3 0.17
1 C 0.945 8.5 0.18
1 C 0.96 8.5 0.16
1 C 0.975 10.9 0.19
1 C 0.99 7.3 0.13
1 C 1.005 8.6 0.16
1 C 1.02 7.4 0.19
1 C 1.035 9.7 0.21
1 C 1.05 10.1 0.15
1 C 1.065 8.8 0.17
1 C 1.08 8.9 0.18
1 C 1.095 9.3 0.18
1 C 1.11 9 0.18
1 C 1.125 9.7 0.23
1 C 1.14 10.3 0.22
1 C 1.155 9.1 0.18
1 C 1.17 8.5 0.15
1 C 1.185 9.2 0.2
1 C 1.2 8.8 0.12
1 C 1.215 10.4 0.21
1 C 1.23 8.3 0.15
1 C 1.245 9.3 0.22
1 C 1.26 10.2 0.22
1 C 1.275 10.7 0.2
1 C 1.29 9 0.19
1 C 1.305 10.2 0.19
1 C 1.32 8.7 0.2
1 C 1.335 7.8 0.17
1 C 1.35 8.5 0.17
1 C 1.365 9.3 0.16
1 C 1.38 9.3 0.17
1 C 1.395 8.6 0.16
1 C 1.41 10.7 0.22
1 C 1.425 9.4 0.21
1 C 1.44 10.9 0.23
1 C 1.455 10.9 0.22
1 C 1.47 9.8 0.21
1 C 1.485 13 0.36
1 C 1.5 8.8 0.19
2 C 0.06 9.2 0.21
2 C 0.075 8.7 0.16
2 C 0.09 7.4 0.15
2 C 0.105 6.5 0.12
2 C 0.12 7.3 0.15
2 C 0.135 6 0.13
2 C 0.15 5.9 0.13
2 C 0.165 8.2 0.17
2 C 0.18 7.3 0.14
2 C 0.195 6.8 0.14
2 C 0.21 7.3 0.14
2 C 0.225 7.9 0.14
2 C 0.24 4.2 0.07
2 C 0.255 7 0.15
2 C 0.27 4.7 0.12
2 C 0.285 8.6 0.15
2 C 0.3 6.8 0.13
2 C 0.315 9 0.19
2 C 0.33 8.2 0.15
2 C 0.345 9.6 0.16
2 C 0.36 9.8 0.23
2 C 0.375 7 0.11
2 C 0.39 9.5 0.2
2 C 0.405 8.8 0.13
2 C 0.42 7.8 0.13
2 C 0.435 4.3 0.08
2 C 0.45 2 0.08
2 C 0.795 3.1 0.09
2 C 0.81 2.3 0.08
2 C 0.825 8.6 0.22
2 C 0.84 9 0.13
2 C 0.855 11 0.27
2 C 0.87 8.5 0.19
2 C 0.885 9.4 0.19
2 C 0.9 8.2 0.16
2 C 0.915 7.8 0.16
2 C 0.93 7.7 0.19
2 C 0.945 8.9 0.2
2 C 0.96 7.4 0.16
2 C 0.975 7.5 0.17
2 C 0.99 7.2 0.17
2 C 1.005 6.4 0.16
2 C 1.11 8 0.15
2 C 1.125 11 0.22
2 C 1.14 8.8 0.16
2 C 1.155 10.2 0.23
2 C 1.17 10.3 0.23
2 C 1.185 7.8 0.1
2 C 1.2 10.3 0.25
2 C 1.215 9.9 0.21
2 C 1.23 9.3 0.19
2 C 1.245 8.2 0.2
2 C 1.26 9.2 0.21
2 C 1.275 8.9 0.22
2 C 1.29 10.3 0.25
2 C 1.305 9.2 0.23
2 C 1.32 9.9 0.22
2 C 1.335 10.7 0.22
2 C 1.35 11.3 0.23
2 C 1.365 12.1 0.25
2 C 1.38 9.5 0.2
2 C 1.395 9.4 0.23
2 C 1.41 9.1 0.19
3 C 0.015 9.5 0.22
3 C 0.03 7.5 0.15
3 C 0.045 9.3 0.2
3 C 0.06 8.5 0.16
3 C 0.075 7.6 0.14
3 C 0.09 9.8 0.18
3 C 0.105 8.8 0.17
3 C 0.12 7.6 0.17
3 C 0.135 8 0.17
3 C 0.15 9.7 0.19
3 C 0.195 9.8 0.19
3 C 0.21 10.1 0.18
3 C 0.225 9.2 0.15
3 C 0.24 8.6 0.17
3 C 0.255 11.3 0.26
3 C 0.27 10.7 0.2
3 C 0.285 10.4 0.21
3 C 0.3 8.5 0.18
3 C 0.315 8.2 0.18
3 C 0.33 8.3 0.19
3 C 0.345 10.8 0.23
3 C 0.36 10.2 0.22
3 C 0.375 8.2 0.21
3 C 0.39 9.3 0.2
3 C 0.405 10.4 0.26
3 C 0.45 8.8 0.21
3 C 0.465 9.1 0.23
3 C 0.48 9.5 0.18
3 C 0.495 7.8 0.12
3 C 0.525 9.6 0.21
3 C 0.54 9.2 0.19
3 C 0.555 9.6 0.21
3 C 0.57 8 0.17
3 C 0.585 9.8 0.17
3 C 0.6 4.8 0.06
3 C 0.615 3.3 0.09
3 C 0.63 7.6 0.16
3 C 0.645 5.1 0.11
3 C 0.66 9.2 0.23
3 C 0.675 9.5 0.18
3 C 0.69 8.2 0.18
3 C 0.705 3.1 0.09
3 C 0.78 8.9 0.21
3 C 0.795 9.6 0.21
3 C 0.825 10.9 0.22
3 C 0.84 7.2 0.12
3 C 0.855 10.6 0.24
3 C 0.87 9.8 0.24
3 C 0.885 9.7 0.21
3 C 0.9 8.4 0.23
3 C 0.915 8.3 0.19
3 C 0.93 8.7 0.2
3 C 0.945 6 0.15
3 C 0.96 7.5 0.18
3 C 0.99 6.4 0.09
3 C 1.005 10.4 0.19
3 C 1.14 9.6 0.21
3 C 1.155 10.6 0.21
3 C 1.17 9.8 0.21
3 C 1.185 9.1 0.13
3 C 1.2 8 0.18
3 C 1.215 7.8 0.18
3 C 1.23 8.5 0.2
3 C 1.245 8.3 0.19
3 C 1.26 9.7 0.21
3 C 1.275 7.6 0.14
3 C 1.29 5.8 0.13
3 C 1.305 6.4 0.2
3 C 1.365 9 0.21
3 C 1.38 8.7 0.2
3 C 1.395 9.1 0.2
4 M 0.015 1.6 0.08
4 M 0.03 9.8 0.18
4 M 0.045 10.9 0.2
4 M 0.06 11 0.21
4 M 0.075 10.3 0.22
4 M 0.09 10.7 0.29
4 M 0.105 12.1 0.26
4 M 0.12 11.2 0.27
4 M 0.135 8.7 0.17
4 M 0.15 8.4 0.14
4 M 0.165 8.1 0.15
4 M 0.18 8.6 0.14
4 M 0.195 7.7 0.13
4 M 0.21 7.7 0.13
4 M 0.225 10.9 0.19
4 M 0.24 10.7 0.26
4 M 0.405 11.8 0.24
4 M 0.42 11.6 0.22
4 M 0.435 11.8 0.24
4 M 0.45 11 0.2
4 M 0.465 11.4 0.19
4 M 0.48 11.1 0.21
4 M 0.495 12.4 0.25
4 M 0.51 12 0.23
4 M 0.525 11.3 0.2
4 M 0.54 11.3 0.2
4 M 0.555 10.7 0.19
4 M 0.57 11.6 0.17
4 M 0.585 10.7 0.21
4 M 0.6 9.9 0.2
4 M 0.615 11.1 0.25
4 M 0.63 12.8 0.31
4 M 0.66 9.2 0.19
4 M 0.675 10.4 0.21
4 M 0.69 11.7 0.24
4 M 0.705 11.9 0.22
4 M 0.72 10.5 0.23
4 M 0.735 11.9 0.24
4 M 0.765 9.3 0.21
4 M 0.78 12.3 0.22
4 M 0.795 11.9 0.23
4 M 0.81 12.2 0.24
4 M 0.825 10.5 0.19
4 M 0.84 9.2 0.17
4 M 0.855 10.7 0.2
4 M 0.87 11.3 0.22
4 M 0.885 11.8 0.25
4 M 0.9 11.4 0.24
4 M 0.915 11.3 0.22
4 M 0.93 9.9 0.2
4 M 0.945 10 0.21
4 M 0.96 10.6 0.2
4 M 0.975 9.7 0.18
4 M 0.99 10.7 0.21
4 M 1.005 10 0.16
4 M 1.02 11.1 0.2
4 M 1.035 9.4 0.2
4 M 1.05 10.9 0.19
4 M 1.065 11.2 0.21
4 M 1.08 11.8 0.22
4 M 1.11 11.8 0.24
4 M 1.125 10.3 0.17
4 M 1.14 11.8 0.21
4 M 1.155 11 0.22
4 M 1.17 12.1 0.22
4 M 1.185 9.8 0.24
4 M 1.2 12.1 0.27
4 M 1.215 7.9 0.15
4 M 1.23 10 0.22
4 M 1.245 9.2 0.19
4 M 1.26 7.4 0.17
4 M 1.275 11.8 0.24
4 M 1.29 11 0.22
4 M 1.305 10.9 0.21
4 M 1.32 11.1 0.22
4 M 1.335 10.8 0.24
4 M 1.35 12 0.3
4 M 1.365 11.6 0.21
4 M 1.38 10 0.21
4 M 1.395 11.7 0.23
4 M 1.425 11 0.24
4 M 1.44 11.1 0.24
4 M 1.455 12.4 0.26
5 M 0.015 2.5 0.04
5 M 0.03 8 0.17
5 M 0.045 8.6 0.19
5 M 0.06 8.7 0.18
5 M 0.075 9.3 0.21
5 M 0.09 9 0.22
5 M 0.105 9.2 0.18
5 M 0.12 9.6 0.19
5 M 0.135 8.2 0.18
5 M 0.15 8.9 0.18
5 M 0.165 10.7 0.27
5 M 0.18 11.1 0.25
5 M 0.195 9 0.2
5 M 0.21 9.5 0.21
5 M 0.225 9.2 0.24
5 M 0.24 8.9 0.21
5 M 0.255 10.6 0.24
5 M 0.27 9.6 0.21
5 M 0.285 7.1 0.17
5 M 0.3 6.8 0.15
5 M 0.315 8.4 0.2
5 M 0.33 8.3 0.19
5 M 0.345 9.6 0.22
5 M 0.36 8.2 0.19
5 M 0.375 9.4 0.23
5 M 0.39 5.8 0.13
5 M 0.405 5.7 0.15
5 M 0.42 7.2 0.17
5 M 0.435 6.6 0.18
5 M 0.45 6.3 0.19
5 M 1.005 8.7 0.2
5 M 1.02 10 0.21
5 M 1.035 10.5 0.2
5 M 1.05 9.1 0.18
5 M 1.065 9.2 0.19
5 M 1.08 9.9 0.2
5 M 1.095 9.8 0.2
5 M 1.11 8.8 0.19
5 M 1.125 11.1 0.24
5 M 1.14 10.8 0.25
5 M 1.155 10.9 0.22
5 M 1.17 12.1 0.29
5 M 1.185 11.9 0.32
5 M 1.2 10.3 0.19
5 M 1.215 10.5 0.21
5 M 1.23 9.6 0.21
5 M 1.245 10.1 0.25
5 M 1.26 10.3 0.25
5 M 1.275 10.1 0.23
5 M 1.29 10.4 0.23
5 M 1.305 10.8 0.25
5 M 1.32 9.5 0.19
6 M 0.015 4 0.15
6 M 0.03 5 0.15
6 M 0.24 8.1 0.15
6 M 0.255 7.6 0.17
6 M 0.27 7.9 0.17
6 M 0.285 8.2 0.17
6 M 0.3 8.1 0.16
6 M 0.315 8.6 0.16
6 M 0.33 5.7 0.08
6 M 0.345 11.3 0.22
6 M 0.36 14.2 0.23
6 M 0.375 10.9 0.23
6 M 0.39 9.3 0.2
6 M 0.405 11.5 0.2
6 M 0.42 11.1 0.21
6 M 0.435 10.1 0.19
6 M 0.45 9.8 0.17
6 M 0.465 11.6 0.24
6 M 0.48 9.9 0.22
6 M 0.495 9.2 0.19
6 M 0.51 11.3 0.23
6 M 0.525 9.9 0.19
6 M 0.54 10 0.16
6 M 0.555 11.3 0.25
6 M 0.78 9.5 0.18
6 M 0.795 9 0.19
6 M 0.81 11.4 0.22
6 M 0.825 9.6 0.24
6 M 0.84 11.3 0.24
6 M 0.855 9.6 0.22
6 M 0.87 10.1 0.26
6 M 0.885 10.7 0.24
6 M 0.945 11.4 0.24
6 M 1.005 10.6 0.24
6 M 1.02 10.1 0.23
6 M 1.035 10.7 0.23
6 M 1.05 10 0.23
6 M 1.065 9.9 0.23
6 M 1.095 10 0.24
7 A 0.015 1.4 0.04
7 A 0.03 8.7 0.23
7 A 0.045 8.3 0.17
7 A 0.06 7.5 0.16
7 A 0.075 7.9 0.16
7 A 0.09 7.9 0.16
7 A 0.105 7.4 0.16
7 A 0.12 7.3 0.15
7 A 0.135 7.1 0.15
7 A 0.15 6.8 0.14
7 A 0.165 7.5 0.13
7 A 0.18 9.7 0.2
7 A 0.195 5.9 0.12
7 A 0.21 6.1 0.14
7 A 0.255 4.5 0.09
7 A 0.27 5.5 0.12
7 A 0.285 5.1 0.1
7 A 0.3 5.7 0.12
7 A 0.315 6.8 0.16
7 A 0.33 6.4 0.16
7 A 0.345 7.5 0.19
7 A 0.39 4.7 0.15
7 A 0.405 7 0.17
7 A 0.42 6.7 0.16
7 A 0.435 7.4 0.17
7 A 0.45 6.7 0.13
7 A 0.465 7.6 0.17
7 A 0.48 7 0.17
7 A 0.495 7.2 0.16
7 A 0.525 6 0.11
7 A 0.54 7.6 0.17
7 A 0.735 7.6 0.18
7 A 0.75 7.7 0.14
7 A 0.765 10.1 0.22
7 A 0.78 11.9 0.27
7 A 0.795 10.2 0.18
7 A 0.81 8.9 0.19
7 A 0.825 6.4 0.14
7 A 0.84 7 0.18
7 A 0.855 9.5 0.23
7 A 0.87 10.5 0.23
7 A 0.885 8.8 0.24
7 A 0.9 4.6 0.1
7 A 0.915 8.9 0.23
7 A 0.93 9.9 0.24
7 A 0.945 12.2 0.22
7 A 0.96 10.7 0.22
7 A 0.975 11.1 0.22
7 A 0.99 9.7 0.23
7 A 1.005 10.2 0.21
7 A 1.02 9.1 0.2
7 A 1.035 9.1 0.21
7 A 1.05 10 0.28
7 A 1.065 10.7 0.23
7 A 1.08 11.5 0.26
7 A 1.095 10.7 0.26
7 A 1.11 9.1 0.22
7 A 1.125 9.4 0.23
7 A 1.14 10.1 0.23
7 A 1.155 11.2 0.24
7 A 1.17 11.1 0.25
7 A 1.185 11.5 0.27
7 A 1.2 10.6 0.21
7 A 1.215 9.1 0.22
7 A 1.23 10.3 0.25
7 A 1.245 10.9 0.24
7 A 1.26 9.8 0.21
7 A 1.275 7.1 0.1
7 A 1.29 9.9 0.22
7 A 1.305 8.3 0.22
7 A 1.32 11.5 0.28
7 A 1.335 8.9 0.2
7 A 1.35 10.2 0.2
7 A 1.365 9.1 0.2
7 A 1.38 12.6 0.3
8 A 0.015 5.5 0.1
8 A 0.03 10.1 0.25
8 A 0.045 6.9 0.16
8 A 0.06 7.8 0.14
8 A 0.105 5.3 0.11
8 A 0.12 6.6 0.14
8 A 0.135 10.4 0.22
8 A 0.15 9.8 0.24
8 A 0.165 7.2 0.14
8 A 0.18 7.9 0.19
8 A 0.195 8.6 0.19
8 A 0.21 8.5 0.16
8 A 0.225 8.4 0.16
8 A 0.24 5.1 0.07
8 A 0.255 9.2 0.14
8 A 0.27 9.1 0.22
8 A 0.285 9.8 0.19
8 A 0.3 8.9 0.17
8 A 0.315 7.6 0.17
8 A 0.33 9.5 0.21
8 A 0.345 10.4 0.23
8 A 0.36 13.5 0.37
8 A 0.375 8.4 0.2
8 A 0.39 7.1 0.15
8 A 0.405 7.2 0.15
8 A 0.42 9.3 0.15
8 A 0.435 7.9 0.14
8 A 0.45 7.5 0.15
8 A 0.465 7 0.12
8 A 0.48 8.7 0.21
8 A 0.495 9.7 0.19
8 A 0.51 10.6 0.2
8 A 0.525 12.1 0.22
8 A 0.54 13.8 0.22
8 A 0.555 10.3 0.21
8 A 0.57 11.2 0.25
8 A 0.585 11.6 0.27
8 A 0.6 9.1 0.24
8 A 0.615 8.2 0.2
8 A 0.63 7.9 0.19
8 A 0.645 8.9 0.18
8 A 0.66 9.9 0.22
8 A 0.675 10 0.22
8 A 0.69 8 0.17
8 A 0.705 7.1 0.16
8 A 0.72 9.4 0.19
8 A 0.735 11.5 0.23
8 A 0.78 8.3 0.19
8 A 0.795 8.7 0.17
8 A 0.81 7.3 0.17
8 A 0.825 7.3 0.17
8 A 0.84 8.2 0.19
8 A 0.855 9.7 0.2
8 A 0.87 9.8 0.2
8 A 0.885 6 0.14
8 A 0.9 7.6 0.17
8 A 1.32 9.1 0.18
8 A 1.335 10.5 0.23
8 A 1.35 10.5 0.22
8 A 1.365 8.9 0.14
8 A 1.38 13.4 0.31
8 A 1.395 12.6 0.24
8 A 1.41 11.7 0.23
8 A 1.425 10.6 0.22
8 A 1.44 11.5 0.21
8 A 1.455 10.1 0.19
8 A 1.47 9.7 0.19
8 A 1.485 12.3 0.24
8 A 1.5 9.5 0.21
9 A 0.015 12.3 0.36
9 A 0.03 11.3 0.27
9 A 0.045 8.9 0.17
9 A 0.06 9.4 0.19
9 A 0.075 9.1 0.18
9 A 0.09 8.4 0.15
9 A 0.105 5.2 0.1
9 A 0.12 4.8 0.09
9 A 0.135 4.9 0.1
9 A 0.15 6.9 0.14
9 A 0.165 7.7 0.18
9 A 0.18 7.4 0.16
9 A 0.195 8.1 0.17
9 A 0.21 8.4 0.21
9 A 0.225 8 0.19
9 A 0.24 7.2 0.17
9 A 0.255 6.7 0.12
9 A 0.27 8.5 0.17
9 A 0.285 8.7 0.2
9 A 0.3 9.1 0.15
9 A 0.315 8.3 0.19
9 A 0.33 7.6 0.19
9 A 0.345 8.4 0.21
9 A 0.36 9 0.21
9 A 0.375 7.8 0.17
9 A 0.39 4 0.08
9 A 0.63 7.7 0.2
9 A 0.645 8.4 0.18
9 A 0.66 8 0.14
9 A 0.675 8 0.18
9 A 0.69 8 0.16
9 A 0.705 6.5 0.14
9 A 0.72 7.9 0.21
9 A 0.735 8.8 0.2
9 A 0.75 9.3 0.18
9 A 0.765 8.1 0.18
9 A 0.78 11.4 0.43
9 A 0.9 10 0.12
9 A 0.915 10.7 0.2
9 A 0.93 11.2 0.22
9 A 0.945 10.1 0.19
9 A 0.96 8.9 0.16
9 A 0.975 8.9 0.2
9 A 0.99 8.5 0.19
9 A 1.005 9.8 0.22
## Adding a penalized truncated power basis class and methods
## as favoured by Ruppert, Wand and Carroll (2003)
## Semiparametric regression CUP. (No advantage to actually
## using this, since mgcv can happily handle non-identity
## penalties.)
smooth.construct.tr.smooth.spec<-function(object,data,knots) {
## a truncated power spline constructor method function
## object$p.order = null space dimension
m <- object$p.order[1]
if (is.na(m)) m <- 2 ## default
if (m<1) stop("silly m supplied")
if (object$bs.dim<0) object$bs.dim <- 10 ## default
nk<-object$bs.dim-m-1 ## number of knots
if (nk<=0) stop("k too small for m")
x <- data[[object$term]] ## the data
x.shift <- mean(x) # shift used to enhance stability
k <- knots[[object$term]] ## will be NULL if none supplied
if (is.null(k)) # space knots through data
{ n<-length(x)
k<-quantile(x[2:(n-1)],seq(0,1,length=nk+2))[2:(nk+1)]
}
if (length(k)!=nk) # right number of knots?
stop(paste("there should be ",nk," supplied knots"))
x <- x - x.shift # basis stabilizing shift
k <- k - x.shift # knots treated the same!
X<-matrix(0,length(x),object$bs.dim)
for (i in 1:(m+1)) X[,i] <- x^(i-1)
for (i in 1:nk) X[,i+m+1]<-(x-k[i])^m*as.numeric(x>k[i])
object$X<-X # the finished model matrix
if (!object$fixed) # create the penalty matrix
{ object$S[[1]]<-diag(c(rep(0,m+1),rep(1,nk)))
}
object$rank<-nk # penalty rank
object$null.space.dim <- m+1 # dim. of unpenalized space
## store "tr" specific stuff ...
object$knots<-k;object$m<-m;object$x.shift <- x.shift
object$df<-ncol(object$X) # maximum DoF (if unconstrained)
class(object)<-"tr.smooth" # Give object a class
object
}
Predict.matrix.tr.smooth<-function(object,data) {
## prediction method function for the `tr' smooth class
x <- data[[object$term]]
x <- x - object$x.shift # stabilizing shift
m <- object$m; # spline order (3=cubic)
k<-object$knots # knot locations
nk<-length(k) # number of knots
X<-matrix(0,length(x),object$bs.dim)
for (i in 1:(m+1)) X[,i] <- x^(i-1)
for (i in 1:nk) X[,i+m+1] <- (x-k[i])^m*as.numeric(x>k[i])
X # return the prediction matrix
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment