R语言描述性统计:数据分析第一步与实战技巧
1. 为什么描述性统计是R语言数据分析的第一步每次拿到新数据集时我做的第一件事就是运行描述性统计。这就像医生问诊时的基础检查能快速发现数据的体温和脉搏。在R中summary()函数是我的听诊器30秒内就能告诉我数据分布的基本情况。上周分析电商用户行为数据时描述统计就救了我一命。summary()显示某字段的第三四分位数居然是负数这才发现数据导入时发生了编码错误。如果没有这步检查后续的回归模型就会建立在错误数据上。2. 核心统计量全解读与R实现2.1 集中趋势指标的三驾马车mean()、median()和modeest包的mlv()构成了R中最常用的中心测量工具。但要注意它们的适用场景收入数据用median()更稳健纽约市2022年家庭收入中位数$67,046但均值被富豪拉高到$107,000温度数据mean()更合适每日平均温度能反映整体趋势商品评分可能需要众数mlv()显示某手机在电商平台80%的评分集中在4.5星# 实战示例处理有异常值的数据 sales - c(120, 150, 135, 140, 125, 10000) # 最后一个值是输入错误 cat(均值:, mean(sales), \n中位数:, median(sales))2.2 离散程度的四种度量方式IQR()比range()更实用特别是在处理脏数据时。我的经验法则是当发现标准差(sd())大于均值时数据一定有异常。# 比较两种离散度量的差异 set.seed(123) normal_data - rnorm(1000) outlier_data - c(normal_data, rep(1000, 5)) cat(干净数据:\n, 标准差:, sd(normal_data), \nIQR:, IQR(normal_data), \n\n有异常值的数据:\n, 标准差:, sd(outlier_data), \nIQR:, IQR(outlier_data))2.3 分布形态的视觉化诊断skewness()和kurtosis()需要moments包的数字可能抽象但配合ggplot2的几何图形就直观了library(ggplot2) ggplot(data.frame(x rbeta(1000, 2, 5)), aes(x)) geom_histogram(bins 30, fill steelblue) geom_density(color red)重要提示峰度3不一定就是尖峰分布要结合样本量判断。我常用Bootstrapping方法验证library(boot) kurtosis_func - function(data, indices) { moments::kurtosis(data[indices]) } boot_results - boot(data, kurtosis_func, R 1000) boot.ci(boot_results, type perc)3. 专业级描述统计实战技巧3.1 psych包的describe()进阶用法psych::describe()的输出比基础summary丰富得多但要注意对因子变量会计算错误的统计量需先过滤trim参数处理截尾均值时我通常设为0.1两端各去掉10%极端值library(psych) describe(iris[-5], trim 0.1, check FALSE) # 排除Species因子列3.2 分组统计的三种实现方式比较tapply、dplyr和data.table的性能差异# 数据集较大时1百万行data.table最快 library(microbenchmark) microbenchmark( tapply tapply(mtcars$mpg, mtcars$cyl, mean), dplyr mtcars %% group_by(cyl) %% summarise(mean(mpg)), data.table as.data.table(mtcars)[, .(mean_mpg mean(mpg)), by cyl] )3.3 缺失值处理的黄金准则naniar包的gg_miss_var()可视化缺失模式后我的处理流程是缺失5%用mice包多重插补5-30%考虑哑变量法30%建议删除该变量library(naniar) airquality %% gg_miss_var(show_pct TRUE)4. 商业分析中的描述统计案例4.1 零售业销售数据分析用分组统计发现周末效应sales_data %% mutate(weekday weekdays(date), weekend ifelse(weekday %in% c(Saturday, Sunday), Y, N)) %% group_by(weekend) %% summarise(avg_sales mean(amount), sd_sales sd(amount), promo_effect cor(amount, promotion))4.2 A/B测试结果解读不仅要看均值差异更要看分布重叠程度library(ggplot2) ggplot(ab_test_data, aes(x conversion, fill group)) geom_density(alpha 0.5) geom_vline(xintercept c(mean_A, mean_B), linetype dashed)4.3 时间序列的描述性特征用rollapply计算移动统计量library(zoo) stock_price %% mutate( ma_7 rollapply(price, 7, mean, align right, fill NA), volatility rollapply(price, 30, sd, align right, fill NA) )5. 常见陷阱与解决方案5.1 统计量误导的四种情况双峰分布用单一均值描述解决方案先做密度图比例数据的标准差陷阱用Beta分布替代正态假设季节数据未调整先做季节性分解嵌套数据直接聚合用多层次模型5.2 大数据集的处理技巧对超过内存的数据用disk.frame包分块计算并行计算foreach doParallel组合加速近似算法bigmemory::bigcolmean()替代mean()library(disk.frame) sales_df - as.disk.frame(large_sales_data) describe_df - sales_df %% srckeep(c(amount, quantity)) %% summarise( mean_amount mean(amount), sd_quantity sd(quantity) )5.3 统计检验前的描述性检查做t-test前必须验证方差齐性var.test()正态性shapiro.test()或qqplot离群点boxplot.stats()$outt_test_precheck - function(x, y) { list( variance_test var.test(x, y), normality_x shapiro.test(x), normality_y shapiro.test(y), outliers_x boxplot.stats(x)$out, outliers_y boxplot.stats(y)$out ) }6. 自动化报告生成用rmarkdown创建动态描述统计报告--- title: 自动化数据分析报告 output: html_document --- {r setup} library(summarytools) st_options(style rmarkdown)dfSummary(iris, plain.ascii FALSE, style grid)最后分享一个我常用的自定义函数可以一键生成完整的描述统计报告 r make_descriptive_report - function(data, file_name) { rmarkdown::render( input system.file(templates/descriptive_template.Rmd, package summarytools), output_file file_name, params list(dataset data) ) }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2557991.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!