From 936ff7fe77f8939f1f9f2d3403e15273e400e5c5 Mon Sep 17 00:00:00 2001
From: Eduardo Junior <edujrrib@gmail.com>
Date: Fri, 20 May 2016 11:45:48 -0300
Subject: [PATCH] =?UTF-8?q?Adiciona=20fun=C3=A7=C3=A3o=20para=20c=C3=A1lcu?=
 =?UTF-8?q?lo=20da=20m=C3=A9dia=20e=20vari=C3=A2ncia=20da=20COM-Poisson?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 NAMESPACE            |   2 +
 R/cmp.R              | 104 +++++++++++++++++++++++++++++++++++++++++++
 man/calc_mean_cmp.Rd |  37 +++++++++++++++
 man/calc_var_cmp.Rd  |  38 ++++++++++++++++
 4 files changed, 181 insertions(+)
 create mode 100644 man/calc_mean_cmp.Rd
 create mode 100644 man/calc_var_cmp.Rd

diff --git a/NAMESPACE b/NAMESPACE
index c95b30f..11ac489 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 a5f0713..96f679c 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 0000000..ad7abdf
--- /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 0000000..094ad71
--- /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}
+}
+
-- 
GitLab