You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求支持Anderson Darling Upper Tail Test的R包及可用函数

解决R语言中Anderson Darling Upper Tail Test的替代方案

以下是几个可行的替代方法,帮你实现Anderson Darling上尾拟合优度检验:

1. 手动实现核心检验逻辑

Anderson Darling上尾检验的核心是针对分布的上尾部分计算拟合优度统计量,你可以通过自定义函数实现,步骤如下:

  • 定义待检验的分布(如正态分布、指数分布)
  • 拟合原假设分布的参数
  • 筛选出上尾区域的样本(可通过分位数设定阈值)
  • 计算上尾条件CDF下的AD统计量
  • 通过蒙特卡洛模拟生成符合原假设的样本,对比得到p值

示例代码(以上尾正态分布检验为例):

ad_upper_tail_test <- function(x, dist = "norm", ..., tail_frac = 0.2) {
  # 安装并加载fitdistrplus用于分布参数拟合
  if (!requireNamespace("fitdistrplus", quietly = TRUE)) {
    stop("需要安装fitdistrplus包:install.packages('fitdistrplus')")
  }
  
  # 拟合原假设分布的参数
  fit_params <- fitdistrplus::fitdist(x, distr = dist, ...)$estimate
  
  # 计算上尾阈值(比如取上20%分位数)
  q_upper <- do.call(paste0("q", dist), c(list(p = 1 - tail_frac), as.list(fit_params)))
  
  # 筛选上尾样本
  x_upper <- x[x >= q_upper]
  n <- length(x_upper)
  if (n < 5) stop("上尾样本量过小,无法进行检验")
  
  # 计算上尾条件CDF:P(X <= x | X >= q_upper)
  cdf_vals <- do.call(paste0("p", dist), c(list(q = x_upper), as.list(fit_params)))
  cond_cdf <- (cdf_vals - (1 - tail_frac)) / tail_frac
  
  # 计算AD上尾统计量
  ecdf_vals <- ecdf(x_upper)(x_upper)
  ad_stat <- -n - sum((2*(1:n)-1)/n * (log(cond_cdf) + log(1 - rev(cond_cdf))))
  
  # 蒙特卡洛模拟获取p值
  sim_pval <- function() {
    sim_x <- do.call(paste0("r", dist), c(list(n = length(x)), as.list(fit_params)))
    sim_x_upper <- sim_x[sim_x >= q_upper]
    sim_n <- length(sim_x_upper)
    if (sim_n < 5) return(NA)
    sim_cdf <- do.call(paste0("p", dist), c(list(q = sim_x_upper), as.list(fit_params)))
    sim_cond_cdf <- (sim_cdf - (1 - tail_frac)) / tail_frac
    sim_ecdf <- ecdf(sim_x_upper)(sim_x_upper)
    -sim_n - sum((2*(1:sim_n)-1)/sim_n * (log(sim_cond_cdf) + log(1 - rev(sim_cond_cdf))))
  }
  sim_stats <- replicate(1000, sim_pval())
  sim_stats <- sim_stats[!is.na(sim_stats)]
  p_val <- mean(sim_stats >= ad_stat)
  
  return(list(ad_statistic = ad_stat, p_value = p_val, tail_threshold = q_upper))
}

# 使用示例
# set.seed(123)
# x <- rnorm(100, mean=0, sd=1)
# ad_upper_tail_test(x, dist="norm")

2. 基于goftest包扩展

goftest包的ad.test提供了标准Anderson Darling检验的核心逻辑,你可以修改其统计量计算部分:

  • 提取goftest::ad.test的统计量计算代码
  • 调整代码,仅针对上尾样本计算条件CDF下的AD统计量
  • 搭配蒙特卡洛模拟获取p值

3. 结合truncdist包处理截断分布

truncdist包可便捷生成截断分布样本、计算截断CDF,你可以利用它构建上尾检验:

  • 用truncdist::ptrunc计算上尾截断分布的累积概率
  • 基于该值计算AD统计量,再通过模拟得到显著性结果

内容的提问来源于stack exchange,提问作者Diana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:45:36