diff --git a/NAMESPACE b/NAMESPACE index 6cc9e4f7..14f38a8d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -95,6 +95,7 @@ export(util_binomial_param_estimate) export(util_binomial_stats_tbl) export(util_burr_param_estimate) export(util_burr_stats_tbl) +export(util_cauchy_aic) export(util_cauchy_param_estimate) export(util_cauchy_stats_tbl) export(util_chisq_aic) diff --git a/R/utils-aic-cauchy.R b/R/utils-aic-cauchy.R new file mode 100644 index 00000000..095f8791 --- /dev/null +++ b/R/utils-aic-cauchy.R @@ -0,0 +1,83 @@ +#' Calculate Akaike Information Criterion (AIC) for Cauchy Distribution +#' +#' This function calculates the Akaike Information Criterion (AIC) for a Cauchy +#' distribution fitted to the provided data. +#' +#' @family Utility +#' @author Steven P. Sanderson II, MPH +#' +#' @description +#' This function estimates the parameters of a Cauchy 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 Cauchy +#' distribution. +#' +#' @details +#' This function fits a Cauchy distribution to the provided data using maximum +#' likelihood estimation. It first estimates the initial parameters of the +#' Cauchy distribution using the method of moments. Then, it optimizes the +#' negative log-likelihood function using the provided data and the initial +#' parameter estimates. Finally, it calculates the AIC value based on the +#' fitted distribution. +#' +#' Initial parameter estimates: The function uses the method of moments estimates +#' for the initial location and scale parameters of the Cauchy distribution. +#' +#' 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 <- rcauchy(30) +#' util_cauchy_aic(x) +#' +#' @return +#' The AIC value calculated based on the fitted Cauchy distribution to the +#' provided data. +#' +#' @name util_cauchy_aic +NULL + +#' @export +#' @rdname util_cauchy_aic +util_cauchy_aic <- function(.x) { + # Tidyeval + x <- as.numeric(.x) + + # Negative log-likelihood function for Cauchy distribution + neg_log_lik_cauchy <- function(par, data) { + location <- par[1] + scale <- par[2] + n <- length(data) + -sum(dcauchy(data, location = location, scale = scale, log = TRUE)) + } + + # Get initial parameter estimates (you might need to adjust this depending on your data) + # Here we use method of moments estimates as a starting point + pe <- TidyDensity::util_cauchy_param_estimate(x)$parameter_tbl + + # Fit Cauchy distribution using optim + fit_cauchy <- optim( + c(pe$location, pe$scale), + neg_log_lik_cauchy, + data = x + ) + + # Extract log-likelihood and number of parameters + logLik_cauchy <- -fit_cauchy$value + k_cauchy <- 2 # Number of parameters for Cauchy distribution (location and scale) + + # Calculate AIC + AIC_cauchy <- 2 * k_cauchy - 2 * logLik_cauchy + + # Return AIC + return(AIC_cauchy) +} diff --git a/man/check_duplicate_rows.Rd b/man/check_duplicate_rows.Rd index 839a8272..02889c77 100644 --- a/man/check_duplicate_rows.Rd +++ b/man/check_duplicate_rows.Rd @@ -38,6 +38,7 @@ Other Utility: \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}()} } diff --git a/man/convert_to_ts.Rd b/man/convert_to_ts.Rd index a7066c98..b62765ad 100644 --- a/man/convert_to_ts.Rd +++ b/man/convert_to_ts.Rd @@ -64,6 +64,7 @@ Other Utility: \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}()} } diff --git a/man/quantile_normalize.Rd b/man/quantile_normalize.Rd index 742b4cbc..e4b78563 100644 --- a/man/quantile_normalize.Rd +++ b/man/quantile_normalize.Rd @@ -64,6 +64,7 @@ Other Utility: \code{\link{convert_to_ts}()}, \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}()} } diff --git a/man/tidy_mcmc_sampling.Rd b/man/tidy_mcmc_sampling.Rd index 81fee1dd..641d5eac 100644 --- a/man/tidy_mcmc_sampling.Rd +++ b/man/tidy_mcmc_sampling.Rd @@ -45,6 +45,7 @@ Other Utility: \code{\link{convert_to_ts}()}, \code{\link{quantile_normalize}()}, \code{\link{util_beta_aic}()}, +\code{\link{util_cauchy_aic}()}, \code{\link{util_chisq_aic}()}, \code{\link{util_normal_aic}()} } diff --git a/man/util_beta_aic.Rd b/man/util_beta_aic.Rd index 2bab7eaa..3d8b2580 100644 --- a/man/util_beta_aic.Rd +++ b/man/util_beta_aic.Rd @@ -47,6 +47,7 @@ Other Utility: \code{\link{convert_to_ts}()}, \code{\link{quantile_normalize}()}, \code{\link{tidy_mcmc_sampling}()}, +\code{\link{util_cauchy_aic}()}, \code{\link{util_chisq_aic}()}, \code{\link{util_normal_aic}()} } diff --git a/man/util_cauchy_aic.Rd b/man/util_cauchy_aic.Rd new file mode 100644 index 00000000..cdeb578f --- /dev/null +++ b/man/util_cauchy_aic.Rd @@ -0,0 +1,64 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils-aic-cauchy.R +\name{util_cauchy_aic} +\alias{util_cauchy_aic} +\title{Calculate Akaike Information Criterion (AIC) for Cauchy Distribution} +\usage{ +util_cauchy_aic(.x) +} +\arguments{ +\item{.x}{A numeric vector containing the data to be fitted to a Cauchy +distribution.} +} +\value{ +The AIC value calculated based on the fitted Cauchy distribution to the +provided data. +} +\description{ +This function estimates the parameters of a Cauchy 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 Cauchy +distribution fitted to the provided data. + +This function fits a Cauchy distribution to the provided data using maximum +likelihood estimation. It first estimates the initial parameters of the +Cauchy distribution using the method of moments. Then, it optimizes the +negative log-likelihood function using the provided data and the initial +parameter estimates. Finally, it calculates the AIC value based on the +fitted distribution. + +Initial parameter estimates: The function uses the method of moments estimates +for the initial location and scale parameters of the Cauchy distribution. + +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 <- rcauchy(30) +util_cauchy_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_chisq_aic}()}, +\code{\link{util_normal_aic}()} +} +\author{ +Steven P. Sanderson II, MPH +} +\concept{Utility} diff --git a/man/util_chisq_aic.Rd b/man/util_chisq_aic.Rd index ee39cb97..8496c202 100644 --- a/man/util_chisq_aic.Rd +++ b/man/util_chisq_aic.Rd @@ -32,6 +32,7 @@ Other Utility: \code{\link{quantile_normalize}()}, \code{\link{tidy_mcmc_sampling}()}, \code{\link{util_beta_aic}()}, +\code{\link{util_cauchy_aic}()}, \code{\link{util_normal_aic}()} } \author{ diff --git a/man/util_normal_aic.Rd b/man/util_normal_aic.Rd index 9ba23758..01e00694 100644 --- a/man/util_normal_aic.Rd +++ b/man/util_normal_aic.Rd @@ -33,6 +33,7 @@ Other Utility: \code{\link{quantile_normalize}()}, \code{\link{tidy_mcmc_sampling}()}, \code{\link{util_beta_aic}()}, +\code{\link{util_cauchy_aic}()}, \code{\link{util_chisq_aic}()} } \author{