# Example 1: quantile regression with smoothing splines
alldat = data.frame(x = sort(runif(n <- 500)))
mymu = function(x) exp(-2 + 6*sin(2*x-0.2) / (x+0.5)^2)
alldat = transform(alldat, y = rpois(n, lambda=mymu(x)))
mytau = c(0.25, 0.75); mydof = 4
fit = vgam(y ~ s(x, df=mydof), alaplace1(tau=mytau, llocation="loge",
parallelLoc=FALSE), data=alldat, trace=TRUE)
fitp = vgam(y ~ s(x, df=mydof), alaplace1(tau=mytau, llocation="loge",
parallelLoc=TRUE), data=alldat, trace=TRUE)
par(xpd=TRUE, las=1)
mylwd = 1.5
with(alldat, plot(x, jitter(y, factor=0.5), col="red",
main="Example 1; green: parallelLoc=TRUE",
ylab="y", pch="o", cex=0.75))
with(alldat, matlines(x, fitted(fit), col="blue", lty="solid", lwd=mylwd))
with(alldat, matlines(x, fitted(fitp), col="green", lty="solid", lwd=mylwd))
finexgrid = seq(0, 1, len=1001)
for(ii in 1:length(mytau))
lines(finexgrid, qpois(p=mytau[ii], lambda=mymu(finexgrid)),
col="blue", lwd=mylwd)
fit@extra # Contains useful information
# Example 2: regression quantile at a new tau value from an existing fit
# Nb. regression splines are used here since it is easier.
fitp2 = vglm(y ~ bs(x, df=mydof),
family = alaplace1(tau=mytau, llocation="loge",
parallelLoc=TRUE),
data=alldat, trace=TRUE)
newtau = 0.5 # Want to refit the model with this tau value
fitp3 = vglm(y ~ 1 + offset(predict(fitp2)[,1]),
family = alaplace1(tau=newtau, llocation="loge"),
data=alldat)
with(alldat, plot(x, jitter(y, factor=0.5), col="red", ylab="y",
pch="o", cex=0.75,
main="Example 2; parallelLoc=TRUE"))
with(alldat, matlines(x, fitted(fitp2), col="blue", lty="solid", lwd=mylwd))
with(alldat, matlines(x, fitted(fitp3), col="black", lty="solid", lwd=mylwd))
Run the code above in your browser using DataLab