如何在R中基于卡方检验结果绘制Coefplot优化数据可视化?
在R中用Coefplot可视化卡方检验结果
我来帮你梳理下结合你已完成的卡方检验,用Coefplot做可视化的具体步骤:
1. 把列联表转换成R可识别的格式
你给出的表格数据,我们先转成矩阵格式方便后续分析:
# 构建列联表矩阵 X2 <- matrix(c(11,21,18,19,8, 6,7,14,10,2, 9,22,19,8,0, 7,16,10,5,4, 9,13,10,8,3, 14,20,10,10,4), nrow = 6, byrow = TRUE, dimnames = list(c("5_min_blank", "Boldstyle", "Boldstyle_pause", "Breaststroke", "Breaststroke_pause", "Diving"), c("1", "2", "3", "5", "6")))
2. 执行你已完成的卡方检验
你之前运行的代码没问题,这里再贴出来方便对照:
fit.swim <- chisq.test(X2, simulate.p.value = TRUE, B = 10000)
运行后会得到Pearson卡方检验的结果,包含统计量、模拟p值等关键信息。
3. 用Coefplot可视化标准化残差
Coefplot本身常用于回归系数展示,但对于列联表的卡方检验,我们可以通过可视化标准化残差,直观看到每个单元格的观测值与预期值的偏离程度——这也是卡方检验里判断差异显著性的核心指标。
步骤3.1 安装并加载coefplot包
如果还没安装这个包,先执行安装命令:
install.packages("coefplot") library(coefplot)
步骤3.2 整理标准化残差数据
我们需要把卡方检验输出的标准化残差整理成Coefplot能识别的格式:
# 提取标准化残差 std_res <- as.vector(fit.swim$stdres) # 生成每个单元格的标签(声音类型+类别) cell_labels <- expand.grid(rownames(X2), colnames(X2)) cell_labels <- paste(cell_labels$Var1, cell_labels$Var2, sep = "_") # 转换成数据框 res_data <- data.frame(Variable = cell_labels, Value = std_res)
步骤3.3 绘制Coefplot
这里加了一些参数让图更清晰:
coefplot(res_data, title = "声音类型-类别组合的标准化残差可视化", xlab = "标准化残差值", ylab = "声音类型-类别组合", pointSize = 3, # 调整点的大小 lineSize = 1, # 调整置信区间线的粗细 verticalLine = 0) # 添加0基准线,方便对比正负偏离
小提示
- 标准化残差的绝对值如果大于2,一般认为该单元格的观测值与预期值存在显著差异,在图里一眼就能看出来
- 正的残差表示该单元格的观测数比预期多,负的则表示观测数比预期少
内容的提问来源于stack exchange,提问作者Jessi
相关产品推荐
相关产品推荐

