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
相关产品推荐
相关产品推荐

