https://github.com/cran/aster
Tip revision: 63c8e8a453ea587001e2438a8ce51cf0e1e1675c authored by Charles J. Geyer on 23 March 2009, 00:00:00 UTC
version 0.7-7
version 0.7-7
Tip revision: 63c8e8a
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)