# quantile functions: mileage may vary

May 11, 2015
By

(This article was first published on Xi'an's Og » R, and kindly contributed to R-bloggers)

When experimenting with various quantiles functions in R, I was shocked [ok this is a bit excessive, let us say surprised] by how widely the execution times would vary. To the point of blaming a completely different feature of R. Borrowing from Charlie Geyer’s webpage on the topic of probability distributions in R, here is a table for some standard distributions: I ran

```u=runif(1e7)
system.time(x<-qcauchy(u))
```

choosing an arbitrary parameter whenever needed.

Distribution Function Time
Cauchy `qcauchy` 2.2
Chi-Square `qchisq` 43.8
Exponential `qexp` 0.95
F `qf` 34.2
Gamma `qgamma` 37.2
Logistic `qlogis` 1.7
Log Normal `qlnorm` 2.2
Normal `qnorm` 1.4
Student t `qt` 31.7
Uniform `qunif` 0.86
Weibull `qweibull` 2.9

Of course, it does not mean much in that all the slow distributions (except for Weibull) are parameterised. Nonetheless, that a chi-square inversion take 50 times longer than a uniform inversion remains puzzling as to why it is not coded more efficiently. In particular, I was wondering why the chi-square inversion was slower than the Gamma inversion. Rerunning both inversions showed that they are equivalent:

```> u=runif(1e7)
> system.time(x<-qgamma(u,sha=1.5))
utilisateur système écoulé
21.534 0.016 21.532
> system.time(x<-qchisq(u,df=3))
utilisateur système écoulé
21.372 0.008 21.361
```

Which also shows how variable system.time can be.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...