Raw File
ktp.R

 library(aster)

 do.chisq.test <- function(x, k, mu, max.bin) {
     stopifnot(all(x > k))
     stopifnot(k + 1 < max.bin)
     xx <- seq(k + 1, max.bin)
     yy <- dpois(xx, mu)
     yy[length(yy)] <- ppois(max.bin - 1, mu, lower.tail = FALSE)
     pp <- yy / sum(yy)
     ecc <- length(x) * pp
     if (any(ecc < 5.0))
         warning("violates rule of thumb about > 5 expected in each cell")
     cc <- tabulate(x, max.bin)
     cc <- cc[xx]
     cc[length(cc)] <- nsim - sum(cc[- length(cc)])
     chisqstat <- sum((cc - ecc)^2 / ecc)
     cat("chi squared statistic =", chisqstat, "\n")
     cat("degrees of freedom =", length(ecc) - 1, "\n")
     pval <- pchisq(chisqstat, length(ecc) - 1, lower.tail = FALSE)
     cat("p-value =", pval, "\n")
     if (exists("save.min.pval")) {
         save.min.pval <<- min(pval, save.min.pval)
         save.ntests <<- save.ntests + 1
     } else {
         save.min.pval <<- pval
         save.ntests <<- 1
     }
     foo <- rbind(cc, ecc)
     dimnames(foo) <- list(c("observed", "expected"), as.character(xx))
     print(foo)
 }

 set.seed(42)
 nsim <- 1e4

 mu <- 10
 k <- 2
 x <- rktp(nsim, k, mu)
 do.chisq.test(x, k, mu, 22)

 mu <- 3.5
 k <- 2
 x <- rktp(nsim, k, mu)
 do.chisq.test(x, k, mu, 11)

 mu <- 2.5
 k <- 2
 x <- rktp(nsim, k, mu)
 do.chisq.test(x, k, mu, 10)

 mu <- 1.5
 k <- 2
 x <- rktp(nsim, k, mu)
 do.chisq.test(x, k, mu, 8)

 mu <- 0.5
 k <- 2
 x <- rktp(nsim, k, mu)
 do.chisq.test(x, k, mu, 6)

 nsim <- 1e5
 mu <- 0.1
 k <- 2
 x <- rktp(nsim, k, mu)
 do.chisq.test(x, k, mu, 5)

 mu <- 0.01
 k <- 2
 x <- rktp(nsim, k, mu)
 do.chisq.test(x, k, mu, 4)

 mu <- 1.5
 xpred <- 0:10
 save.seed <- .Random.seed
 x <- rktp(xpred, k, mu, xpred)
 .Random.seed <- save.seed
 my.x <- rep(0, length(xpred))
 for (i in seq(along = xpred))
     if (xpred[i] > 0)
         for (j in 1:xpred[i])
             my.x[i] <- my.x[i] + rktp(1, k, mu)
 all.equal(x, my.x)

 k <- 5
 mu <- pi
 x <- rktp(nsim, k, mu)
 do.chisq.test(x, k, mu, 14)

 k <- 10
 mu <- exp(2)
 x <- rktp(nsim, k, mu)
 do.chisq.test(x, k, mu, 22)

 cat("number of tests:", save.ntests, "\n")
 cat("minimum p-value:", save.min.pval, "\n")
 cat("Bonferroni corrected minimum p-value:",
     save.ntests * save.min.pval, "\n")

 #####

 set.seed(42)
 nind <- 25
 nnode <- 1
 ncoef <- 1
 k <- 2

 pred <- 0
 fam <- 4

 theta <- 4 / 3
 mu <- exp(theta)
 x <- rpois(100, mu)
 x <- x[x > k]
 x <- x[1:nind]

 modmat <- matrix(1, nrow = nind, ncol = 1)
 out <- mlogl(theta, pred, fam, x, modmat, modmat, deriv = 2,
     type = "conditional")
 print(out)

 xxx <- seq(0, 100)
 ppp <- dpois(xxx, mu)
 ppp[xxx <= k] <- 0
 ppp <- ppp / sum(ppp)
 tau <- sum(xxx * ppp)

 sum(x - tau)
 max(abs( sum(x - tau) + out$gradient ))

 length(x) * sum((xxx - tau)^2 * ppp)

 epsilon <- 1e-6
 oute <- mlogl(theta + epsilon, pred, fam, x, modmat, modmat, deriv = 2,
     type = "conditional")
 (oute$value - out$value) / epsilon
 all.equal((oute$value - out$value) / epsilon, out$gradient,
     tol = 10 * epsilon)

 (oute$gradient - out$gradient) / epsilon
 all.equal((oute$gradient - out$gradient) / epsilon, as.numeric(out$hessian),
     tol = 10 * epsilon)

back to top