From 5f05725b63e8892ae58d8fa86fcb15d9aa964651 Mon Sep 17 00:00:00 2001 From: "Steven Paul Sanderson II, MPH" Date: Fri, 3 May 2024 22:52:33 -0400 Subject: [PATCH] towards #471 --- NAMESPACE | 2 + NEWS.md | 2 + R/est-param-ztpois.R | 127 ++++++++++++++++++ R/utils-aic-ztpoisson.R | 67 +++++++++ man/check_duplicate_rows.Rd | 3 +- man/convert_to_ts.Rd | 3 +- man/quantile_normalize.Rd | 3 +- man/tidy_mcmc_sampling.Rd | 3 +- man/tidy_poisson.Rd | 3 +- man/tidy_zero_truncated_poisson.Rd | 3 +- man/util_bernoulli_param_estimate.Rd | 1 + man/util_beta_aic.Rd | 3 +- man/util_beta_param_estimate.Rd | 1 + man/util_binomial_aic.Rd | 3 +- man/util_binomial_param_estimate.Rd | 1 + man/util_burr_param_estimate.Rd | 1 + man/util_cauchy_aic.Rd | 3 +- man/util_cauchy_param_estimate.Rd | 1 + man/util_chisq_aic.Rd | 3 +- man/util_chisquare_param_estimate.Rd | 1 + man/util_exponential_aic.Rd | 3 +- man/util_exponential_param_estimate.Rd | 1 + man/util_gamma_aic.Rd | 3 +- man/util_gamma_param_estimate.Rd | 1 + man/util_geometric_aic.Rd | 3 +- man/util_geometric_param_estimate.Rd | 1 + man/util_hypergeometric_aic.Rd | 3 +- man/util_hypergeometric_param_estimate.Rd | 1 + man/util_logistic_aic.Rd | 3 +- man/util_logistic_param_estimate.Rd | 1 + man/util_lognormal_aic.Rd | 3 +- man/util_lognormal_param_estimate.Rd | 1 + man/util_negative_binomial_aic.Rd | 3 +- man/util_negative_binomial_param_estimate.Rd | 1 + man/util_normal_aic.Rd | 3 +- man/util_normal_param_estimate.Rd | 1 + man/util_pareto_aic.Rd | 3 +- man/util_pareto_param_estimate.Rd | 1 + man/util_poisson_aic.Rd | 3 +- man/util_poisson_param_estimate.Rd | 4 +- man/util_poisson_stats_tbl.Rd | 3 +- man/util_rztnbinom_aic.Rd | 3 +- man/util_triangular_param_estimate.Rd | 1 + man/util_uniform_aic.Rd | 3 +- man/util_uniform_param_estimate.Rd | 1 + man/util_weibull_aic.Rd | 3 +- man/util_weibull_param_estimate.Rd | 1 + ...l_zero_truncated_poisson_param_estimate.Rd | 103 ++++++++++++++ man/util_ztn_binomial_param_estimate.Rd | 3 +- man/util_ztp_aic.Rd | 58 ++++++++ 50 files changed, 430 insertions(+), 26 deletions(-) create mode 100644 R/est-param-ztpois.R create mode 100644 R/utils-aic-ztpoisson.R create mode 100644 man/util_zero_truncated_poisson_param_estimate.Rd create mode 100644 man/util_ztp_aic.Rd diff --git a/NAMESPACE b/NAMESPACE index 53bc564f..6c3a7ffb 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -143,7 +143,9 @@ export(util_uniform_stats_tbl) export(util_weibull_aic) export(util_weibull_param_estimate) export(util_weibull_stats_tbl) +export(util_zero_truncated_poisson_param_estimate) export(util_ztn_binomial_param_estimate) +export(util_ztp_aic) importFrom(data.table,.SD) importFrom(data.table,as.data.table) importFrom(data.table,melt) diff --git a/NEWS.md b/NEWS.md index 4209eb05..25396129 100644 --- a/NEWS.md +++ b/NEWS.md @@ -6,6 +6,8 @@ None ## New Features 1. #468 - Add function `util_negative_binomial_aic()` to calculate the AIC for the negative binomial distribution. 2. #470 - Add function `util_ztn_binomial_param_estimate()` and `util_rztnbinom_aic()` to estimate the parameters and calculate the AIC for the zero-truncated negative binomial distribution. +3. #467 - Add function `util_zero_truncated_poisson_param_estimate()` to estimate +the parameters of the zero-truncated Poisson distribution. ## Minor Improvements and Fixes 1. Fix #468 - Update `util_negative_binomial_param_estimate()` to add the use of diff --git a/R/est-param-ztpois.R b/R/est-param-ztpois.R new file mode 100644 index 00000000..c5fe073c --- /dev/null +++ b/R/est-param-ztpois.R @@ -0,0 +1,127 @@ +#' Estimate Zero Truncated Poisson Parameters +#' +#' @family Parameter Estimation +#' @family Poisson +#' +#' @author Steven P. Sanderson II, MPH +#' +#' @details +#' +#' This function estimates the parameter lambda of a Zero-Truncated Poisson distribution +#' based on a vector of non-negative integer values `.x`. The Zero-Truncated Poisson +#' distribution is a discrete probability distribution that models the number of events +#' occurring in a fixed interval of time, given that at least one event has occurred. +#' +#' The estimation is performed by minimizing the negative log-likelihood of the observed +#' data `.x` under the Zero-Truncated Poisson model. The negative log-likelihood function +#' used for optimization is defined as: +#' +#' \deqn{-\sum_{i=1}^{n} \log(P(X_i = x_i \mid X_i > 0, \lambda))}{,} +#' +#' where \( X_i \) are the observed values in `.x` and `lambda` is the parameter +#' of the Zero-Truncated Poisson distribution. +#' +#' The optimization process uses the `optim` function to find the value of `lambda` +#' that minimizes this negative log-likelihood. The chosen optimization method is Brent's +#' method (`method = "Brent"`) within a specified interval `[0, max(.x)]`. +#' +#' If `.auto_gen_empirical` is set to `TRUE`, the function will generate empirical data +#' statistics using `tidy_empirical()` for the input data `.x` and then combine this +#' empirical data with the estimated Zero-Truncated Poisson distribution using +#' `tidy_combine_distributions()`. This combined data can be accessed via the +#' `$combined_data_tbl` element of the function output. +#' +#' The function returns a tibble containing the estimated parameter `lambda` along +#' with other summary statistics of the input data (sample size, minimum, maximum). +#' +#' @description This function will attempt to estimate the Zero Truncated Poisson +#' lambda parameter given some vector of values `.x`. The function will return a +#' tibble output, and if the parameter `.auto_gen_empirical` is set to `TRUE` +#' then the empirical data given to the parameter `.x` will be run through the +#' `tidy_empirical()` function and combined with the estimated Zero Truncated +#' Poisson data. +#' +#' @param .x The vector of data to be passed to the function. Must be non-negative +#' integers. +#' @param .auto_gen_empirical This is a boolean value of TRUE/FALSE with default +#' set to TRUE. This will automatically create the `tidy_empirical()` output +#' for the `.x` parameter and use the `tidy_combine_distributions()`. The user +#' can then plot out the data using `$combined_data_tbl` from the function output. +#' +#' @examples +#' library(dplyr) +#' library(ggplot2) +#' +#' tc <- tidy_zero_truncated_poisson() |> pull(y) +#' output <- util_zero_truncated_poisson_param_estimate(tc) +#' +#' output$parameter_tbl +#' +#' output$combined_data_tbl |> +#' tidy_combined_autoplot() +#' +#' @return +#' A tibble/list +#' +#' @name util_zero_truncated_poisson_param_estimate +NULL + +#' @export +#' @rdname util_zero_truncated_poisson_param_estimate + +util_zero_truncated_poisson_param_estimate <- function(.x, .auto_gen_empirical = TRUE) { + + # Tidyeval ---- + x_term <- as.numeric(.x) + minx <- min(x_term) + maxx <- max(x_term) + n <- length(x_term) + + # Define negative log-likelihood function + neg_loglik <- function(lambda, data) { + -sum(log(actuar::dztpois(x_term, lambda = lambda))) + } + + # Optimize to find lambda that minimizes negative log-likelihood + optim_result <- stats::optim(par = 1, fn = neg_loglik, data = x_term, + method = "Brent", + lower = 0, upper = max(x)) + + # Extract estimated lambda + lambda_est <- optim_result$par + + # Return Tibble ---- + if (.auto_gen_empirical) { + te <- tidy_empirical(.x = x_term) + td <- tidy_zero_truncated_poisson(.n = n, .lambda = round(lambda_est, 3)) + combined_tbl <- tidy_combine_distributions(te, td) + } + + # Return Tibble + ret <- dplyr::tibble( + dist_type = "Zero Truncated Poisson", + samp_size = n, + min = minx, + max = maxx, + lambda = lambda_est + ) + + # Return ---- + attr(ret, "tibble_type") <- "parameter_estimation" + attr(ret, "family") <- "zero truncated poisson" + attr(ret, "x_term") <- .x + attr(ret, "n") <- n + + if (.auto_gen_empirical) { + output <- list( + combined_data_tbl = combined_tbl, + parameter_tbl = ret + ) + } else { + output <- list( + parameter_tbl = ret + ) + } + + return(output) +} diff --git a/R/utils-aic-ztpoisson.R b/R/utils-aic-ztpoisson.R new file mode 100644 index 00000000..88978411 --- /dev/null +++ b/R/utils-aic-ztpoisson.R @@ -0,0 +1,67 @@ +#' Calculate Akaike Information Criterion (AIC) for zero-truncated poisson Distribution +#' +#' This function calculates the Akaike Information Criterion (AIC) for a zero-truncated poisson distribution fitted to the provided data. +#' +#' @family Utility +#' @author Steven P. Sanderson II, MPH +#' +#' @description +#' This function estimates the parameters of a zero-truncated poisson distribution from the provided data using maximum likelihood estimation, +#' and then calculates the AIC value based on the fitted distribution. +#' +#' @param .x A numeric vector containing the data to be fitted to a zero-truncated poisson distribution. +#' +#' @examples +#' library(actuar) +#' +#' # Example 1: Calculate AIC for a sample dataset +#' set.seed(123) +#' x <- rztpois(30, lambda = 3) +#' util_ztp_aic(x) +#' +#' @return +#' The AIC value calculated based on the fitted zero-truncated poisson distribution to the provided data. +#' +#' @name util_ztp_aic +NULL + +#' @export +#' @rdname util_ztp_aic + +util_ztp_aic <- function(.x) { + # Validate input + if (!is.numeric(.x) || any(!is.na(.x) & .x != as.integer(.x)) || any(.x < 0)) { + stop("Input data (.x) must be a numeric vector of non-negative integers.") + } + + x <- as.numeric(.x) + + # Get initial parameter estimates using TidyDensity package (if available) + pe <- TidyDensity::util_zero_truncated_poisson_param_estimate(x)$parameter_tbl + + # Negative log-likelihood function for zero-truncated poisson distribution + nll <- function(par, data) { + lambda <- par[1] + -sum(actuar::dztpois(data, lambda = lambda, log = TRUE)) + } + + # Fit zero-truncated poisson distribution to sample data (optimization) + fit_ztp<- stats::optim( + pe$lambda, + nll, + data = x, + method = "Brent", + lower = 0, + upper = 1000 + ) + + # Extract log-likelihood and number of parameters + logLik_ztp<- -fit_ztp$value + k_ztp <- length(pe) # Number of parameters for zero-truncated poisson distribution (degrees of freedom and ncp) + + # Calculate AIC + AIC_ztp <- 2 * k_ztp - 2 * logLik_ztp + + # Return AIC value + return(AIC_ztp) +} diff --git a/man/check_duplicate_rows.Rd b/man/check_duplicate_rows.Rd index 6d77f254..eb46257a 100644 --- a/man/check_duplicate_rows.Rd +++ b/man/check_duplicate_rows.Rd @@ -53,7 +53,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/convert_to_ts.Rd b/man/convert_to_ts.Rd index 72e1d365..82234c5d 100644 --- a/man/convert_to_ts.Rd +++ b/man/convert_to_ts.Rd @@ -79,7 +79,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/quantile_normalize.Rd b/man/quantile_normalize.Rd index 5ec53e79..97c315a4 100644 --- a/man/quantile_normalize.Rd +++ b/man/quantile_normalize.Rd @@ -79,7 +79,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/tidy_mcmc_sampling.Rd b/man/tidy_mcmc_sampling.Rd index 71607c01..b92a723d 100644 --- a/man/tidy_mcmc_sampling.Rd +++ b/man/tidy_mcmc_sampling.Rd @@ -60,7 +60,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/tidy_poisson.Rd b/man/tidy_poisson.Rd index 51d595d0..8cd21456 100644 --- a/man/tidy_poisson.Rd +++ b/man/tidy_poisson.Rd @@ -55,7 +55,8 @@ tidy_poisson() Other Poisson: \code{\link{tidy_zero_truncated_poisson}()}, \code{\link{util_poisson_param_estimate}()}, -\code{\link{util_poisson_stats_tbl}()} +\code{\link{util_poisson_stats_tbl}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()} Other Discrete Distribution: \code{\link{tidy_bernoulli}()}, diff --git a/man/tidy_zero_truncated_poisson.Rd b/man/tidy_zero_truncated_poisson.Rd index cbded7c0..98263584 100644 --- a/man/tidy_zero_truncated_poisson.Rd +++ b/man/tidy_zero_truncated_poisson.Rd @@ -58,7 +58,8 @@ tidy_zero_truncated_poisson() Other Poisson: \code{\link{tidy_poisson}()}, \code{\link{util_poisson_param_estimate}()}, -\code{\link{util_poisson_stats_tbl}()} +\code{\link{util_poisson_stats_tbl}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()} Other Zero Truncated Distribution: \code{\link{tidy_zero_truncated_binomial}()}, diff --git a/man/util_bernoulli_param_estimate.Rd b/man/util_bernoulli_param_estimate.Rd index 68101662..34dfc505 100644 --- a/man/util_bernoulli_param_estimate.Rd +++ b/man/util_bernoulli_param_estimate.Rd @@ -62,6 +62,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Bernoulli: diff --git a/man/util_beta_aic.Rd b/man/util_beta_aic.Rd index 8e0881c2..d3fcdc5d 100644 --- a/man/util_beta_aic.Rd +++ b/man/util_beta_aic.Rd @@ -64,7 +64,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_beta_param_estimate.Rd b/man/util_beta_param_estimate.Rd index ec4bbda3..0919670c 100644 --- a/man/util_beta_param_estimate.Rd +++ b/man/util_beta_param_estimate.Rd @@ -75,6 +75,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Beta: diff --git a/man/util_binomial_aic.Rd b/man/util_binomial_aic.Rd index 7b7114be..0176303d 100644 --- a/man/util_binomial_aic.Rd +++ b/man/util_binomial_aic.Rd @@ -63,7 +63,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_binomial_param_estimate.Rd b/man/util_binomial_param_estimate.Rd index d2827f9d..584eaa0b 100644 --- a/man/util_binomial_param_estimate.Rd +++ b/man/util_binomial_param_estimate.Rd @@ -65,6 +65,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Binomial: diff --git a/man/util_burr_param_estimate.Rd b/man/util_burr_param_estimate.Rd index 590b3356..421f03af 100644 --- a/man/util_burr_param_estimate.Rd +++ b/man/util_burr_param_estimate.Rd @@ -62,6 +62,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Burr: diff --git a/man/util_cauchy_aic.Rd b/man/util_cauchy_aic.Rd index d6c6eb7d..c10397a3 100644 --- a/man/util_cauchy_aic.Rd +++ b/man/util_cauchy_aic.Rd @@ -69,7 +69,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_cauchy_param_estimate.Rd b/man/util_cauchy_param_estimate.Rd index 5cd3907c..4b5783e7 100644 --- a/man/util_cauchy_param_estimate.Rd +++ b/man/util_cauchy_param_estimate.Rd @@ -60,6 +60,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Cauchy: diff --git a/man/util_chisq_aic.Rd b/man/util_chisq_aic.Rd index 09c6a20d..620bf403 100644 --- a/man/util_chisq_aic.Rd +++ b/man/util_chisq_aic.Rd @@ -47,7 +47,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_chisquare_param_estimate.Rd b/man/util_chisquare_param_estimate.Rd index 312aa338..f3fd38ca 100644 --- a/man/util_chisquare_param_estimate.Rd +++ b/man/util_chisquare_param_estimate.Rd @@ -91,6 +91,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Chisquare: diff --git a/man/util_exponential_aic.Rd b/man/util_exponential_aic.Rd index fb31fce2..e52b49d1 100644 --- a/man/util_exponential_aic.Rd +++ b/man/util_exponential_aic.Rd @@ -58,7 +58,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_exponential_param_estimate.Rd b/man/util_exponential_param_estimate.Rd index 539f9198..1f6809b0 100644 --- a/man/util_exponential_param_estimate.Rd +++ b/man/util_exponential_param_estimate.Rd @@ -60,6 +60,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Exponential: diff --git a/man/util_gamma_aic.Rd b/man/util_gamma_aic.Rd index 3469085f..78b2f9c2 100644 --- a/man/util_gamma_aic.Rd +++ b/man/util_gamma_aic.Rd @@ -66,7 +66,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_gamma_param_estimate.Rd b/man/util_gamma_param_estimate.Rd index c0d27bf0..d312ad43 100644 --- a/man/util_gamma_param_estimate.Rd +++ b/man/util_gamma_param_estimate.Rd @@ -60,6 +60,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Gamma: diff --git a/man/util_geometric_aic.Rd b/man/util_geometric_aic.Rd index 14a940f8..41b08bea 100644 --- a/man/util_geometric_aic.Rd +++ b/man/util_geometric_aic.Rd @@ -63,7 +63,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_geometric_param_estimate.Rd b/man/util_geometric_param_estimate.Rd index 5156a13d..b27d5840 100644 --- a/man/util_geometric_param_estimate.Rd +++ b/man/util_geometric_param_estimate.Rd @@ -62,6 +62,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Geometric: diff --git a/man/util_hypergeometric_aic.Rd b/man/util_hypergeometric_aic.Rd index 65038bf6..65e2a28c 100644 --- a/man/util_hypergeometric_aic.Rd +++ b/man/util_hypergeometric_aic.Rd @@ -64,7 +64,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_hypergeometric_param_estimate.Rd b/man/util_hypergeometric_param_estimate.Rd index d2fbe37c..305dc352 100644 --- a/man/util_hypergeometric_param_estimate.Rd +++ b/man/util_hypergeometric_param_estimate.Rd @@ -85,6 +85,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Hypergeometric: diff --git a/man/util_logistic_aic.Rd b/man/util_logistic_aic.Rd index 7eceabba..e95317a6 100644 --- a/man/util_logistic_aic.Rd +++ b/man/util_logistic_aic.Rd @@ -65,7 +65,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_logistic_param_estimate.Rd b/man/util_logistic_param_estimate.Rd index 5d222b2e..aa84b2fe 100644 --- a/man/util_logistic_param_estimate.Rd +++ b/man/util_logistic_param_estimate.Rd @@ -70,6 +70,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Logistic: diff --git a/man/util_lognormal_aic.Rd b/man/util_lognormal_aic.Rd index 39149d5a..e8f9f212 100644 --- a/man/util_lognormal_aic.Rd +++ b/man/util_lognormal_aic.Rd @@ -65,7 +65,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_lognormal_param_estimate.Rd b/man/util_lognormal_param_estimate.Rd index 3a9250ef..c4e6393f 100644 --- a/man/util_lognormal_param_estimate.Rd +++ b/man/util_lognormal_param_estimate.Rd @@ -69,6 +69,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Lognormal: diff --git a/man/util_negative_binomial_aic.Rd b/man/util_negative_binomial_aic.Rd index a591f2d5..61f73bd8 100644 --- a/man/util_negative_binomial_aic.Rd +++ b/man/util_negative_binomial_aic.Rd @@ -65,7 +65,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_negative_binomial_param_estimate.Rd b/man/util_negative_binomial_param_estimate.Rd index 55b5f265..1c49ca1c 100644 --- a/man/util_negative_binomial_param_estimate.Rd +++ b/man/util_negative_binomial_param_estimate.Rd @@ -76,6 +76,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Binomial: diff --git a/man/util_normal_aic.Rd b/man/util_normal_aic.Rd index 0461aa47..207557d7 100644 --- a/man/util_normal_aic.Rd +++ b/man/util_normal_aic.Rd @@ -47,7 +47,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_normal_param_estimate.Rd b/man/util_normal_param_estimate.Rd index 581dab14..f0d2d382 100644 --- a/man/util_normal_param_estimate.Rd +++ b/man/util_normal_param_estimate.Rd @@ -69,6 +69,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Gaussian: diff --git a/man/util_pareto_aic.Rd b/man/util_pareto_aic.Rd index e128f4a1..7d435bae 100644 --- a/man/util_pareto_aic.Rd +++ b/man/util_pareto_aic.Rd @@ -64,7 +64,8 @@ Other Utility: \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_pareto_param_estimate.Rd b/man/util_pareto_param_estimate.Rd index 1a4b7c80..07b3dac9 100644 --- a/man/util_pareto_param_estimate.Rd +++ b/man/util_pareto_param_estimate.Rd @@ -69,6 +69,7 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Pareto: diff --git a/man/util_poisson_aic.Rd b/man/util_poisson_aic.Rd index c7069996..1f371442 100644 --- a/man/util_poisson_aic.Rd +++ b/man/util_poisson_aic.Rd @@ -62,7 +62,8 @@ Other Utility: \code{\link{util_pareto_aic}()}, \code{\link{util_rztnbinom_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_poisson_param_estimate.Rd b/man/util_poisson_param_estimate.Rd index 809a7be3..ecf8ea72 100644 --- a/man/util_poisson_param_estimate.Rd +++ b/man/util_poisson_param_estimate.Rd @@ -63,12 +63,14 @@ Other Parameter Estimation: \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Poisson: \code{\link{tidy_poisson}()}, \code{\link{tidy_zero_truncated_poisson}()}, -\code{\link{util_poisson_stats_tbl}()} +\code{\link{util_poisson_stats_tbl}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_poisson_stats_tbl.Rd b/man/util_poisson_stats_tbl.Rd index b6470eaf..286882ef 100644 --- a/man/util_poisson_stats_tbl.Rd +++ b/man/util_poisson_stats_tbl.Rd @@ -32,7 +32,8 @@ tidy_poisson() |> Other Poisson: \code{\link{tidy_poisson}()}, \code{\link{tidy_zero_truncated_poisson}()}, -\code{\link{util_poisson_param_estimate}()} +\code{\link{util_poisson_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()} Other Distribution Statistics: \code{\link{util_bernoulli_stats_tbl}()}, diff --git a/man/util_rztnbinom_aic.Rd b/man/util_rztnbinom_aic.Rd index 7b2d6e1c..3f7927b3 100644 --- a/man/util_rztnbinom_aic.Rd +++ b/man/util_rztnbinom_aic.Rd @@ -75,7 +75,8 @@ Other Utility: \code{\link{util_pareto_aic}()}, \code{\link{util_poisson_aic}()}, \code{\link{util_uniform_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_triangular_param_estimate.Rd b/man/util_triangular_param_estimate.Rd index 50aaeab9..576ae5f0 100644 --- a/man/util_triangular_param_estimate.Rd +++ b/man/util_triangular_param_estimate.Rd @@ -68,6 +68,7 @@ Other Parameter Estimation: \code{\link{util_poisson_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Triangular: diff --git a/man/util_uniform_aic.Rd b/man/util_uniform_aic.Rd index f96909fd..5ccf6939 100644 --- a/man/util_uniform_aic.Rd +++ b/man/util_uniform_aic.Rd @@ -64,7 +64,8 @@ Other Utility: \code{\link{util_pareto_aic}()}, \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, -\code{\link{util_weibull_aic}()} +\code{\link{util_weibull_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_uniform_param_estimate.Rd b/man/util_uniform_param_estimate.Rd index 8b72ff18..c20954c5 100644 --- a/man/util_uniform_param_estimate.Rd +++ b/man/util_uniform_param_estimate.Rd @@ -60,6 +60,7 @@ Other Parameter Estimation: \code{\link{util_poisson_param_estimate}()}, \code{\link{util_triangular_param_estimate}()}, \code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Uniform: diff --git a/man/util_weibull_aic.Rd b/man/util_weibull_aic.Rd index 36a71e22..c6132f3b 100644 --- a/man/util_weibull_aic.Rd +++ b/man/util_weibull_aic.Rd @@ -66,7 +66,8 @@ Other Utility: \code{\link{util_pareto_aic}()}, \code{\link{util_poisson_aic}()}, \code{\link{util_rztnbinom_aic}()}, -\code{\link{util_uniform_aic}()} +\code{\link{util_uniform_aic}()}, +\code{\link{util_ztp_aic}()} } \author{ Steven P. Sanderson II, MPH diff --git a/man/util_weibull_param_estimate.Rd b/man/util_weibull_param_estimate.Rd index ca183061..c4c03337 100644 --- a/man/util_weibull_param_estimate.Rd +++ b/man/util_weibull_param_estimate.Rd @@ -60,6 +60,7 @@ Other Parameter Estimation: \code{\link{util_poisson_param_estimate}()}, \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()}, \code{\link{util_ztn_binomial_param_estimate}()} Other Weibull: diff --git a/man/util_zero_truncated_poisson_param_estimate.Rd b/man/util_zero_truncated_poisson_param_estimate.Rd new file mode 100644 index 00000000..7286ed40 --- /dev/null +++ b/man/util_zero_truncated_poisson_param_estimate.Rd @@ -0,0 +1,103 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/est-param-ztpois.R +\name{util_zero_truncated_poisson_param_estimate} +\alias{util_zero_truncated_poisson_param_estimate} +\title{Estimate Zero Truncated Poisson Parameters} +\usage{ +util_zero_truncated_poisson_param_estimate(.x, .auto_gen_empirical = TRUE) +} +\arguments{ +\item{.x}{The vector of data to be passed to the function. Must be non-negative +integers.} + +\item{.auto_gen_empirical}{This is a boolean value of TRUE/FALSE with default +set to TRUE. This will automatically create the \code{tidy_empirical()} output +for the \code{.x} parameter and use the \code{tidy_combine_distributions()}. The user +can then plot out the data using \verb{$combined_data_tbl} from the function output.} +} +\value{ +A tibble/list +} +\description{ +This function will attempt to estimate the Zero Truncated Poisson +lambda parameter given some vector of values \code{.x}. The function will return a +tibble output, and if the parameter \code{.auto_gen_empirical} is set to \code{TRUE} +then the empirical data given to the parameter \code{.x} will be run through the +\code{tidy_empirical()} function and combined with the estimated Zero Truncated +Poisson data. +} +\details{ +This function estimates the parameter lambda of a Zero-Truncated Poisson distribution +based on a vector of non-negative integer values \code{.x}. The Zero-Truncated Poisson +distribution is a discrete probability distribution that models the number of events +occurring in a fixed interval of time, given that at least one event has occurred. + +The estimation is performed by minimizing the negative log-likelihood of the observed +data \code{.x} under the Zero-Truncated Poisson model. The negative log-likelihood function +used for optimization is defined as: + +\deqn{-\sum_{i=1}^{n} \log(P(X_i = x_i \mid X_i > 0, \lambda))}{,} + +where \( X_i \) are the observed values in \code{.x} and \code{lambda} is the parameter +of the Zero-Truncated Poisson distribution. + +The optimization process uses the \code{optim} function to find the value of \code{lambda} +that minimizes this negative log-likelihood. The chosen optimization method is Brent's +method (\code{method = "Brent"}) within a specified interval \verb{[0, max(.x)]}. + +If \code{.auto_gen_empirical} is set to \code{TRUE}, the function will generate empirical data +statistics using \code{tidy_empirical()} for the input data \code{.x} and then combine this +empirical data with the estimated Zero-Truncated Poisson distribution using +\code{tidy_combine_distributions()}. This combined data can be accessed via the +\verb{$combined_data_tbl} element of the function output. + +The function returns a tibble containing the estimated parameter \code{lambda} along +with other summary statistics of the input data (sample size, minimum, maximum). +} +\examples{ +library(dplyr) +library(ggplot2) + +tc <- tidy_zero_truncated_poisson() |> pull(y) +output <- util_zero_truncated_poisson_param_estimate(tc) + +output$parameter_tbl + +output$combined_data_tbl |> + tidy_combined_autoplot() + +} +\seealso{ +Other Parameter Estimation: +\code{\link{util_bernoulli_param_estimate}()}, +\code{\link{util_beta_param_estimate}()}, +\code{\link{util_binomial_param_estimate}()}, +\code{\link{util_burr_param_estimate}()}, +\code{\link{util_cauchy_param_estimate}()}, +\code{\link{util_chisquare_param_estimate}()}, +\code{\link{util_exponential_param_estimate}()}, +\code{\link{util_gamma_param_estimate}()}, +\code{\link{util_geometric_param_estimate}()}, +\code{\link{util_hypergeometric_param_estimate}()}, +\code{\link{util_logistic_param_estimate}()}, +\code{\link{util_lognormal_param_estimate}()}, +\code{\link{util_negative_binomial_param_estimate}()}, +\code{\link{util_normal_param_estimate}()}, +\code{\link{util_pareto_param_estimate}()}, +\code{\link{util_poisson_param_estimate}()}, +\code{\link{util_triangular_param_estimate}()}, +\code{\link{util_uniform_param_estimate}()}, +\code{\link{util_weibull_param_estimate}()}, +\code{\link{util_ztn_binomial_param_estimate}()} + +Other Poisson: +\code{\link{tidy_poisson}()}, +\code{\link{tidy_zero_truncated_poisson}()}, +\code{\link{util_poisson_param_estimate}()}, +\code{\link{util_poisson_stats_tbl}()} +} +\author{ +Steven P. Sanderson II, MPH +} +\concept{Parameter Estimation} +\concept{Poisson} diff --git a/man/util_ztn_binomial_param_estimate.Rd b/man/util_ztn_binomial_param_estimate.Rd index 4f61801a..7030e271 100644 --- a/man/util_ztn_binomial_param_estimate.Rd +++ b/man/util_ztn_binomial_param_estimate.Rd @@ -70,7 +70,8 @@ Other Parameter Estimation: \code{\link{util_poisson_param_estimate}()}, \code{\link{util_triangular_param_estimate}()}, \code{\link{util_uniform_param_estimate}()}, -\code{\link{util_weibull_param_estimate}()} +\code{\link{util_weibull_param_estimate}()}, +\code{\link{util_zero_truncated_poisson_param_estimate}()} Other Binomial: \code{\link{tidy_binomial}()}, diff --git a/man/util_ztp_aic.Rd b/man/util_ztp_aic.Rd new file mode 100644 index 00000000..73d0bc8d --- /dev/null +++ b/man/util_ztp_aic.Rd @@ -0,0 +1,58 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils-aic-ztpoisson.R +\name{util_ztp_aic} +\alias{util_ztp_aic} +\title{Calculate Akaike Information Criterion (AIC) for zero-truncated poisson Distribution} +\usage{ +util_ztp_aic(.x) +} +\arguments{ +\item{.x}{A numeric vector containing the data to be fitted to a zero-truncated poisson distribution.} +} +\value{ +The AIC value calculated based on the fitted zero-truncated poisson distribution to the provided data. +} +\description{ +This function estimates the parameters of a zero-truncated poisson distribution from the provided data using maximum likelihood estimation, +and then calculates the AIC value based on the fitted distribution. +} +\details{ +This function calculates the Akaike Information Criterion (AIC) for a zero-truncated poisson distribution fitted to the provided data. +} +\examples{ +library(actuar) + +# Example 1: Calculate AIC for a sample dataset +set.seed(123) +x <- rztpois(30, lambda = 3) +util_ztp_aic(x) + +} +\seealso{ +Other Utility: +\code{\link{check_duplicate_rows}()}, +\code{\link{convert_to_ts}()}, +\code{\link{quantile_normalize}()}, +\code{\link{tidy_mcmc_sampling}()}, +\code{\link{util_beta_aic}()}, +\code{\link{util_binomial_aic}()}, +\code{\link{util_cauchy_aic}()}, +\code{\link{util_chisq_aic}()}, +\code{\link{util_exponential_aic}()}, +\code{\link{util_gamma_aic}()}, +\code{\link{util_geometric_aic}()}, +\code{\link{util_hypergeometric_aic}()}, +\code{\link{util_logistic_aic}()}, +\code{\link{util_lognormal_aic}()}, +\code{\link{util_negative_binomial_aic}()}, +\code{\link{util_normal_aic}()}, +\code{\link{util_pareto_aic}()}, +\code{\link{util_poisson_aic}()}, +\code{\link{util_rztnbinom_aic}()}, +\code{\link{util_uniform_aic}()}, +\code{\link{util_weibull_aic}()} +} +\author{ +Steven P. Sanderson II, MPH +} +\concept{Utility}