1####	d|ensity
2####	p|robability (cumulative)
3####	q|uantile
4####	r|andom number generation
5####
6####	Functions for  ``d/p/q/r''
7
8F <- FALSE
9T <- TRUE
10showSys.time <- function(expr, ...) {
11    ## prepend 'Time' for R CMD Rdiff
12    st <- system.time(expr, ...)
13    writeLines(paste("Time", capture.output(print(st))))
14    invisible(st)
15}
16
17options(warn = 2)
18##      ======== No warnings, unless explicitly asserted via
19assertWarning <- tools::assertWarning
20
21as.nan <- function(x) { x[is.na(x) & !is.nan(x)] <- NaN ; x }
22###-- these are identical in ./arith-true.R ["fixme": use source(..)]
23opt.conformance <- 0
24Meps <- .Machine $ double.eps
25xMax <- .Machine $ double.xmax
26options(rErr.eps = 1e-30)
27rErr <- function(approx, true, eps = getOption("rErr.eps", 1e-30))
28{
29    ifelse(Mod(true) >= eps,
30	   1 - approx / true, # relative error
31	   true - approx)     # absolute error (e.g. when true=0)
32}
33## Numerical equality: Here want "rel.error" almost always:
34All.eq <- function(x,y) {
35    all.equal.numeric(x,y, tolerance = 64*.Machine$double.eps,
36                      scale = max(0, mean(abs(x), na.rm=TRUE)))
37}
38if(!interactive())
39    set.seed(123)
40
41.ptime <- proc.time()
42
43## The prefixes of ALL the PDQ & R functions
44PDQRinteg <- c("binom", "geom", "hyper", "nbinom", "pois","signrank","wilcox")
45PDQR <- c(PDQRinteg, "beta", "cauchy", "chisq", "exp", "f", "gamma",
46	  "lnorm", "logis", "norm", "t","unif","weibull")
47PQonly <- c("tukey")
48
49###--- Discrete Distributions --- Consistency Checks  pZZ = cumsum(dZZ)
50
51##for(pre in PDQRinteg) { n <- paste("d",pre,sep=""); cat(n,": "); str(get(n))}
52
53##__ 1. Binomial __
54
55## Cumulative Binomial '==' Cumulative F :
56## Abramowitz & Stegun, p.945-6;  26.5.24  AND	26.5.28 :
57n0 <- 50; n1 <- 16; n2 <- 20; n3 <- 8
58for(n in rbinom(n1, size = 2*n0, p = .4)) {
59    for(p in c(0,1,rbeta(n2, 2,4))) {
60	for(k in rbinom(n3, size = n,  prob = runif(1)))
61	    ## For X ~ Bin(n,p), compute 1 - P[X > k] = P[X <= k] in three ways:
62	    stopifnot(all.equal(       pbinom(0:k, size = n, prob = p),
63				cumsum(dbinom(0:k, size = n, prob = p))),
64		      all.equal(if(k==n || p==0) 1 else
65				pf((k+1)/(n-k)*(1-p)/p, df1=2*(n-k), df2=2*(k+1)),
66				sum(dbinom(0:k, size = n, prob = p))))
67    }
68}
69
70##__ 2. Geometric __
71for(pr in seq(1e-10,1,len=15)) # p=0 is not a distribution
72    stopifnot(All.eq((dg <- dgeom(0:10, pr)),
73		     pr * (1-pr)^(0:10)),
74	      All.eq(cumsum(dg), pgeom(0:10, pr)))
75
76
77##__ 3. Hypergeometric __
78
79.suppHyper <- function(m,n,k) max(0, k-n) : min(k, m)
80hyp.mn <- rbind(m = c(10, 15, 999),
81                n = c( 7,  0,   0))
82for(j in 1:ncol(hyp.mn)) {
83  mn <- hyp.mn[,j]; m <- mn[["m"]] ; n <- mn[["n"]]
84  cat("m=",m,"; n=",n,":\n")
85  showSys.time(for(k in 2:m) {
86    x <- .suppHyper(m,n,k); x <- c(x[1]-1L, x)
87    stopifnot(All.eq(phyper(x, m, n, k), cumsum(dhyper(x, m, n, k))))
88    stopifnot(All.eq(phyper(x, m, n, k, log.p=TRUE),
89          log(cumsum(dhyper(x, m, n, k)))))
90  })
91}
92
93##__ 4. Negative Binomial __
94
95## PR #842
96for(size in seq(0.8,2, by=.1))
97    stopifnot(all.equal(cumsum(dnbinom(0:7, size, .5)),
98			       pnbinom(0:7, size, .5)))
99stopifnot(All.eq(pnbinom(c(1,3), .9, .5),
100		 c(0.777035760338812, 0.946945347071519)))
101
102##__ 5. Poisson __
103
104stopifnot(dpois(0:5,0)		 == c(1, rep(0,5)),
105	  dpois(0:5,0, log=TRUE) == c(0, rep(-Inf, 5)))
106
107## Cumulative Poisson '==' Cumulative Chi^2 :
108## Abramowitz & Stegun, p.941 :	 26.4.21 (26.4.2)
109n1 <- 20; n2 <- 16
110for(lambda in rexp(n1))
111    for(k in rpois(n2, lambda))
112	stopifnot(all.equal(pchisq(2*lambda, 2*(1+ 0:k), lower.tail = FALSE),
113			    pp <- cumsum(dpois(0:k, lambda=lambda)),
114			    tolerance = 100*Meps),
115		  all.equal(    pp, ppois(0:k, lambda=lambda), tolerance = 100*Meps),
116		  all.equal(1 - pp, ppois(0:k, lambda=lambda, lower.tail = FALSE)))
117
118
119##__ 6. SignRank __
120for(n in rpois(32, lam=8)) {
121    x <- -1:(n + 4)
122    stopifnot(All.eq(psignrank(x, n), cumsum(dsignrank(x, n))))
123}
124
125##__ 7. Wilcoxon (symmetry & cumulative) __
126is.sym <- TRUE
127for(n in rpois(5, lam=6))
128    for(m in rpois(15, lam=8)) {
129	x <- -1:(n*m + 1)
130	fx <- dwilcox(x, n, m)
131	Fx <- pwilcox(x, n, m)
132	is.sym <- is.sym & all(fx == dwilcox(x, m, n))
133	stopifnot(All.eq(Fx, cumsum(fx)))
134    }
135stopifnot(is.sym)
136
137
138###-------- Continuous Distributions ----------
139
140##---  Gamma (incl. central chi^2) Density :
141x <- round(rgamma(100, shape = 2),2)
142for(sh in round(rlnorm(30),2)) {
143    Ga <- gamma(sh)
144    for(sig in round(rlnorm(30),2))
145	stopifnot(all.equal((d1 <- dgamma(	 x,   shape = sh, scale = sig)),
146                            (d2 <- dgamma(x/sig, shape = sh, scale = 1) / sig),
147                            tolerance = 1e-14)## __ad interim__ was 1e-15
148                  ,
149                  All.eq(d1, (d3 <- 1/(Ga * sig^sh) * x^(sh-1) * exp(-x/sig)))
150                  )
151}
152
153stopifnot(pgamma(1,Inf,scale=Inf) == 0)
154## Also pgamma(Inf,Inf) == 1 for which NaN was slightly more appropriate
155assertWarning(stopifnot(
156    is.nan(c(pgamma(Inf,  1,scale=Inf),
157             pgamma(Inf,Inf,scale=Inf)))))
158scLrg <- c(2,100, 1e300*c(.1, 1,10,100), 1e307, xMax, Inf)
159stopifnot(pgamma(Inf, 1, scale=xMax) == 1,
160          pgamma(xMax,1, scale=Inf) == 0,
161          all.equal(pgamma(1e300, 2, scale= scLrg, log=TRUE),
162                    c(0, 0, -0.000499523968713701, -1.33089326820406,
163                      -5.36470502873211, -9.91015144019122,
164                      -32.9293385491433, -38.707517174609, -Inf),
165                    tolerance = 2e-15)
166          )
167
168p <- 7e-4; df <- 0.9
169stopifnot(
170abs(1-c(pchisq(qchisq(p, df),df)/p, # was 2.31e-8 for R <= 1.8.1
171        pchisq(qchisq(1-p, df,lower=FALSE),df,lower=FALSE)/(1-p),# was 1.618e-11
172        pchisq(qchisq(log(p), df,log=TRUE),df, log=TRUE)/log(p), # was 3.181e-9
173        pchisq(qchisq(log1p(-p),df,log=T,lower=F),df, log=T,lower=F)/log1p(-p)
174        )# 32b-i386: (2.2e-16, 0,0, 3.3e-16); Opteron: (2.2e-16, 0,0, 2.2e-15)
175    ) < 1e-14
176)
177
178##-- non central Chi^2 :
179xB <- c(2000,1e6,1e50,Inf)
180for(df in c(0.1, 1, 10))
181    for(ncp in c(0, 1, 10, 100)) stopifnot(pchisq(xB, df=df, ncp=ncp) == 1)
182stopifnot(all.equal(qchisq(0.025,31,ncp=1,lower.tail=FALSE),# inf.loop PR#875
183                    49.7766246561514, tolerance = 1e-11))
184for(df in c(0.1, 0.5, 1.5, 4.7, 10, 20,50,100)) {
185    xx <- c(10^-(5:1), .9, 1.2, df + c(3,7,20,30,35,38))
186    pp <- pchisq(xx, df=df, ncp = 1) #print(pp)
187    dtol <- 1e-12 *(if(2 < df && df <= 50) 64 else if(df > 50) 20000 else 501)
188    stopifnot(all.equal(xx, qchisq(pp, df=df, ncp=1), tolerance = dtol))
189}
190
191## p ~= 1 (<==> 1-p ~= 0) -- gave infinite loop in R <= 1.8.1 -- PR#6421
192psml <- 2^-(10:54)
193q0 <- qchisq(psml,    df=1.2, ncp=10, lower.tail=FALSE)
194q1 <- qchisq(1-psml, df=1.2, ncp=10) # inaccurate in the tail
195p0 <- pchisq(q0, df=1.2, ncp=10, lower.tail=FALSE)
196p1 <- pchisq(q1, df=1.2, ncp=10, lower.tail=FALSE)
197iO <- 1:30
198stopifnot(all.equal(q0[iO], q1[iO], tolerance = 1e-5),# 9.86e-8
199          all.equal(p0[iO], psml[iO])) # 1.07e-13
200
201##--- Beta (need more):
202
203## big a & b (PR #643)
204stopifnot(is.finite(a <- rlnorm(20, 5.5)), a > 0,
205          is.finite(b <- rlnorm(20, 6.5)), b > 0)
206pab <- expand.grid(seq(0,1,by=.1), a, b)
207p <- pab[,1]; a <- pab[,2]; b <- pab[,3]
208stopifnot(all.equal(dbeta(p,a,b),
209                    exp(pab <- dbeta(p,a,b, log = TRUE)), tolerance = 1e-11))
210sp <- sample(pab, 50)
211if(!interactive())
212stopifnot(which(isI <- sp == -Inf) ==
213              c(3, 10, 14, 18, 24, 32, 35, 41, 42, 45, 46, 47),
214          all.equal(range(sp[!isI]), c(-2888.393250, 3.181137))
215          )
216
217
218##--- Normal (& Lognormal) :
219
220stopifnot(
221    qnorm(0) == -Inf, qnorm(-Inf, log = TRUE) == -Inf,
222    qnorm(1) ==  Inf, qnorm( 0,   log = TRUE) ==  Inf)
223
224assertWarning(stopifnot(
225    is.nan(qnorm(1.1)),
226    is.nan(qnorm(-.1))))
227
228x <- c(-Inf, -1e100, 1:6, 1e200, Inf)
229stopifnot(
230    dnorm(x,3,s=0) == c(0,0,0,0, Inf, 0,0,0,0,0),
231    pnorm(x,3,s=0) == c(0,0,0,0,  1 , 1,1,1,1,1),
232    dnorm(x,3,s=Inf) == 0,
233    pnorm(x,3,s=Inf) == c(0, rep(0.5, 8), 1))
234
235## 3 Test data from Wichura (1988) :
236stopifnot(
237    all.equal(qnorm(c( 0.25,  .001, 1e-20)),
238	      c(-0.6744897501960817, -3.090232306167814, -9.262340089798408),
239	      tolerance = 1e-15)
240  , ## extreme tail -- available on log scale only:
241    all.equal(qnorm(-1e5, log = TRUE), -447.1974945)
242)
243
244z <- rnorm(1000); all.equal(pnorm(z),  1 - pnorm(-z), tolerance = 1e-15)
245z <- c(-Inf,Inf,NA,NaN, rt(1000, df=2))
246z.ok <- z > -37.5 | !is.finite(z)
247for(df in 1:10) stopifnot(all.equal(pt(z, df), 1 - pt(-z,df), tolerance = 1e-15))
248
249stopifnot(All.eq(pz <- pnorm(z), 1 - pnorm(z, lower=FALSE)),
250          All.eq(pz,		    pnorm(-z, lower=FALSE)),
251          All.eq(log(pz[z.ok]), pnorm(z[z.ok], log=TRUE)))
252y <- seq(-70,0, by = 10)
253cbind(y, "log(pnorm(y))"= log(pnorm(y)), "pnorm(y, log=T)"= pnorm(y, log=TRUE))
254y <- c(1:15, seq(20,40, by=5))
255cbind(y, "log(pnorm(y))"= log(pnorm(y)), "pnorm(y, log=T)"= pnorm(y, log=TRUE),
256      "log(pnorm(-y))"= log(pnorm(-y)), "pnorm(-y, log=T)"= pnorm(-y, log=TRUE))
257## Symmetry:
258y <- c(1:50,10^c(3:10,20,50,150,250))
259y <- c(-y,0,y)
260for(L in c(FALSE,TRUE))
261    stopifnot(identical(pnorm(-y, log= L),
262			pnorm(+y, log= L, lower=FALSE)))
263
264## Log norm
265stopifnot(All.eq(pz, plnorm(exp(z))))
266
267
268###==========  p <-> q	Inversion consistency =====================
269ok <- 1e-5 < pz & pz < 1 - 1e-5
270all.equal(z[ok], qnorm(pz[ok]), tolerance = 1e-12)
271
272###===== Random numbers -- first, just output:
273
274set.seed(123)
275# .Random.seed <- c(0L, 17292L, 29447L, 24113L)
276n <- 20
277## for(pre in PDQR) { n <- paste("r",pre,sep=""); cat(n,": "); str(get(n))}
278(Rbeta	  <- rbeta    (n, shape1 = .8, shape2 = 2) )
279(Rbinom	  <- rbinom   (n, size = 55, prob = pi/16) )
280(Rcauchy  <- rcauchy  (n, location = 12, scale = 2) )
281(Rchisq	  <- rchisq   (n, df = 3) )
282(Rexp	  <- rexp     (n, rate = 2) )
283(Rf	  <- rf	      (n, df1 = 12, df2 = 6) )
284(Rgamma	  <- rgamma   (n, shape = 2, scale = 5) )
285(Rgeom	  <- rgeom    (n, prob = pi/16) )
286(Rhyper	  <- rhyper   (n, m = 40, n = 30, k = 20) )
287(Rlnorm	  <- rlnorm   (n, meanlog = -1, sdlog = 3) )
288(Rlogis	  <- rlogis   (n, location = 12, scale = 2) )
289(Rnbinom  <- rnbinom  (n, size = 7, prob = .01) )
290(Rnorm	  <- rnorm    (n, mean = -1, sd = 3) )
291(Rpois	  <- rpois    (n, lambda = 12) )
292(Rsignrank<- rsignrank(n, n = 47) )
293(Rt	  <- rt	      (n, df = 11) )
294## Rt2 below (to preserve the following random numbers!)
295(Runif	  <- runif    (n, min = .2, max = 2) )
296(Rweibull <- rweibull (n, shape = 3, scale = 2) )
297(Rwilcox  <- rwilcox  (n, m = 13, n = 17) )
298(Rt2	  <- rt	      (n, df = 1.01))
299
300(Pbeta	  <- pbeta    (Rbeta, shape1 = .8, shape2 = 2) )
301(Pbinom	  <- pbinom   (Rbinom, size = 55, prob = pi/16) )
302(Pcauchy  <- pcauchy  (Rcauchy, location = 12, scale = 2) )
303(Pchisq	  <- pchisq   (Rchisq, df = 3) )
304(Pexp	  <- pexp     (Rexp, rate = 2) )
305(Pf	  <- pf	      (Rf, df1 = 12, df2 = 6) )
306(Pgamma	  <- pgamma   (Rgamma, shape = 2, scale = 5) )
307(Pgeom	  <- pgeom    (Rgeom, prob = pi/16) )
308(Phyper	  <- phyper   (Rhyper, m = 40, n = 30, k = 20) )
309(Plnorm	  <- plnorm   (Rlnorm, meanlog = -1, sdlog = 3) )
310(Plogis	  <- plogis   (Rlogis, location = 12, scale = 2) )
311(Pnbinom  <- pnbinom  (Rnbinom, size = 7, prob = .01) )
312(Pnorm	  <- pnorm    (Rnorm, mean = -1, sd = 3) )
313(Ppois	  <- ppois    (Rpois, lambda = 12) )
314(Psignrank<- psignrank(Rsignrank, n = 47) )
315(Pt	  <- pt	      (Rt,  df = 11) )
316(Pt2	  <- pt	      (Rt2, df = 1.01) )
317(Punif	  <- punif    (Runif, min = .2, max = 2) )
318(Pweibull <- pweibull (Rweibull, shape = 3, scale = 2) )
319(Pwilcox  <- pwilcox  (Rwilcox, m = 13, n = 17) )
320
321dbeta	 (Rbeta, shape1 = .8, shape2 = 2)
322dbinom	 (Rbinom, size = 55, prob = pi/16)
323dcauchy	 (Rcauchy, location = 12, scale = 2)
324dchisq	 (Rchisq, df = 3)
325dexp	 (Rexp, rate = 2)
326df	 (Rf, df1 = 12, df2 = 6)
327dgamma	 (Rgamma, shape = 2, scale = 5)
328dgeom	 (Rgeom, prob = pi/16)
329dhyper	 (Rhyper, m = 40, n = 30, k = 20)
330dlnorm	 (Rlnorm, meanlog = -1, sdlog = 3)
331dlogis	 (Rlogis, location = 12, scale = 2)
332dnbinom	 (Rnbinom, size = 7, prob = .01)
333dnorm	 (Rnorm, mean = -1, sd = 3)
334dpois	 (Rpois, lambda = 12)
335dsignrank(Rsignrank, n = 47)
336dt	 (Rt, df = 11)
337dunif	 (Runif, min = .2, max = 2)
338dweibull (Rweibull, shape = 3, scale = 2)
339dwilcox	 (Rwilcox, m = 13, n = 17)
340
341## Check q*(p*(.)) = identity
342All.eq(Rbeta,	  qbeta	   (Pbeta, shape1 = .8, shape2 = 2))
343All.eq(Rbinom,	  qbinom   (Pbinom, size = 55, prob = pi/16))
344All.eq(Rcauchy,	  qcauchy  (Pcauchy, location = 12, scale = 2))
345All.eq(Rchisq,	  qchisq   (Pchisq, df = 3))
346All.eq(Rexp,	  qexp	   (Pexp, rate = 2))
347All.eq(Rf,	  qf	   (Pf, df1 = 12, df2 = 6))
348All.eq(Rgamma,	  qgamma   (Pgamma, shape = 2, scale = 5))
349All.eq(Rgeom,	  qgeom	   (Pgeom, prob = pi/16))
350All.eq(Rhyper,	  qhyper   (Phyper, m = 40, n = 30, k = 20))
351All.eq(Rlnorm,	  qlnorm   (Plnorm, meanlog = -1, sdlog = 3))
352All.eq(Rlogis,	  qlogis   (Plogis, location = 12, scale = 2))
353All.eq(Rnbinom,	  qnbinom  (Pnbinom, size = 7, prob = .01))
354All.eq(Rnorm,	  qnorm	   (Pnorm, mean = -1, sd = 3))
355All.eq(Rpois,	  qpois	   (Ppois, lambda = 12))
356All.eq(Rsignrank, qsignrank(Psignrank, n = 47))
357All.eq(Rt,	  qt	   (Pt,	 df = 11))
358All.eq(Rt2,	  qt	   (Pt2, df = 1.01))
359All.eq(Runif,	  qunif	   (Punif, min = .2, max = 2))
360All.eq(Rweibull,  qweibull (Pweibull, shape = 3, scale = 2))
361All.eq(Rwilcox,	  qwilcox  (Pwilcox, m = 13, n = 17))
362
363## Same with "upper tail":
364All.eq(Rbeta,	  qbeta	   (1- Pbeta, shape1 = .8, shape2 = 2, lower=F))
365All.eq(Rbinom,	  qbinom   (1- Pbinom, size = 55, prob = pi/16, lower=F))
366All.eq(Rcauchy,	  qcauchy  (1- Pcauchy, location = 12, scale = 2, lower=F))
367All.eq(Rchisq,	  qchisq   (1- Pchisq, df = 3, lower=F))
368All.eq(Rexp,	  qexp	   (1- Pexp, rate = 2, lower=F))
369All.eq(Rf,	  qf	   (1- Pf, df1 = 12, df2 = 6, lower=F))
370All.eq(Rgamma,	  qgamma   (1- Pgamma, shape = 2, scale = 5, lower=F))
371All.eq(Rgeom,	  qgeom	   (1- Pgeom, prob = pi/16, lower=F))
372All.eq(Rhyper,	  qhyper   (1- Phyper, m = 40, n = 30, k = 20, lower=F))
373All.eq(Rlnorm,	  qlnorm   (1- Plnorm, meanlog = -1, sdlog = 3, lower=F))
374All.eq(Rlogis,	  qlogis   (1- Plogis, location = 12, scale = 2, lower=F))
375All.eq(Rnbinom,	  qnbinom  (1- Pnbinom, size = 7, prob = .01, lower=F))
376All.eq(Rnorm,	  qnorm	   (1- Pnorm, mean = -1, sd = 3,lower=F))
377All.eq(Rpois,	  qpois	   (1- Ppois, lambda = 12, lower=F))
378All.eq(Rsignrank, qsignrank(1- Psignrank, n = 47, lower=F))
379All.eq(Rt,	  qt	   (1- Pt,  df = 11,   lower=F))
380All.eq(Rt2,	  qt	   (1- Pt2, df = 1.01, lower=F))
381All.eq(Runif,	  qunif	   (1- Punif, min = .2, max = 2, lower=F))
382All.eq(Rweibull,  qweibull (1- Pweibull, shape = 3, scale = 2, lower=F))
383All.eq(Rwilcox,	  qwilcox  (1- Pwilcox, m = 13, n = 17, lower=F))
384
385## Check q*(p* ( log ), log) = identity
386All.eq(Rbeta,	  qbeta	   (log(Pbeta), shape1 = .8, shape2 = 2, log=TRUE))
387All.eq(Rbinom,	  qbinom   (log(Pbinom), size = 55, prob = pi/16, log=TRUE))
388All.eq(Rcauchy,	  qcauchy  (log(Pcauchy), location = 12, scale = 2, log=TRUE))
389All.eq(Rchisq,    qchisq   (log(Pchisq), df = 3, log=TRUE))
390All.eq(Rexp,	  qexp	   (log(Pexp), rate = 2, log=TRUE))
391All.eq(Rf,	  qf	   (log(Pf), df1= 12, df2= 6, log=TRUE))
392All.eq(Rgamma,	  qgamma   (log(Pgamma), shape = 2, scale = 5, log=TRUE))
393All.eq(Rgeom,	  qgeom	   (log(Pgeom), prob = pi/16, log=TRUE))
394All.eq(Rhyper,	  qhyper   (log(Phyper), m = 40, n = 30, k = 20, log=TRUE))
395All.eq(Rlnorm,	  qlnorm   (log(Plnorm), meanlog = -1, sdlog = 3, log=TRUE))
396All.eq(Rlogis,	  qlogis   (log(Plogis), location = 12, scale = 2, log=TRUE))
397All.eq(Rnbinom,	  qnbinom  (log(Pnbinom), size = 7, prob = .01, log=TRUE))
398All.eq(Rnorm,	  qnorm	   (log(Pnorm), mean = -1, sd = 3, log=TRUE))
399All.eq(Rpois,	  qpois	   (log(Ppois), lambda = 12, log=TRUE))
400All.eq(Rsignrank, qsignrank(log(Psignrank), n = 47, log=TRUE))
401All.eq(Rt,	  qt	   (log(Pt), df = 11, log=TRUE))
402All.eq(Rt2,	  qt	   (log(Pt2), df = 1.01, log=TRUE))
403All.eq(Runif,	  qunif	   (log(Punif), min = .2, max = 2, log=TRUE))
404All.eq(Rweibull,  qweibull (log(Pweibull), shape = 3, scale = 2, log=TRUE))
405All.eq(Rwilcox,	  qwilcox  (log(Pwilcox), m = 13, n = 17, log=TRUE))
406
407## same q*(p* (log) log) with upper tail:
408
409All.eq(Rbeta,	  qbeta	   (log1p(-Pbeta), shape1 = .8, shape2 = 2, lower=F, log=T))
410All.eq(Rbinom,	  qbinom   (log1p(-Pbinom), size = 55, prob = pi/16, lower=F, log=T))
411All.eq(Rcauchy,	  qcauchy  (log1p(-Pcauchy), location = 12, scale = 2, lower=F, log=T))
412All.eq(Rchisq,	  qchisq   (log1p(-Pchisq), df = 3, lower=F, log=T))
413All.eq(Rexp,	  qexp	   (log1p(-Pexp), rate = 2, lower=F, log=T))
414All.eq(Rf,	  qf	   (log1p(-Pf), df1 = 12, df2 = 6, lower=F, log=T))
415All.eq(Rgamma,	  qgamma   (log1p(-Pgamma), shape = 2, scale = 5, lower=F, log=T))
416All.eq(Rgeom,	  qgeom	   (log1p(-Pgeom), prob = pi/16, lower=F, log=T))
417All.eq(Rhyper,	  qhyper   (log1p(-Phyper), m = 40, n = 30, k = 20, lower=F, log=T))
418All.eq(Rlnorm,	  qlnorm   (log1p(-Plnorm), meanlog = -1, sdlog = 3, lower=F, log=T))
419All.eq(Rlogis,	  qlogis   (log1p(-Plogis), location = 12, scale = 2, lower=F, log=T))
420All.eq(Rnbinom,	  qnbinom  (log1p(-Pnbinom), size = 7, prob = .01, lower=F, log=T))
421All.eq(Rnorm,	  qnorm	   (log1p(-Pnorm), mean = -1, sd = 3, lower=F, log=T))
422All.eq(Rpois,	  qpois	   (log1p(-Ppois), lambda = 12, lower=F, log=T))
423All.eq(Rsignrank, qsignrank(log1p(-Psignrank), n = 47, lower=F, log=T))
424All.eq(Rt,	  qt	   (log1p(-Pt ), df = 11,   lower=F, log=T))
425All.eq(Rt2,	  qt	   (log1p(-Pt2), df = 1.01, lower=F, log=T))
426All.eq(Runif,	  qunif	   (log1p(-Punif), min = .2, max = 2, lower=F, log=T))
427All.eq(Rweibull,  qweibull (log1p(-Pweibull), shape = 3, scale = 2, lower=F, log=T))
428All.eq(Rwilcox,	  qwilcox  (log1p(-Pwilcox), m = 13, n = 17, lower=F, log=T))
429
430
431## Check log( upper.tail ):
432All.eq(log1p(-Pbeta),	  pbeta	   (Rbeta, shape1 = .8, shape2 = 2, lower=F, log=T))
433All.eq(log1p(-Pbinom),	  pbinom   (Rbinom, size = 55, prob = pi/16, lower=F, log=T))
434All.eq(log1p(-Pcauchy),	  pcauchy  (Rcauchy, location = 12, scale = 2, lower=F, log=T))
435All.eq(log1p(-Pchisq),	  pchisq   (Rchisq, df = 3, lower=F, log=T))
436All.eq(log1p(-Pexp),	  pexp	   (Rexp, rate = 2, lower=F, log=T))
437All.eq(log1p(-Pf),	  pf	   (Rf, df1 = 12, df2 = 6, lower=F, log=T))
438All.eq(log1p(-Pgamma),	  pgamma   (Rgamma, shape = 2, scale = 5, lower=F, log=T))
439All.eq(log1p(-Pgeom),	  pgeom	   (Rgeom, prob = pi/16, lower=F, log=T))
440All.eq(log1p(-Phyper),	  phyper   (Rhyper, m = 40, n = 30, k = 20, lower=F, log=T))
441All.eq(log1p(-Plnorm),	  plnorm   (Rlnorm, meanlog = -1, sdlog = 3, lower=F, log=T))
442All.eq(log1p(-Plogis),	  plogis   (Rlogis, location = 12, scale = 2, lower=F, log=T))
443All.eq(log1p(-Pnbinom),	  pnbinom  (Rnbinom, size = 7, prob = .01, lower=F, log=T))
444All.eq(log1p(-Pnorm),	  pnorm	   (Rnorm, mean = -1, sd = 3, lower=F, log=T))
445All.eq(log1p(-Ppois),	  ppois	   (Rpois, lambda = 12, lower=F, log=T))
446All.eq(log1p(-Psignrank), psignrank(Rsignrank, n = 47, lower=F, log=T))
447All.eq(log1p(-Pt),	  pt	   (Rt, df = 11,   lower=F, log=T))
448All.eq(log1p(-Pt2),	  pt	   (Rt2,df = 1.01, lower=F, log=T))
449All.eq(log1p(-Punif),	  punif	   (Runif, min = .2, max = 2, lower=F, log=T))
450All.eq(log1p(-Pweibull),  pweibull (Rweibull, shape = 3, scale = 2, lower=F, log=T))
451All.eq(log1p(-Pwilcox),	  pwilcox  (Rwilcox, m = 13, n = 17, lower=F, log=T))
452
453
454## Inf df in pf etc.
455# apparently pf(df2=Inf) worked in 2.0.1 (undocumented) but df did not.
456x <- c(1/pi, 1, pi)
457oo <- options(digits = 8)
458df(x, 3, 1e6)
459df(x, 3, Inf)
460pf(x, 3, 1e6)
461pf(x, 3, Inf)
462
463df(x, 1e6, 5)
464df(x, Inf, 5)
465pf(x, 1e6, 5)
466pf(x, Inf, 5)
467
468df(x, Inf, Inf)# (0, Inf, 0)  - since 2.1.1
469pf(x, Inf, Inf)# (0, 1/2, 1)
470
471pf(x, 5, Inf, ncp=0)
472all.equal(pf(x, 5, 1e6, ncp=1), tolerance = 1e-6,
473          c(0.065933194, 0.470879987, 0.978875867))
474all.equal(pf(x, 5, 1e7, ncp=1), tolerance = 1e-6,
475          c(0.06593309, 0.47088028, 0.97887641))
476all.equal(pf(x, 5, 1e8, ncp=1), tolerance = 1e-6,
477          c(0.0659330751, 0.4708802996, 0.9788764591))
478pf(x, 5, Inf, ncp=1)
479
480dt(1, Inf)
481dt(1, Inf, ncp=0)
482dt(1, Inf, ncp=1)
483dt(1, 1e6, ncp=1)
484dt(1, 1e7, ncp=1)
485dt(1, 1e8, ncp=1)
486dt(1, 1e10, ncp=1) # = Inf
487## Inf valid as from 2.1.1: df(x, 1e16, 5) was way off in 2.0.1.
488
489sml.x <- c(10^-c(2:8,100), 0)
490cbind(x = sml.x, `dt(x,*)` = dt(sml.x, df = 2, ncp=1))
491## small 'x' used to suffer from cancellation
492options(oo)
493
494## NB:  Do  *NOT*  add new examples here, but rather  in  ./d-p-q-r-tst-2.R
495## ==        ~~~                    ~~~~  ~~~               ~~~~~~~~~~~~~~~
496
497cat("Time elapsed: ", proc.time() - .ptime,"\n")
498