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

如何运行测试集全排列:遇首个失败即终止并保留末次通过结果

测试函数全排列执行与频率统计实现方案

已知条件

现有四个独立测试函数:C、R、L、Y,测试通过时分别返回分数1、2、3、4,测试拒绝时返回0。其中R函数示例如下(逻辑正常,无需修改):

R <- function(series, alpha=0.05) {
  library(tseries)
  library(LSTS)
  model <- 0
  ######################### Random Walk test #########################
  #H0: iid residuals
  RW <- Box.test(series, lag=1, type="Ljung")
  p_value3 <- RW$p.value
  if (p_value3 > alpha) {print("Fail to reject H_0, No autocorrelation, this is a Random Walk process !")
    model <- 2 
  }
  return(model)
}

执行规则

需遍历四个函数的全部24种排列组合,按以下逻辑执行:

  • 按排列顺序依次运行测试函数,一旦某函数返回非0分数(测试接受),立即终止后续测试,保留该分数
  • 若所有函数均返回0(全部拒绝),最终分数记为0

统计要求

完成所有排列执行后,统计各分数出现频率,输出格式如下:

分数频率
01
15
212
32
44

实现代码

1. 生成全排列

使用gtools包生成所有排列组合:

install.packages("gtools") # 首次使用需安装
library(gtools)
# 生成4个函数名的所有排列,每行对应一个排列
all_permutations <- permutations(n = 4, r = 4, v = c("C", "R", "L", "Y"))

2. 单排列执行逻辑

编写函数处理单个排列的测试流程:

execute_perm <- function(perm_vec, series_data, alpha_val=0.05) {
  for (func_name in perm_vec) {
    # 获取对应测试函数并执行
    test_result <- get(func_name)(series_data, alpha_val)
    if (test_result != 0) {
      # 测试通过,返回分数并停止
      return(test_result)
    }
  }
  # 所有测试都被拒绝,返回0
  return(0)
}

3. 批量执行与频率统计

# 假设你的时间序列数据存储在series变量中
results_vector <- c()

# 遍历所有排列,执行测试
for (row_idx in 1:nrow(all_permutations)) {
  current_perm <- all_permutations[row_idx, ]
  res <- execute_perm(current_perm, series)
  results_vector <- c(results_vector, res)
}

# 统计频率并整理成表格
frequency_table <- as.data.frame(table(results_vector))
colnames(frequency_table) <- c("分数", "频率")
# 按分数升序排序
frequency_table <- frequency_table[order(as.numeric(frequency_table$分数)), ]

# 输出结果
print(frequency_table)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:15:25