diff --git a/NAMESPACE b/NAMESPACE index c95b30fa1cb6481e532e959cac25de307dd89833..11ac4897ade292850f78b52c82d79c8ced7c84f8 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,6 +1,8 @@ # Generated by roxygen2: do not edit by hand export(apc) +export(calc_mean_cmp) +export(calc_var_cmp) export(cmp) export(convergencez) export(dcmp) diff --git a/R/cmp.R b/R/cmp.R index a5f0713bb1448e0608c52a2a25e02fb71e1f2664..96f679c038f262ec166d0111837ec54a85ec92ad 100644 --- a/R/cmp.R +++ b/R/cmp.R @@ -239,6 +239,110 @@ dcmp <- function(y, lambda, nu, sumto) { }) } +#' @name calc_mean_cmp +#' @author Eduardo E. R. Junior, \email{edujrrib@gmail.com} +#' @export +#' @title Calcula o Valor Esperado para a Distribuição +#' Conway-Maxwell-Poisson +#' @description Função para calcular a média do tipo \eqn{E(Y) = \mu = +#' \sum y\cdot \Pr(y)} para uma variável aleatória COM-Poisson a +#' partir dos parâmetros \eqn{\lambda > 0} e \eqn{\nu \geq 0}. +#' @param lambda Valor do parâmetro \eqn{\lambda} da distribuição +#' COM-Poisson. Quando \eqn{\nu = 1}, o parâmetro \eqn{\lambda = +#' E(Y)} é a média. +#' @param nu Valor do parâmetro \eqn{\nu} da distribuição COM-Poisson. +#' @param sumto Número de incrementos a serem considerados para a +#' cálculo da constante normalizadora Z. +#' @param tol Tolerância para interromper a procura pelo valor de +#' \code{ymax}, valor cuja probabilidade correspondente é inferior a +#' \code{tol}, para valores os valores de \code{lambda} e +#' \code{nu} informados. +#' @return Um vetor de tamanho igual ao do maior vetor, \code{lambda} ou +#' \code{nu} com os valores correspondentes de \eqn{\mu}. + +calc_mean_cmp <- function(lambda, nu, sumto, tol = 1e-5) { + ## Faz com que os parâmetros sejam vetores de mesmo tamanho. + names(lambda) <- NULL + names(nu) <- NULL + pars <- data.frame(lambda = lambda, nu = nu) + ## Calcula o ymax usando mu + 5 (sqrt(sigma)) + sigma <- lambda^(1/nu)/nu - (nu - 1)/(2 * nu^2) + ymax <- with(pars, ceiling(max(lambda + 5 * sqrt(sigma)))) + ## Agora verifica se a prob(ymax) é de fato pequena, se não, soma 1. + lambdamax <- max(pars$lambda) + numin <- min(pars$nu) + pmax <- dcmp(y = ymax, lambda = lambdamax, nu = numin, sumto) + while (pmax > tol) { + ymax <- ymax + 1 + pmax <- dcmp(y = ymax, lambda = lambdamax, nu = numin, sumto) + } + ## Define o vetor onde avaliar a densidade COM-Poisson. + y <- 1:ymax + estmean <- mapply(lambda = pars$lambda, + nu = pars$nu, + MoreArgs = list(y = y, sumto = sumto), + FUN = function(lambda, nu, y, sumto) { + py <- dcmp(y, lambda, nu, sumto) + sum(y * py) + }, + SIMPLIFY = TRUE) + names(estmean) <- NULL + return(estmean) +} + +#' @name calc_var_cmp +#' @author Eduardo E. R. Junior, \email{edujrrib@gmail.com} +#' @export +#' @title Calcula o Valor da Variância para a Distribuição +#' Conway-Maxwell-Poisson +#' @description Função para calcular a variância do tipo \eqn{V(Y) = +#' E(Y^2) - E^2(Y) = \sum y^2\cdot \Pr(y) - \left ( \sum y\cdot +#' \Pr(y) \right )^2} para uma variável aleatória COM-Poisson a +#' partir dos parâmetros \eqn{\lambda > 0} e \eqn{\nu \geq 0}. +#' @param lambda Valor do parâmetro \eqn{\lambda} da distribuição +#' COM-Poisson. Quando \eqn{\nu = 1}, o parâmetro \eqn{\lambda = +#' E(Y)} é a média. +#' @param nu Valor do parâmetro \eqn{\nu} da distribuição COM-Poisson. +#' @param sumto Número de incrementos a serem considerados para a +#' cálculo da constante normalizadora Z. +#' @param tol Tolerância para interromper a procura pelo valor de +#' \code{ymax}, valor cuja probabilidade correspondente é inferior a +#' \code{tol}, para valores os valores de \code{lambda} e \code{nu} +#' informados. +#' @return Um vetor de tamanho igual ao do maior vetor, \code{lambda} ou +#' \code{nu} com os valores correspondentes de \eqn{\mu}. + +calc_var_cmp <- function(lambda, nu, sumto, tol = 1e-5) { + # Faz com que os parâmetros sejam vetores de mesmo tamanho. + names(lambda) <- NULL + names(nu) <- NULL + pars <- data.frame(lambda = lambda, nu = nu) + # Calcula o ymax usando mu + 5 (sqrt(sigma)) + sigma <- lambda^(1/nu)/nu - (nu - 1)/(2 * nu^2) + ymax <- with(pars, ceiling(max(lambda + 5 * sqrt(sigma)))) + # Agora verifica se a prob(ymax) é de fato pequena, se não, soma 1. + lambdamax <- max(pars$lambda) + numin <- min(pars$nu) + pmax <- dcmp(y = ymax, lambda = lambdamax, nu = numin, sumto) + while (pmax > tol) { + ymax <- ymax + 1 + pmax <- dcmp(y = ymax, lambda = lambdamax, nu = numin, sumto) + } + # Define o vetor onde avaliar a densidade COM-Poisson. + y <- 1:ymax + esty2 <- mapply(lambda = pars$lambda, + nu = pars$nu, + MoreArgs = list(y = y, sumto = sumto), + FUN = function(lambda, nu, y, sumto) { + py <- dcmp(y, lambda, nu, sumto) + c(sum(y * py)^2, sum(y^2 * py)) + }, + SIMPLIFY = TRUE) + estvar <- diff(esty2) + names(estvar) <- NULL + return(estvar) +} + #' @title Ajuste do Modelo Conway-Maxwell-Poisson #' @author Eduardo E. R. Junior, \email{edujrrib@gmail.com} #' @export diff --git a/man/calc_mean_cmp.Rd b/man/calc_mean_cmp.Rd new file mode 100644 index 0000000000000000000000000000000000000000..ad7abdfabe0baf9487395b162ee950982466c98c --- /dev/null +++ b/man/calc_mean_cmp.Rd @@ -0,0 +1,37 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cmp.R +\name{calc_mean_cmp} +\alias{calc_mean_cmp} +\title{Calcula o Valor Esperado para a Distribuição + Conway-Maxwell-Poisson} +\usage{ +calc_mean_cmp(lambda, nu, sumto, tol = 1e-05) +} +\arguments{ +\item{lambda}{Valor do parâmetro \eqn{\lambda} da distribuição +COM-Poisson. Quando \eqn{\nu = 1}, o parâmetro \eqn{\lambda = +E(Y)} é a média.} + +\item{nu}{Valor do parâmetro \eqn{\nu} da distribuição COM-Poisson.} + +\item{sumto}{Número de incrementos a serem considerados para a +cálculo da constante normalizadora Z.} + +\item{tol}{Tolerância para interromper a procura pelo valor de +\code{ymax}, valor cuja probabilidade correspondente é inferior a +\code{tol}, para valores os valores de \code{lambda} e +\code{nu} informados.} +} +\value{ +Um vetor de tamanho igual ao do maior vetor, \code{lambda} ou + \code{nu} com os valores correspondentes de \eqn{\mu}. +} +\description{ +Função para calcular a média do tipo \eqn{E(Y) = \mu = + \sum y\cdot \Pr(y)} para uma variável aleatória COM-Poisson a + partir dos parâmetros \eqn{\lambda > 0} e \eqn{\nu \geq 0}. +} +\author{ +Eduardo E. R. Junior, \email{edujrrib@gmail.com} +} + diff --git a/man/calc_var_cmp.Rd b/man/calc_var_cmp.Rd new file mode 100644 index 0000000000000000000000000000000000000000..094ad7135df4f308aff953d9eb12a9490f8045db --- /dev/null +++ b/man/calc_var_cmp.Rd @@ -0,0 +1,38 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cmp.R +\name{calc_var_cmp} +\alias{calc_var_cmp} +\title{Calcula o Valor da Variância para a Distribuição + Conway-Maxwell-Poisson} +\usage{ +calc_var_cmp(lambda, nu, sumto, tol = 1e-05) +} +\arguments{ +\item{lambda}{Valor do parâmetro \eqn{\lambda} da distribuição +COM-Poisson. Quando \eqn{\nu = 1}, o parâmetro \eqn{\lambda = +E(Y)} é a média.} + +\item{nu}{Valor do parâmetro \eqn{\nu} da distribuição COM-Poisson.} + +\item{sumto}{Número de incrementos a serem considerados para a +cálculo da constante normalizadora Z.} + +\item{tol}{Tolerância para interromper a procura pelo valor de +\code{ymax}, valor cuja probabilidade correspondente é inferior a +\code{tol}, para valores os valores de \code{lambda} e \code{nu} +informados.} +} +\value{ +Um vetor de tamanho igual ao do maior vetor, \code{lambda} ou + \code{nu} com os valores correspondentes de \eqn{\mu}. +} +\description{ +Função para calcular a variância do tipo \eqn{V(Y) = + E(Y^2) - E^2(Y) = \sum y^2\cdot \Pr(y) - \left ( \sum y\cdot + \Pr(y) \right )^2} para uma variável aleatória COM-Poisson a + partir dos parâmetros \eqn{\lambda > 0} e \eqn{\nu \geq 0}. +} +\author{ +Eduardo E. R. Junior, \email{edujrrib@gmail.com} +} +