This tutorial explains how you can use qnorm() in R with examples.
qnorm(p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE)
- p: the probability.
- mean: The mean of the normal distribution sample data. The default value is 0.
- sd: The standard deviation. The default value is 1.
- lower.tail: By default, lower.tail = TRUE. It means that CDF is calculated from left (lower tail) to right (higher tail).
- log.p: The default value is FALSE. If TRUE, p provided in the function is a log-value.
How is qnorm() calculated in R?
It return the quantile (i.e., value on the x-axis) for the probability of p. For instance, qnorm(0.5) will return the quantile 0 for probability 0.5.
Visually, 0.5 is area of the purple region under the bell-shaped curve, and 0 is the value of x-axis.
As we can see, qnorm() is just the inverse of pnorm().
Example 1
qnorm(0.5) and qnorm(0.5, 0, 1) will return the same value (i.e., 0), since the default values for qnorm are mean = 0 and sd =1. 0 is the quantile corresponding with the probability of 0.5.
> qnorm(0.5) [1] 0 > qnorm(0.5,0,1) [1] 0
Example 2: lower.tail = TRUE vs. FALSE
By default, qnorm() uses lower.tail = TRUE. It means that it calculates the probability CDF from left to right.
The following examples assume lower.tail = TRUE. Thus, with and without lower.tail = TRUE will generate the same result.
> qnorm(0.95) [1] 1.644854 > qnorm(0.95,lower.tail = TRUE) [1] 1.644854 > > qnorm(0.05) [1] -1.644854 > qnorm(0.05,lower.tail = TRUE) [1] -1.644854
The following examples set lower.tail = FALSE
, which makes the CDF calculated from right to left. You will see they generate opposite results.
> qnorm(0.95,lower.tail = FALSE) [1] -1.644854 > > qnorm(0.05,lower.tail = FALSE) [1] 1.644854
Example 3: log.p=FALSE
The following examples show the results of log.p=FALSE
in qnorm(). Note that, log.p=FALSE
is the default for qnorm() and thus they generate the same results.
> qnorm(0.05) [1] -1.644854 > qnorm(0.05, log.p = FALSE) [1] -1.644854
Example 4: log.p=TRUE
If log.p=TRUE, it means that p provided in the function is a log-value.
log(0.05)=-2.995732. Thus, if you set p=-2.995732 as the p and set log.p=TRUE, you should get the same quantile value as qnorm(0.05).
> qnorm(-2.995732, log.p = TRUE) [1] -1.644853
Since log(1) =0 and 1 is the biggest possible p-value, the p provided in function should be a negative value if log.p=TRUE
. If you set p=0 and log.p=TRUE, you should get a quantile of infinite.
> qnorm(0, log.p = TRUE) [1] Inf
Example 5: error of “Warning message: NaNs produced”
If you set p >0 and log.p=TRUE
, you will get Warning message: NaNs produced
. Below is to reproduce such error. This error occur because p here is actually log(p) and should not be greater than 0.
> qnorm(0.05, log.p = TRUE) [1] NaN Warning message: In qnorm(0.05, log.p = TRUE) : NaNs produced