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

在R中使用boot包计算两组中位数差异的95%置信区间时返回NA结果的问题排查

问题诊断与修正方案

你遇到的NA结果问题,核心原因是bootstrap函数里的分组取值写错了!

看一下你的数据结构:q2vsq1_baseline_cont_outcome这个因子变量的水平是"0"(对应低基线组Q1)和"1"(对应高基线组Q2),但你写的med.diff函数里却用了"2"和"1"来筛选分组——显然找不到"2"这个组,当bootstrap抽样时,自然会因为找不到对应组的观测,导致中位数计算返回NA,最终整个boot结果出现NA。

修正后的代码

首先,修正med.diff函数里的分组筛选条件,把"2"改成"1","1"改成"0"(对应Q2减Q1的中位数差异):

library(boot)

# 修正后的中位数差异计算函数
med.diff <- function(d, i) {
  mydata_boot <- d[i,]
  # Q2(高基线组,水平"1")的中位数减去Q1(低基线组,水平"0")的中位数
  median(mydata_boot$change_continuous_outcome[mydata_boot$q2vsq1_baseline_cont_outcome == "1"]) - 
    median(mydata_boot$change_continuous_outcome[mydata_boot$q2vsq1_baseline_cont_outcome == "0"])
}

# 重新运行bootstrap
boot_result <- boot(data = mydata, statistic = med.diff, R = 1000)

# 查看bootstrap得到的中位数差异的中位数
median(boot_result$t)

# 计算95%百分位数置信区间
boot.ci(boot_result, type = "perc")

额外建议

下次写这类函数前,可以先检查因子变量的水平,避免取值错误:

levels(mydata$q2vsq1_baseline_cont_outcome)

这样能明确知道分组对应的取值是什么,减少这类低级错误~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:37:29