# profile likelihood
fit1 <- cpglm(RLD~ factor(Zone)*factor(Stock),
data=fineroot)
# residual and qq plot
parold <- par(mfrow=c(2,2), mar=c(5,5,2,1))
# 1. regular plot
r1 <- resid(fit1)/sqrt(fit1$phi)
plot(r1~fitted(fit1), cex=0.5)
qqnorm(r1, cex=0.5)
# 2. quantile residual plot to avoid overlappling
u <- ptweedie(fit1$y, fit1$p, fitted(fit1), fit1$phi)
u[fit1$y == 0] <- runif(sum(fit1$y == 0), 0, u[fit1$y == 0])
r2 <- qnorm(u)
plot(r2~fitted(fit1), cex=0.5)
qqnorm(r2, cex=0.5)
par(parold)
# MCEM fit
set.seed(12)
fit2 <- cpglm(RLD~ factor(Zone)*factor(Stock),
data=fineroot, method="MCEM",
control=list(init.size=5,sample.iter=50,
max.size=200,fixed.size=FALSE))
# show the iteration history of p
plot(fit2$theta.all[,ncol(fit2$theta.all)],
type="o", cex=0.5)
# compare the two
summary(fit1)
summary(fit2)
# provide initial values
inits <- list(beta=rnorm(length(coef(fit1))), phi=0.3, p=1.6)
fit3 <- cpglm(RLD~ factor(Zone)*factor(Stock),
data=fineroot, method="MCEM",
control=list(init.size=5,sample.iter=50,
max.size=200,fixed.size=FALSE),
inits = inits)
Run the code above in your browser using DataLab