Skip to content

Commit

Permalink
Merge pull request #449 from spsanderson/development
Browse files Browse the repository at this point in the history
Fixes #432
  • Loading branch information
spsanderson authored Apr 25, 2024
2 parents fa4ab2b + 9758906 commit ac3079c
Show file tree
Hide file tree
Showing 17 changed files with 175 additions and 14 deletions.
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ export(util_triangular_stats_tbl)
export(util_uniform_aic)
export(util_uniform_param_estimate)
export(util_uniform_stats_tbl)
export(util_weibull_aic)
export(util_weibull_param_estimate)
export(util_weibull_stats_tbl)
importFrom(data.table,.SD)
Expand Down
78 changes: 78 additions & 0 deletions R/utils-aic-weibull.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#' Calculate Akaike Information Criterion (AIC) for Weibull Distribution
#'
#' This function calculates the Akaike Information Criterion (AIC) for a Weibull
#' distribution fitted to the provided data.
#'
#' @family Utility
#' @author Steven P. Sanderson II, MPH
#'
#' @description
#' This function estimates the shape and scale parameters of a Weibull 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 Weibull distribution.
#'
#' @details
#' This function fits a Weibull distribution to the provided data using maximum
#' likelihood estimation. It estimates the shape and scale parameters
#' of the Weibull distribution using maximum likelihood estimation. Then, it
#' calculates the AIC value based on the fitted distribution.
#'
#' Initial parameter estimates: The function uses the method of moments estimates
#' as starting points for the shape and scale parameters of the Weibull
#' 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 <- rweibull(100, shape = 2, scale = 1)
#' util_weibull_aic(x)
#'
#' @return
#' The AIC value calculated based on the fitted Weibull distribution to the provided data.
#'
#' @name util_weibull_aic
#'
#' @export
#' @rdname util_weibull_aic
util_weibull_aic <- function(.x) {
# Tidyeval
x <- as.numeric(.x)

# Negative log-likelihood function for Weibull distribution
neg_log_lik_weibull <- function(par, data) {
shape <- par[1]
scale <- par[2]
n <- length(data)
-sum(dweibull(data, shape = shape, scale = scale, log = TRUE))
}

# Get initial parameter estimates: method of moments
pe <- TidyDensity::util_weibull_param_estimate(x)$parameter_tbl

# Fit Weibull distribution using optim
fit_weibull <- optim(
c(pe$shape, pe$scale),
neg_log_lik_weibull,
data = x
)

# Extract log-likelihood and number of parameters
logLik_weibull <- -fit_weibull$value
k_weibull <- 2 # Number of parameters for Weibull distribution (shape and scale)

# Calculate AIC
AIC_weibull <- 2 * k_weibull - 2 * logLik_weibull

# Return AIC
return(AIC_weibull)
}
3 changes: 2 additions & 1 deletion man/check_duplicate_rows.Rd

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

3 changes: 2 additions & 1 deletion man/convert_to_ts.Rd

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

3 changes: 2 additions & 1 deletion man/quantile_normalize.Rd

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

3 changes: 2 additions & 1 deletion man/tidy_mcmc_sampling.Rd

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

3 changes: 2 additions & 1 deletion man/util_beta_aic.Rd

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

3 changes: 2 additions & 1 deletion man/util_cauchy_aic.Rd

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

3 changes: 2 additions & 1 deletion man/util_chisq_aic.Rd

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

3 changes: 2 additions & 1 deletion man/util_exponential_aic.Rd

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

3 changes: 2 additions & 1 deletion man/util_gamma_aic.Rd

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

3 changes: 2 additions & 1 deletion man/util_logistic_aic.Rd

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

3 changes: 2 additions & 1 deletion man/util_lognormal_aic.Rd

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

3 changes: 2 additions & 1 deletion man/util_normal_aic.Rd

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

3 changes: 2 additions & 1 deletion man/util_pareto_aic.Rd

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

3 changes: 2 additions & 1 deletion man/util_uniform_aic.Rd

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

68 changes: 68 additions & 0 deletions man/util_weibull_aic.Rd

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

0 comments on commit ac3079c

Please sign in to comment.