Skip to content
Prev 369827 / 398503 Next

"reverse" quantile function

Peter,
thanks, very nice, this will work for me... could you also help with setting up the code to run the on liner "approx(sort(x), seq(0,1,,length(x)), q)$y" on the rows of a data frame using my example above? So if I cbind z and res,?
df<-cbind(z,res)

the "x" in your one liner would be the first 4 column values of each row and "q" is the last (5fth) column value of each row..
thanks again for all the help,?Andras Farkas
On Friday, June 16, 2017 4:58 AM, peter dalgaard <pdalgd at gmail.com> wrote:
It would depend on which one of the 9 quantile definitions you are using. The discontinuous ones aren't invertible, and the continuous ones won't be either, if there are ties in the data. 

This said, it should just be a matter of setting up the inverse of a piecewise linear function. To set ideas, try 

x <- rnorm(5)
curve(quantile(x,p), xname="p")

The breakpoints for the default quantiles are n points evenly spread on [0,1], including the endpoints; i.e., for n=5, (0, .25, .5, .75, 1) 

So:

x <- rnorm(5)
br <- seq(0, 1, ,5)
qq <- quantile(x, br) ## actually == sort(x)

pfun <- approxfun(qq, br)
(q <- quantile(x, .1234))
pfun(q)


There are variations, e.g. the one-liner

approx(sort(x), seq(0,1,,length(x)), q)$y

-pd