如何通过多参数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
相关产品推荐
相关产品推荐

