Commit 41719448 authored by Eduardo E. R. Junior's avatar Eduardo E. R. Junior

Implementa gráfico de convergência da constante Z na lattice

parent a37a977e
...@@ -13,3 +13,5 @@ import(doBy) ...@@ -13,3 +13,5 @@ import(doBy)
import(lattice) import(lattice)
import(latticeExtra) import(latticeExtra)
import(multcomp) import(multcomp)
importFrom(grDevices,extendrange)
importFrom(lattice,xyplot)
#' @title Avaliação da Convergência da Constante Normalizadora #' @title Avaliação da Convergência da Constante Normalizadora
#' @description Avalia a convergência da constante de normalização de #' @author Eduardo E. R. Junior, \email{edujrrib@gmail.com}
#' um modelo COM-Poisson definida por: \deqn{Z = \sum #' @export
#' @description Avalia a convergência da constante de normalização de um
#' modelo COM-Poisson definida por: \deqn{Z = \sum
#' \frac{\lambda^i}{(i!)^\nu}}, em que o parâmetro \eqn{\nu} é #' \frac{\lambda^i}{(i!)^\nu}}, em que o parâmetro \eqn{\nu} é
#' tomado como \eqn{\exp{\phi}}. #' tomado como \eqn{\exp{\phi}}.
#' @param model Objeto resultante da função \code{\link[MRDCr]{cmp}}. #' @param model Objeto resultante da função \code{\link[MRDCr]{cmp}}.
#' @param tol Critério de parada do algoritmo, representa o valor #' @param tol Critério de parada do algoritmo, representa o valor
#' tolerado para a diferença do valor de \eqn{Z(\lambda, \phi)} #' tolerado para a diferença de \eqn{\frac{\lambda^i}{(i!)^\nu} -
#' entre duas iterações. O valor padrão é 1e-4 #' 0}, pois no limite \eqn{i \rightarrow \infty} o incremente
#' \eqn{\frac{\lambda^i}{(i!)^\nu}} tende a 0.
#' @param incremento Número de incrementos da soma a serem considerados #' @param incremento Número de incrementos da soma a serem considerados
#' a cada iteração. Padrão definido como 10, ou seja, a cada #' a cada iteração. Padrão definido como 10, ou seja, a cada
#' iteração 10 passos incrementos são somados a Z. #' iteração 10 incrementos são calculados.
#' @param maxit Número máximo de iterações a serem realizadas pelo #' @param maxit Número máximo de iterações a serem realizadas pelo
#' algoritmo. Se este número for atingido e o critério de tolerância #' algoritmo. Se este número for atingido e o critério de tolerância
#' não for atendido, uma mensagem de aviso será exibida. #' não for atendido, uma mensagem de aviso será exibida.
#' @param plot Argumento lógico. Se \code{TRUE} (padrão) os gráficos dos #' @param plot Argumento lógico. Se \code{TRUE} (padrão) os gráficos dos
#' incrementos da constante são exibidos. #' incrementos daa constantes, calculadas para cada observação são
#' exibidos.
#' @return Uma lista com os incrementos das constantes Z, #' @return Uma lista com os incrementos das constantes Z,
#' \eqn{Z(\lambda, \phi)} da distribuição COM-Poisson, calculados #' \eqn{Z(\lambda, \phi)} da distribuição COM-Poisson, calculados
#' para cada observação. #' para cada observação.
#' @author Eduardo E. R. Junior, \email{edujrrib@gmail.com} #' @examples
#' @export #'
#' m1 <- cmp(ncap ~ est * (des + I(des^2)), data = capdesfo)
#' tablez <- convergencez(m1)
#' str(tablez)
#'
#' m2 <- cmp(ncap ~ dexp + I(dexp^2), data = capmosca)
#' tablez <- convergencez(m2)
#' str(tablez)
#'
#' @importFrom lattice xyplot
#' @importFrom grDevices extendrange
convergencez <- function(model, tol = 1e-4, incremento = 10, convergencez <- function(model, tol = 1e-4, incremento = 10,
maxit = 50, plot = TRUE) { maxit = 150, plot = TRUE) {
##------------------------------------------- ##-------------------------------------------
## Calcula Z para um c(lambda, phi) ## Calcula Z para um c(lambda, phi)
calcula <- function(loglambda, phi) { calcula <- function(loglambda, phi) {
...@@ -53,15 +66,39 @@ convergencez <- function(model, tol = 1e-4, incremento = 10, ...@@ -53,15 +66,39 @@ convergencez <- function(model, tol = 1e-4, incremento = 10,
phi <- model@coef[1] phi <- model@coef[1]
loglambdas <- X %*% betas loglambdas <- X %*% betas
zs <- sapply(loglambdas, calcula, phi, simplify = FALSE) zs <- sapply(loglambdas, calcula, phi, simplify = FALSE)
stcalc <- max(sapply(zs, length))
##-------------------------------------------
n <- length(zs)
id <- c(); ii <- c()
for (i in 1:n) {
l <- length(zs[[i]])
ii <- c(ii, 1:l)
id <- c(id, rep(i, times = l))
}
da <- data.frame(zs = unlist(zs), id = id, ii = ii)
##------------------------------------------- ##-------------------------------------------
if (plot) { if (plot) {
mx <- max(sapply(zs, max)) ylab = expression(frac(lambda^j, "(j!)"^nu))
lx <- max(sapply(zs, length)) sumtos <- c(sumto, stcalc)
plot(zs[[1]], type = "l", xlim = c(0, lx), ylim = c(0, mx)) print(
abline(v = sumto) xyplot(zs ~ ii, groups = id,
for (i in 2:length(zs)) lines(zs[[i]], type = "l") data = da, type = "l",
ylab = list(ylab, rot = 0),
xlab = "j",
xlim = extendrange(c(1, max(sumtos))),
panel = function(x, y, ...) {
panel.xyplot(x, y, ...)
panel.abline(v = sumtos, h = 0)
panel.text(
x = sumtos*0.95,
y = max(y)*c(0.9, 0.8),
labels =
paste("sumto\n",
c("considerado", "calculado")))
})
)
} }
invisible(zs) invisible(da)
} }
#' @title Log-Verossimilhança do Modelo Conway-Maxwell-Poisson #' @title Log-Verossimilhança do Modelo Conway-Maxwell-Poisson
......
...@@ -4,26 +4,28 @@ ...@@ -4,26 +4,28 @@
\alias{convergencez} \alias{convergencez}
\title{Avaliação da Convergência da Constante Normalizadora} \title{Avaliação da Convergência da Constante Normalizadora}
\usage{ \usage{
convergencez(model, tol = 1e-04, incremento = 10, maxit = 50, convergencez(model, tol = 1e-04, incremento = 10, maxit = 150,
plot = TRUE) plot = TRUE)
} }
\arguments{ \arguments{
\item{model}{Objeto resultante da função \code{\link[MRDCr]{cmp}}.} \item{model}{Objeto resultante da função \code{\link[MRDCr]{cmp}}.}
\item{tol}{Critério de parada do algoritmo, representa o valor \item{tol}{Critério de parada do algoritmo, representa o valor
tolerado para a diferença do valor de \eqn{Z(\lambda, \phi)} tolerado para a diferença de \eqn{\frac{\lambda^i}{(i!)^\nu} -
entre duas iterações. O valor padrão é 1e-4} 0}, pois no limite \eqn{i \rightarrow \infty} o incremente
\eqn{\frac{\lambda^i}{(i!)^\nu}} tende a 0.}
\item{incremento}{Número de incrementos da soma a serem considerados \item{incremento}{Número de incrementos da soma a serem considerados
a cada iteração. Padrão definido como 10, ou seja, a cada a cada iteração. Padrão definido como 10, ou seja, a cada
iteração 10 passos incrementos são somados a Z.} iteração 10 incrementos são calculados.}
\item{maxit}{Número máximo de iterações a serem realizadas pelo \item{maxit}{Número máximo de iterações a serem realizadas pelo
algoritmo. Se este número for atingido e o critério de tolerância algoritmo. Se este número for atingido e o critério de tolerância
não for atendido, uma mensagem de aviso será exibida.} não for atendido, uma mensagem de aviso será exibida.}
\item{plot}{Argumento lógico. Se \code{TRUE} (padrão) os gráficos dos \item{plot}{Argumento lógico. Se \code{TRUE} (padrão) os gráficos dos
incrementos da constante são exibidos.} incrementos daa constantes, calculadas para cada observação são
exibidos.}
} }
\value{ \value{
Uma lista com os incrementos das constantes Z, Uma lista com os incrementos das constantes Z,
...@@ -31,10 +33,21 @@ Uma lista com os incrementos das constantes Z, ...@@ -31,10 +33,21 @@ Uma lista com os incrementos das constantes Z,
para cada observação. para cada observação.
} }
\description{ \description{
Avalia a convergência da constante de normalização de Avalia a convergência da constante de normalização de um
um modelo COM-Poisson definida por: \deqn{Z = \sum modelo COM-Poisson definida por: \deqn{Z = \sum
\frac{\lambda^i}{(i!)^\nu}}, em que o parâmetro \eqn{\nu} é \frac{\lambda^i}{(i!)^\nu}}, em que o parâmetro \eqn{\nu} é
tomado como \eqn{\exp{\phi}}. tomado como \eqn{\exp{\phi}}.
}
\examples{
m1 <- cmp(ncap ~ est * (des + I(des^2)), data = capdesfo)
tablez <- convergencez(m1)
str(tablez)
m2 <- cmp(ncap ~ dexp + I(dexp^2), data = capmosca)
tablez <- convergencez(m2)
str(tablez)
} }
\author{ \author{
Eduardo E. R. Junior, \email{edujrrib@gmail.com} Eduardo E. R. Junior, \email{edujrrib@gmail.com}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment