Skip to content

Commit

Permalink
Merge pull request #442 from spsanderson/development
Browse files Browse the repository at this point in the history
Fixes #425
  • Loading branch information
spsanderson authored Apr 25, 2024
2 parents 9b062f5 + 56ff1f9 commit c0ce9a9
Show file tree
Hide file tree
Showing 10 changed files with 155 additions and 0 deletions.
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
83 changes: 83 additions & 0 deletions R/utils-aic-cauchy.R
Original file line number Diff line number Diff line change
@@ -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)
}
1 change: 1 addition & 0 deletions man/check_duplicate_rows.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/convert_to_ts.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/quantile_normalize.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/tidy_mcmc_sampling.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/util_beta_aic.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

64 changes: 64 additions & 0 deletions man/util_cauchy_aic.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/util_chisq_aic.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/util_normal_aic.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit c0ce9a9

Please sign in to comment.