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

如何通过多参数mapply重复执行函数计算方法的检验效能

实现方案

你可以将单轮检验流程封装为独立函数,再通过R的replicate函数批量执行100次模拟,最终合并所有结果计算检验效能,完整实现代码如下:


步骤1:封装单轮模拟函数

# 单轮模拟函数:返回当前轮次所有变量对的p值
single_run <- function(){
  # 生成因变量数据集(注意:请调整nr参数保证和test_B行数一致)
  test_A <- data.frame(matrix(rnorm(500), nr=50, nc=10))
  # 生成自变量数据集
  test_B <- data.frame(matrix(sample(c(0,1,2), 500, replace = TRUE), nr=50, nc=10))
  # 生成所有变量组合
  A_B_pair <- expand.grid(c1=names(test_A), c2=names(test_B), stringsAsFactors = FALSE)
  
  # 单变量对检验函数
  test_function <- function(x,y){
    c1 <- test_A[[x]]
    c2 <- test_B[[y]]
    Data <- data.frame(XX=c1, YY=c2)
    model_lm <- lm(YY ~ XX, Data)
    est_lm <- as.numeric(model_lm$coefficients)[2]
    pvalue_lm <- as.numeric(summary(model_lm)$coefficients[,4][2])
    return(c(lm.estimator = est_lm, lm.pvalue = pvalue_lm))
  }
  
  # 批量计算所有变量对的检验结果
  output <- mapply(test_function, x=A_B_pair$c1, y=A_B_pair$c2)
  output.data <- data.frame(t(output))
  output_final <- cbind(A_B_pair, output.data)
  
  # 返回当前轮次所有p值
  return(output_final$lm.pvalue)
}

步骤2:批量执行模拟并计算检验效能

# 设定模拟重复次数
n_sim <- 100
# 执行100次模拟
all_pvalues <- replicate(n_sim, single_run(), simplify = FALSE)
# 合并所有轮次的p值为一个向量
all_pvalues_vec <- unlist(all_pvalues)
# 按公式计算检验效能
power <- mean(all_pvalues_vec <= 0.05)
# 打印结果
print(paste0("检验效能为:", round(power, 4)))

自定义调整说明

  • 若需要保留每一轮的系数估计值,可修改single_run()的返回值为完整的output_final,后续再汇总所有轮次结果计算平均效应值
  • 若需要调整一类错误阈值,直接修改power <- mean(all_pvalues_vec <= 0.05)中的0.05为目标阈值即可
  • 若需要提升模拟结果稳定性,可增大n_sim参数,检验效能模拟一般推荐至少1000次重复

注意:你原代码中test_A和test_B的行数不一致(10行 vs 50行),线性回归要求自变量和因变量长度相同,我已经在示例代码中将test_A的行数调整为50,你可以根据实际场景修改对应参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:27:01