diff --git a/vignettes/v04_poisson_generelizada.Rmd b/vignettes/v04_poisson_generelizada.Rmd index 7e15a2182ad3d1a59c47ca1a4fea8addc6a3204c..35f3df950f13407f08efe75eaa27d9659b50f1fd 100644 --- a/vignettes/v04_poisson_generelizada.Rmd +++ b/vignettes/v04_poisson_generelizada.Rmd @@ -854,54 +854,35 @@ update(p1, type = "p", layout = c(NA, 1), data(ninfas, package = "MRDCr") str(ninfas) -# xyplot(ntot ~ dias | cult, data = ninfas, -# type = c("p", "spline"), -# grid = TRUE, as.table = TRUE, layout = c(NA, 2), -# xlab = "Dias", ylab = "Número total de ninfas") - # Somente as cultivares que contém BRS na identificação -ninfas <- droplevels(subset(ninfas, grepl("BRS", x = cult))) +ninfas <- droplevels(subset(ninfas, + grepl("BRS.*RR", x = cult) & dias <= 22)) +ninfas$y <- ninfas$ntot +str(ninfas) -xyplot(ntot ~ dias | cult, data = ninfas, +xyplot(y ~ dias | cult, data = ninfas, type = c("p", "spline"), grid = TRUE, as.table = TRUE, layout = c(NA, 2), xlab = "Dias", ylab = "Número total de ninfas") -# IMPORTANT: Foi usado um offset de 100 por problemas de -# over/underflow. O problema não é com a Poisson mas com a Poisson -# Generalizada. Todas as análises consideram um offset de 100, portanto, -# permanecem comparáveis e igualmente interpretáveis. - -ninfas <- transform(ninfas, - off = 100, - aval = factor(dias)) +ninfas <- transform(ninfas, aval = factor(dias)) #----------------------------------------------------------------------- # Modelo Poisson. -m0 <- glm(ntot ~ offset(log(off)) + bloco + cult * aval, +m0 <- glm(y ~ bloco + cult + aval, data = ninfas, family = poisson) par(mfrow = c(2, 2)) plot(m0); layout(1) anova(m0, test = "Chisq") -anova(m0, test = "Chisq", - dispersion = sum(residuals(m0, type = "pearson")^2)/ - df.residual(m0)) -summary(m0) - -m0 <- glm(ntot ~ offset(log(off)) + bloco + cult + aval, - data = ninfas, family = poisson) -anova(m0, test = "Chisq", - dispersion = sum(residuals(m0, type = "pearson")^2)/ - df.residual(m0)) summary(m0) #----------------------------------------------------------------------- # Modelo Poisson Generalizada. -L <- with(ninfas, list(y = ntot, offset = off, X = model.matrix(m0))) +L <- with(ninfas, list(y = y, offset = 1, X = model.matrix(m0))) start <- c(alpha = 0, coef(m0)) parnames(llpg) <- names(start) @@ -954,8 +935,7 @@ linearHypothesis(model = m0, #----------------------------------------------------------------------- # Predição com bandas de confiança. -pred <- with(ninfas, expand.grid(off = 100, - bloco = factor(levels(bloco)[1], +pred <- with(ninfas, expand.grid(bloco = factor(levels(bloco)[1], levels = levels(bloco)), cult = levels(cult), aval = levels(aval), @@ -975,13 +955,12 @@ qn <- qnorm(0.975) * c(lwr = -1, fit = 0, upr = 1) aux <- confint(glht(m0, linfct = X), calpha = univariate_calpha())$confint colnames(aux)[1] <- "fit" -pred$pois <- cbind(pred$pois, sweep(exp(aux), 1, pred$pois$off, "*")) +pred$pois <- cbind(pred$pois, exp(aux)) str(pred$pois) # Matrix de covariância completa e sem o alpha. V <- vcov(m3) -V <- V[-1,-1] - +V <- V[-1, -1] U <- chol(V) aux <- sqrt(apply(X %*% t(U), MARGIN = 1, FUN = function(x) { sum(x^2) })) @@ -989,7 +968,7 @@ pred$pgen$eta <- c(X %*% coef(m3)[-1]) pred$pgen <- cbind(pred$pgen, apply(outer(aux, qn, FUN = "*"), MARGIN = 2, FUN = function(x) { - pred$pgen$off * exp(pred$pgen$eta + x) + exp(pred$pgen$eta + x) })) str(pred$pgen) @@ -1003,7 +982,7 @@ key <- list(lines = list( text = list( c("Poisson", "Poisson Generalizada"))) -xyplot(ntot ~ aval | cult, data = ninfas, +xyplot(y ~ aval | cult, data = ninfas, grid = TRUE, as.table = TRUE, layout = c(NA, 2), xlab = "Dias", ylab = "Número total de ninfas", key = key) + @@ -1035,6 +1014,13 @@ grid <- list(lambda = seq(10, 200, by = 2), alpha = seq(-0.05, 0.1, by = 0.001)) grid$sum <- with(grid, outer(lambda, alpha, fun)) +funcur + +y <- 0:800 +py <- dpg1(y = y, lambda = 190, alpha = 0.05) +plot(py ~ y, type = "h") +abline(v = 190) + grid <- with(grid, cbind(expand.grid(lambda = lambda, alpha = alpha), data.frame(sum = c(sum)))) @@ -1046,6 +1032,52 @@ levelplot(sum ~ lambda + alpha, ``` +```{r} +funcur <- function(lambda, alpha, n = 10) { + m <- lambda + s <- sqrt(lambda) * (1 + alpha * lambda) + sy <- seq(max(c(0, m - 4 * s)), + ceiling(m + 4 * s), + length.out = n) + sy <- round(sy, 0) + fy <- dpg1(y = sy, lambda = lambda, alpha = alpha) + fy <- 0.8 * fy/max(fy) + return(cbind(lambda = lambda, alpha = alpha, y = sy, fy = fy)) +} + +den <- subset(pred, modelo == "pgen") + +L <- lapply(den$fit, FUN = funcur, alpha = 0.05, n = 50) +for (i in seq_along(L)) { + L[[i]] <- cbind(den[i, ], L[[i]]) + # L[[i]]$fy <- 0.75 * L[[i]]$fy/max(L[[i]]$fy) +} + +L <- do.call(rbind, L) + +xyplot(y ~ aval | cult, data = L, + py = L$fy, type = "l", groups = aval, col = 1, + panel = function(x, y, subscripts, py, ...) { + panel.xyplot(x = as.integer(x) + py[subscripts], + y = y, + subscripts = subscripts, ...) + }) + + as.layer(xyplot(ntot ~ aval | cult, data = ninfas)) + + as.layer(xyplot(fit ~ aval | cult, data = pred, + groups = modelo, pch = 19, type = "o", + ly = pred$lwr, uy = pred$upr, + cty = "bars", length = 0.05, + desloc = 0.2 * scale(as.integer(pred$modelo), + scale = FALSE), + prepanel = prepanel.cbH, + panel.groups = panel.cbH, + panel = panel.superpose), under = TRUE) + + +# Teria que estimar uma variância para cada avaliação. + +``` + ## Pacote VGAM ## ```{r, eval=FALSE}