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

R语言非数值列绘制柱状图及与年龄列相关性分析方法

R语言治疗响应数据可视化与关联分析解决方案

1. 绘制Benefit分类的频数柱状图

报错原因说明

  • hist()是专门用于连续数值变量直方图绘制的函数,不适用于分类变量,手动将分类字符串转为as.numeric()会丢失分类标签,输出结果无实际意义
  • barplot()需要传入数值型的频数向量作为输入,直接传入分类字符串向量会触发类型错误

实现代码

首先统计各响应类型的出现频数,再传入barplot()绘制:

# 统计频数
benefit_freq <- table(mydata$Benefit)
# 绘制柱状图
barplot(benefit_freq, 
        main = "治疗响应类型分布",
        xlab = "响应类型",
        ylab = "样本数量",
        col = c("#2E9FDF", "#E7B800", "#FC4E07"))

2. 分析Age与Benefit的关联

可以结合可视化和统计检验两种方式验证年龄和治疗收益的相关性:

可视化:分组箱线图

直观展示不同响应组的年龄分布差异:

boxplot(Age ~ Benefit, 
        data = mydata,
        main = "不同治疗响应组的年龄分布",
        xlab = "响应类型",
        ylab = "年龄",
        col = c("#2E9FDF", "#E7B800", "#FC4E07"))

如果箱线图呈现CB组年龄中位数<ICB组<NCB组的趋势,就初步支持年轻患者治疗收益更好的假设。

统计检验

根据数据分布特征选择对应检验方法:

  • 若Age符合正态分布且各组方差齐性,使用单因素方差分析验证三组年龄是否存在显著差异:
aov_res <- aov(Age ~ Benefit, data = mydata)
summary(aov_res)

如果输出结果P值小于0.05,说明三组年龄存在统计学意义上的差异。

  • 若Age不符合正态分布,使用非参数Kruskal-Wallis秩和检验:
kruskal.test(Age ~ Benefit, data = mydata)
  • 若要验证「年龄越小、治疗响应越好」的趋势,将Benefit转为有序因子后做有序logistic回归:
# 按疗效从好到差设置有序因子层级
mydata$Benefit <- factor(mydata$Benefit, levels = c("CB", "ICB", "NCB"), ordered = TRUE)
# 加载MASS包做有序回归
library(MASS)
ologit_res <- polr(Benefit ~ Age, data = mydata, Hess = TRUE)
summary(ologit_res)

若Age的回归系数为正且显著,说明年龄越大,越倾向于落在响应更差的分类中,即年轻患者的治疗收益更好。

提示:请先核对你的数据框名称和列名是否与实际数据一致,如数据框实际命名为metadata,将代码中的mydata替换为metadata即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:36:04