如何修改R的summary函数,使其计算几何均值而非默认算术均值
如何让R的summary函数基于几何均值生成汇总统计?
你当前使用R的summary()函数对TitanicSurvival数据集做分组汇总统计,代码如下:
data("TitanicSurvival") s <- summary(age ~ sex + survived, TitanicSurvival) plot(s, main ='', subtitles=FALSE)
默认情况下该函数会计算算术均值,要改为几何均值,可按以下方式实现:
核心前提
几何均值仅适用于正数数据,因此第一步需要过滤掉age字段中的NA、0或负数(TitanicSurvival的age无负数,但存在NA值):
clean_data <- TitanicSurvival[!is.na(TitanicSurvival$age) & TitanicSurvival$age > 0, ]
方法1:基础R实现分组几何均值+自定义绘图
用基础R的aggregate()函数直接计算分组几何均值(几何均值公式为exp(mean(log(x)))),再自行绘制可视化图表:
# 定义几何均值计算函数 geo_mean <- function(x) exp(mean(log(x), na.rm = TRUE)) # 按sex和survived分组计算age的几何均值 grouped_geo_mean <- aggregate(age ~ sex + survived, data = clean_data, FUN = geo_mean) print(grouped_geo_mean) # 绘制类似原summary的分组柱状图 barplot( tapply(grouped_geo_mean$age, list(grouped_geo_mean$sex, grouped_geo_mean$survived), identity), beside = TRUE, col = c("#1f77b4", "#ff7f0e"), main = "", xlab = "Sex", ylab = "Age (Geometric Mean)", legend.text = unique(grouped_geo_mean$survived), args.legend = list(x = "topright") )
方法2:用Hmisc包扩展summary函数(支持原plot方法)
如果你希望保留原summary()的输出格式和plot()方法,可以使用Hmisc包的summary.formula函数,它支持自定义统计函数:
# 安装并加载Hmisc包(首次使用需执行安装命令) # install.packages("Hmisc") library(Hmisc) # 传入自定义几何均值函数生成汇总结果 s <- summary(age ~ sex + survived, data = clean_data, fun = geo_mean) # 绘制可视化图 plot(s, main = "", subtitles = FALSE)
内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai
相关产品推荐
相关产品推荐

