pp <- c(.001, .005, .01, .05, (1:9)/10, .95, .99, .995, .999)
z_p <- qnorm(pp)
(R <- cbind(pp, z_p, qA = qnormAppr(pp),
qUA = qnormUappr(pp, lower.tail= TRUE),
qA6 = qnormUappr6(pp, lower.tail=TRUE)))
## Errors, absolute and relative:
cbind(pp, (relE <- cbind(
errA = z_p - R[,"qA" ],
errUA = z_p - R[,"qUA"],
rE.A = 1 - R[,"qA" ]/z_p,
rE.UA = 1 - R[,"qUA"]/z_p,
rE.A6 = 1 - R[,"qA6"]/z_p)))
lp <- -c(1000, 500, 200, 100, 50, 20:10, seq(9.75, 0, by = -1/8))
qnormUappr(lp=lp) # 'p' need not be specified if 'lp' is
curve(qnorm(x, lower.tail=FALSE), n=1001)
curve(qnormUappr(x), add=TRUE, n=1001, col = adjustcolor("red", 1/2))
## Error curve:
curve(qnormUappr(x) - qnorm(x, lower.tail=FALSE), n=1001,
main = "Absolute Error of qnormUappr(x)")
abline(h=0, v=1/2, lty=2, col="gray")
curve(qnormUappr(x) / qnorm(x, lower.tail=FALSE) - 1, n=1001,
main = "Relative Error of qnormUappr(x)")
abline(h=0, v=1/2, lty=2, col="gray")
curve(qnormUappr(lp=x) / qnorm(x, log.p=TRUE) - 1, -200, -1, n=1001,
main = "Relative Error of qnormUappr(lp=x)"); mtext(" & qnormUappr6() [log.p scale]", col=2)
curve(qnormUappr6(lp=x) / qnorm(x, log.p=TRUE) - 1, add=TRUE, col=2, n=1001)
abline(h=0, v=1/2, lty=2, col="gray")
curve(qnormUappr(lp=x) / qnorm(x, log.p=TRUE) - 1,
-2000, -.1, ylim = c(-2e-4, 1e-4), n=1001,
main = "Relative Error of qnormUappr(lp=x)"); mtext(" & qnormUappr6() [log.p scale]", col=2)
curve(qnormUappr6(lp=x) / qnorm(x, log.p=TRUE) - 1, add=TRUE, col=2, n=1001)
abline(h=0, v=1/2, lty=2, col="gray")
## zoom out much more --> see jump (to be closer to truth) at ~ x = -650'000:
curve(qnormUappr(lp=x) / qnorm(x, log.p=TRUE) - 1,
-800000, -.1, ylim = 2e-5*c(-1,1), n=1001,
main = "Relative Error of qnormUappr(lp=x) [log.p scale]")
abline(h=0, v=1/2, lty=2, col="gray")
(t_ <- pretty(sqrt(-2*c(-830000, 0))))
axis(3, at=-t_^2/2, labels=t_, mgp=c(1.3, .4,0))
Run the code above in your browser using DataLab