50 lines
1.4 KiB
R
50 lines
1.4 KiB
R
|
## glm.nb with weights
|
||
|
library(MASS)
|
||
|
yeast <- data.frame(cbind(numbers = 0:5, fr = c(213, 128, 37, 18, 3, 1)))
|
||
|
|
||
|
attach(yeast)
|
||
|
n <- rep(numbers, fr)
|
||
|
|
||
|
## fitting using glm.nb with weights - wrong results in 7.2-18
|
||
|
yeast2.fit <- glm.nb(numbers~1, link = log, weights=fr)
|
||
|
summary(yeast2.fit)
|
||
|
|
||
|
## fitting extending the vector and using glm.nb - correct result ##
|
||
|
yeast3.fit<-glm.nb(n~1, link = log)
|
||
|
summary(yeast3.fit)
|
||
|
|
||
|
stopifnot(all.equal(deviance(yeast2.fit), deviance(yeast3.fit)))
|
||
|
stopifnot(all.equal(yeast2.fit$theta, yeast3.fit$theta))
|
||
|
|
||
|
detach(yeast)
|
||
|
|
||
|
# another one, corrected in 7.2-43
|
||
|
set.seed(13245)
|
||
|
x <- c(-5:5)
|
||
|
mu <- exp(1 + 0.1*x)
|
||
|
y <- rnegbin(length(mu), mu = mu, theta = 1.5)
|
||
|
dat <- data.frame(x, y)
|
||
|
dat2 <- dat[rep(1:11, each=2), ]
|
||
|
w <- round(runif(11),2)
|
||
|
dat2$w <- as.vector(rbind(w, 1-w))
|
||
|
fm2 <- glm.nb(y ~ x, dat)
|
||
|
gm2 <- glm.nb(y ~ x, dat2, weights = w)
|
||
|
summary(fm2)
|
||
|
summary(gm2) # failed before
|
||
|
stopifnot(all.equal(fm2$theta, gm2$theta)) # differed
|
||
|
stopifnot(all.equal(deviance(fm2), deviance(gm2)))
|
||
|
fm3 <- glm(y ~ x, negative.binomial(theta = fm2$theta), dat)
|
||
|
gm3 <- glm(y ~ x, negative.binomial(theta = fm2$theta), dat2, weights =w)
|
||
|
summary(fm3)
|
||
|
summary(gm3)
|
||
|
stopifnot(all.equal(deviance(fm3), deviance(gm3)))
|
||
|
|
||
|
fit <- glm.nb(Days ~ Sex/(Age + Eth*Lrn), data = quine)
|
||
|
set.seed(1)
|
||
|
simulate(fit, nsim=5)[1:10, ]
|
||
|
if(getRversion() >= "2.9.0") {
|
||
|
fit2 <- glm.convert(fit)
|
||
|
set.seed(1)
|
||
|
print(simulate(fit2, nsim=5)[1:10, ])
|
||
|
}
|