The other day I was looking for a package that did the Quadrant Count Ratio (QCR) in R. I couldn't find one, so I whipped up some simple code to do what I needed to do.

qcr <- function(dat){ n <- nrow(dat); m.x <- mean(dat[,1]); m.y <- mean(dat[,2]); # in QCR we ignore points that are on the mean lines # number of points in Quadrants 1 and 3 q13 <- sum(dat[,1] > mean(dat[,1]) & dat[,2] > mean(dat[,2]))+sum(dat[,1] < mean(dat[,1]) & dat[,2] < mean(dat[,2])) # number of points in Quadrants 2 and 4 q24 <- sum(dat[,1] < mean(dat[,1]) & dat[,2] > mean(dat[,2]))+sum(dat[,1] < mean(dat[,1]) & dat[,2] > mean(dat[,2])) return((q13-q24)/n) }

The above assumes `dat`

is an Nx2 array with column 1 serving as X and column 2 serving as Y. This can easily be changed. I also wrote a little function to plot the mean lines:

plot.qcr <- function(dat){ value <- qcr(dat); plot(dat); abline(v=mean(dat[,1]),col="blue"); # adds a line for x mean abline(h=mean(dat[,2]),col="red"); # adds a line for y mean }

Both of these functions are simple, but I will likely extend and polish them (and then release them as a package). I'd also like to explore what would happen to the QCR if median lines were used instead of mean lines. (This new QCR* would no longer directly motivate Pearson's Product-Moment Correlation, but could have its own set of advantages.) Below is a quick example:

# QCR example set.seed(1) dat.x <- c(1:10) dat.y <- rbinom(10,10,.5) dat <- cbind(dat.x,dat.y) qcr(dat) # [1] 0.6 plot.qcr(dat)

This is the plot:

For more information on the QCR check out this article: Holmes, Peter (2001). “Correlation: From Picture to Formula,” *Teaching Statistics, 23*(3):67–70.

*[Updated on 2013-10-03 to add a link to Wikipedia.]*