From ec2a6092744df97822d970fe5bbfe409e345d3b7 Mon Sep 17 00:00:00 2001
From: Eduardo Junior <edujrrib@gmail.com>
Date: Wed, 15 Jun 2016 00:19:28 -0300
Subject: [PATCH] =?UTF-8?q?Corre=C3=A7=C3=B5es=20e=20adi=C3=A7=C3=B5es=20p?=
 =?UTF-8?q?ara=20exibi=C3=A7=C3=A3o=20dos=20resultados?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

 - Corrige teste F para familia quasipoisson, as diferencas de
   deviances são escolanadas pelo respectivo parametro de
   dispersão do modelo mais completo (dois a dois)
 - Adciona função apra teste de hipoteses sobre o parametro de
   dispersão da familia quasipoisson.
 - Adiciona função para extração e comporação dos coeficientes
   estimados sob os modelos Poisson, CMP, BinNeg e Quasi-Poisson
---
 docs/_setup.R | 75 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 73 insertions(+), 2 deletions(-)

diff --git a/docs/_setup.R b/docs/_setup.R
index b3eb3f1..fd5d8d3 100644
--- a/docs/_setup.R
+++ b/docs/_setup.R
@@ -127,8 +127,9 @@ myanova <- function(...) {
             "P(>Chisq)" = c(NA, pvs))
     }
     if (test == "F") {
-        sigma <- summary(model.list[[which.max(nps)]])$dispersion
-        df.sigma <- model.list[[which.max(nps)]]$df.residual
+        ## ver pág. 187 expresssão 7.10 em Modern Applied, Ripley
+        sigma <- sapply(model.list, function(x) summary(x)$dispersion)
+        df.sigma <- sapply(model.list, function(x) x$df.residual)
         dev <- sapply(model.list, function(x) deviance(x))
         dfs <- c(NA, -diff(dev))
         dnp <- c(NA, diff(nps))
@@ -145,6 +146,24 @@ myanova <- function(...) {
     return(tab)
 }
 
+##======================================================================
+## Testa o parametro de dispersão de um modelo quasi poisson
+quasitest <- function(...) {
+    quasi.list <- list(...)
+    cls <- sapply(quasi.list, function(model) model$family$family)
+    if (sum(!cls %in% "quasipoisson") > 0) {
+        stop("O modelo não é quasipoisson")
+    }
+    ##-------------------------------------------
+    dev <- sapply(quasi.list, function(model) deviance(model))
+    dfs <- sapply(quasi.list, function(model) model$df.residual)
+    sig <- sapply(quasi.list, function(model) summary(model)$dispersion)
+    pvs <- pchisq(q = dev, df = dfs)*2
+    out <- cbind("sigma2" = sig, `P(>Chisq)` = pvs)
+    rownames(out) <- rep("sigma == 1", length(quasi.list))
+    return(out)
+}
+
 ##======================================================================
 ## Definições de plot.profile.mle2 para perfil de log-verossimilhança
 
@@ -211,3 +230,55 @@ mycorrplot <- function(Corr, ...) {
         diag = "l", tl.pos = "lt", tl.col = "black",
         tl.cex = 0.8, col = brewer.pal(9, "Greys")[-(1:3)], ...)
 }
+
+##======================================================================
+## Tabela de comparação dos coeficientes dos modelos para dados de
+## contagem
+
+##-------------------------------------------
+## Extrai os coeficientes dos modelos
+getCoefs <- function(model, rownames = NULL) {
+    cls <- class(model)[1]
+    if (!cls %in% c("glm", "negbin", "mle2")) {
+        stop("Classe de modelos não contemplada")
+    }
+    est <- switch(
+        cls,
+        "glm" = {
+            fam <- model$family$family
+            if (!fam %in% c("poisson", "quasipoisson")) {
+                stop("Família de distribuições não contemplada")
+            }
+            switch(
+                fam,
+                "poisson" = {
+                    rbind(c(NA, NA), summary(model)$coef[, c(1, 3)])
+                },
+                "quasipoisson" = {
+                    rbind(c(summary(model)$dispersion, NA),
+                          summary(model)$coef[, c(1, 3)])
+                }
+            )
+        },
+        "negbin" = {
+            rbind(c(model$theta, model$SE.theta),
+                  summary(model)$coef[, c(1, 3)])
+        },
+        "mle2" = {
+            summary(model)@coef[, c(1, 3)]
+        }
+    )
+    colnames <- c("estimate", "est/std.error")
+    if (!is.null(rownames)) {
+        rownames(est) <- rownames
+    }
+    return(est)
+}
+##-------------------------------------------
+## Faz a tabela de comparação
+coeftab <- function(..., rownames = NULL) {
+    model.list <- list(...)
+    coefs <- lapply(model.list, getCoefs, rownames = rownames)
+    tab <- do.call(cbind, coefs)
+    return(tab)
+}
-- 
GitLab