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