Here a Tau, there a Tau… Plotting Quantile Regressions

I’ve ended up digging into quantile regression a bit lately (see this excellent gentle introduction to quantile regression
for ecologists
[pdf] for what it is and some great reasons why to use it -see also here and here). In R this is done via the quantreg package, which is pretty nice, and has some great plotting diagnostics, etc. But what it doesn’t have out of the box is a way to simply plot your data, and then overlay quantile regression lines at different levels of tau.

The documentation has a nice example of how to do it, but it’s long tedious code. And I had to quickly whip up a few plots for different models.

So, meh, I took the tedious code and wrapped it into a quickie function. Which I dorp here for your delectation. Unless you have some better fancier way to do it (which I’d love to see – especially for ggplot….)

Here’s the function:

quantRegLines <- function(rq_obj, lincol="red", ...){  
   #get the taus
   taus <- rq_obj$tau
   #get x
   x <- rq_obj$x[,2] #assumes no intercept
   xx <- seq(min(x, na.rm=T),max(x, na.rm=T),1)
   #calculate y over all taus
   f <- coef(rq_obj)  
   yy <- cbind(1,xx)%*%f
   if(length(lincol)==1) lincol=rep(lincol, length(taus))
   #plot all lines
   for(i in 1:length(taus)){
     lines(xx,yy[,i], col=lincol[i], ...)

And an example use.

taus <- c(.05,.1,.25,.75,.9,.95)
 plot(income,foodexp,xlab="Household Income",
      ylab="Food Expenditure",
      pch=19, col=alpha("black", 0.5))
 rq_fit <- rq((foodexp)~(income),tau=taus)

Oh, and I set it up to make pretty colors in plots, too.

plot(income, foodexp, xlab = "Household Income", 
    ylab = "Food Expenditure", 
    pch = 19, col = alpha("black", 0.5))

quantRegLines(rq_fit, rainbow(6))
legend(4000, 1000, taus, rainbow(6), title = "Tau")

All of this is in a repo over at github (natch), so, fork and play.

One thought on “Here a Tau, there a Tau… Plotting Quantile Regressions

  1. Pingback: Here a Tau, there a Tau… Plotting Quantile Regressions - R Project Aggregate

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>