非数值数据显著性检验及事后检验咨询:Origin与ESBL关联分析
问题描述
我正在处理如下非数值数据:
| Origin | ESBL |
|---|---|
| Hospital | ESBL |
| Hospital | Non-ESBL |
| Hospital | ESBL |
| City | ESBL |
| Hospital | Non-ESBL |
| City | ESBL |
| Country | ESBL |
| Hospital | ESBL |
我希望分析Origin与ESBL变量之间是否存在统计关联,目前已在R中通过以下代码生成列联表:
cont_tab<-table(data$Origin, data$ESBL)
并执行卡方独立性检验:
chi_test<-chisq.test(cont_tab)
检验结果为:
X-squared = 17.306, df = 2, p-value = 0.0001746
确认两者存在关联,但我想明确是哪些组合(如ESBL-Hospital、Non-ESBL-Hospital等)导致该结果。我尝试使用以下代码执行多重Fisher检验:
library(RVAideMemoire) multifish<-fisher.multcomp(cont_tab)
但仅得到如下列联表结果,未获取预期信息:
ESBL Non-ESBL Hospital 46 122 City 27 21 Country 56 69
请问我是否操作有误?是否有更合适的方法?
解决方案
1. 关于fisher.multcomp的操作说明
你没有操作错误,只是没调用正确的结果查看方法。fisher.multcomp()返回的是包含多重比较结果的对象,直接输入变量名只会显示原始列联表,执行print(multifish)或summary(multifish)就能看到具体的两两比较结果,包括OR值、置信区间和校正后的p值。
2. 替代分析方法推荐
方法一:查看卡方检验的标准化残差
卡方检验的标准化残差可以直接定位观测值与期望值差异显著的单元格(绝对值>2通常认为有统计学意义):
# 计算并查看标准化残差 chi_test$stdres
通过残差结果能快速找到偏离预期的组合,比如若Hospital-Non-ESBL的残差为正,说明该组合的实际观测数远高于理论预期。
方法二:使用pairwise.prop.test做两两比例比较
针对不同Origin组的ESBL阳性率,直接进行两两比较并自动校正p值:
# 对列联表执行两两比例检验,采用Bonferroni校正 pairwise.prop.test(cont_tab, p.adjust.method = "bonferroni")
该方法会输出每两组Origin之间ESBL阳性率的差异结果,包含校正后的p值,能明确哪两组的差异是关联的主要来源。
方法三:逻辑回归+emmeans事后检验
先拟合逻辑回归模型,再用emmeans包获取各组ESBL阳性率的估计值并做两两比较:
library(emmeans) # 拟合逻辑回归模型 model <- glm(ESBL ~ Origin, data = data, family = binomial) # 执行两两比较,输出概率形式的结果 emmeans(model, pairwise ~ Origin, type = "response")
这种方法不仅能得到各组的ESBL阳性率估计值,还能提供比较的p值和置信区间,结果更直观易读。
内容的提问来源于stack exchange,提问作者Sushiroll
相关产品推荐
相关产品推荐

