diff --git a/NAMESPACE b/NAMESPACE index 14f38a8d..3e95359d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -101,6 +101,7 @@ export(util_cauchy_stats_tbl) export(util_chisq_aic) export(util_chisquare_param_estimate) export(util_chisquare_stats_tbl) +export(util_exponential_aic) export(util_exponential_param_estimate) export(util_exponential_stats_tbl) export(util_f_stats_tbl) diff --git a/R/utils-aic-exponential.R b/R/utils-aic-exponential.R new file mode 100644 index 00000000..3397a41f --- /dev/null +++ b/R/utils-aic-exponential.R @@ -0,0 +1,73 @@ +#' Calculate Akaike Information Criterion (AIC) for Exponential Distribution +#' +#' This function calculates the Akaike Information Criterion (AIC) for an exponential distribution fitted to the provided data. +#' +#' @family Utility +#' @author Steven P. Sanderson II, MPH +#' +#' @description +#' This function estimates the rate parameter of an exponential 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 an exponential distribution. +#' +#' @details +#' This function fits an exponential distribution to the provided data using maximum likelihood estimation. It estimates the rate parameter +#' of the exponential distribution using maximum likelihood estimation. Then, it calculates the AIC value based on the fitted distribution. +#' +#' Initial parameter estimates: The function uses the reciprocal of the mean of the data as the initial estimate for the rate parameter. +#' +#' Optimization method: The function uses the optim function for optimization. You might explore different optimization methods within +#' optim for potentially better performance. +#' +#' Goodness-of-fit: While AIC is a useful metric for model comparison, it's recommended to also assess the goodness-of-fit of the chosen +#' model using visualization and other statistical tests. +#' +#' @examples +#' # Example 1: Calculate AIC for a sample dataset +#' set.seed(123) +#' x <- rexp(30) +#' util_exponential_aic(x) +#' +#' @return +#' The AIC value calculated based on the fitted exponential distribution to the provided data. +#' +#' @name util_exponential_aic +NULL + +#' @export +#' @rdname util_exponential_aic +util_exponential_aic <- function(.x) { + # Tidyeval + x <- as.numeric(.x) + + # Negative log-likelihood function for exponential distribution + neg_log_lik_exponential <- function(par, data) { + rate <- par[1] + n <- length(data) + -sum(dexp(data, rate = rate, log = TRUE)) + } + + # Get initial parameter estimate: reciprocal of the mean of the data + pe <- TidyDensity::util_exponential_param_estimate(x)$parameter_tbl + + # Fit exponential distribution using optim + fit_exponential <- optim( + pe$rate, + neg_log_lik_exponential, + data = x, + method = "Brent", + lower = 0.0001, + upper = 1000 + ) + + # Extract log-likelihood and number of parameters + logLik_exponential <- -fit_exponential$value + k_exponential <- 1 # Number of parameters for exponential distribution (rate) + + # Calculate AIC + AIC_exponential <- 2 * k_exponential - 2 * logLik_exponential + + # Return AIC + return(AIC_exponential) +} diff --git a/man/check_duplicate_rows.Rd b/man/check_duplicate_rows.Rd index 02889c77..6a54879e 100644 --- a/man/check_duplicate_rows.Rd +++ b/man/check_duplicate_rows.Rd @@ -40,6 +40,7 @@ Other Utility: \code{\link{util_beta_aic}()}, \code{\link{util_cauchy_aic}()}, \code{\link{util_chisq_aic}()}, +\code{\link{util_exponential_aic}()}, \code{\link{util_normal_aic}()} } \author{ diff --git a/man/convert_to_ts.Rd b/man/convert_to_ts.Rd index b62765ad..2f57b21f 100644 --- a/man/convert_to_ts.Rd +++ b/man/convert_to_ts.Rd @@ -66,6 +66,7 @@ Other Utility: \code{\link{util_beta_aic}()}, \code{\link{util_cauchy_aic}()}, \code{\link{util_chisq_aic}()}, +\code{\link{util_exponential_aic}()}, \code{\link{util_normal_aic}()} } \author{ diff --git a/man/quantile_normalize.Rd b/man/quantile_normalize.Rd index e4b78563..615a3fc7 100644 --- a/man/quantile_normalize.Rd +++ b/man/quantile_normalize.Rd @@ -66,6 +66,7 @@ Other Utility: \code{\link{util_beta_aic}()}, \code{\link{util_cauchy_aic}()}, \code{\link{util_chisq_aic}()}, +\code{\link{util_exponential_aic}()}, \code{\link{util_normal_aic}()} } \author{ diff --git a/man/tidy_mcmc_sampling.Rd b/man/tidy_mcmc_sampling.Rd index 641d5eac..2400e77c 100644 --- a/man/tidy_mcmc_sampling.Rd +++ b/man/tidy_mcmc_sampling.Rd @@ -47,6 +47,7 @@ Other Utility: \code{\link{util_beta_aic}()}, \code{\link{util_cauchy_aic}()}, \code{\link{util_chisq_aic}()}, +\code{\link{util_exponential_aic}()}, \code{\link{util_normal_aic}()} } \author{ diff --git a/man/util_beta_aic.Rd b/man/util_beta_aic.Rd index 3d8b2580..825815de 100644 --- a/man/util_beta_aic.Rd +++ b/man/util_beta_aic.Rd @@ -49,6 +49,7 @@ Other Utility: \code{\link{tidy_mcmc_sampling}()}, \code{\link{util_cauchy_aic}()}, \code{\link{util_chisq_aic}()}, +\code{\link{util_exponential_aic}()}, \code{\link{util_normal_aic}()} } \author{ diff --git a/man/util_cauchy_aic.Rd b/man/util_cauchy_aic.Rd index cdeb578f..9ba39cf8 100644 --- a/man/util_cauchy_aic.Rd +++ b/man/util_cauchy_aic.Rd @@ -56,6 +56,7 @@ Other Utility: \code{\link{tidy_mcmc_sampling}()}, \code{\link{util_beta_aic}()}, \code{\link{util_chisq_aic}()}, +\code{\link{util_exponential_aic}()}, \code{\link{util_normal_aic}()} } \author{ diff --git a/man/util_chisq_aic.Rd b/man/util_chisq_aic.Rd index 8496c202..f179db54 100644 --- a/man/util_chisq_aic.Rd +++ b/man/util_chisq_aic.Rd @@ -33,6 +33,7 @@ Other Utility: \code{\link{tidy_mcmc_sampling}()}, \code{\link{util_beta_aic}()}, \code{\link{util_cauchy_aic}()}, +\code{\link{util_exponential_aic}()}, \code{\link{util_normal_aic}()} } \author{ diff --git a/man/util_exponential_aic.Rd b/man/util_exponential_aic.Rd new file mode 100644 index 00000000..f79bca50 --- /dev/null +++ b/man/util_exponential_aic.Rd @@ -0,0 +1,54 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils-aic-exponential.R +\name{util_exponential_aic} +\alias{util_exponential_aic} +\title{Calculate Akaike Information Criterion (AIC) for Exponential Distribution} +\usage{ +util_exponential_aic(.x) +} +\arguments{ +\item{.x}{A numeric vector containing the data to be fitted to an exponential distribution.} +} +\value{ +The AIC value calculated based on the fitted exponential distribution to the provided data. +} +\description{ +This function estimates the rate parameter of an exponential 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 an exponential distribution fitted to the provided data. + +This function fits an exponential distribution to the provided data using maximum likelihood estimation. It estimates the rate parameter +of the exponential distribution using maximum likelihood estimation. Then, it calculates the AIC value based on the fitted distribution. + +Initial parameter estimates: The function uses the reciprocal of the mean of the data as the initial estimate for the rate parameter. + +Optimization method: The function uses the optim function for optimization. You might explore different optimization methods within +optim for potentially better performance. + +Goodness-of-fit: While AIC is a useful metric for model comparison, it's recommended to also assess the goodness-of-fit of the chosen +model using visualization and other statistical tests. +} +\examples{ +# Example 1: Calculate AIC for a sample dataset +set.seed(123) +x <- rexp(30) +util_exponential_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_cauchy_aic}()}, +\code{\link{util_chisq_aic}()}, +\code{\link{util_normal_aic}()} +} +\author{ +Steven P. Sanderson II, MPH +} +\concept{Utility} diff --git a/man/util_normal_aic.Rd b/man/util_normal_aic.Rd index 01e00694..66e56f71 100644 --- a/man/util_normal_aic.Rd +++ b/man/util_normal_aic.Rd @@ -34,7 +34,8 @@ Other Utility: \code{\link{tidy_mcmc_sampling}()}, \code{\link{util_beta_aic}()}, \code{\link{util_cauchy_aic}()}, -\code{\link{util_chisq_aic}()} +\code{\link{util_chisq_aic}()}, +\code{\link{util_exponential_aic}()} } \author{ Steven P. Sanderson II, MPH