用R语言deaR包实战数据包络分析从数据清洗到决策洞察当你手头有一批银行分行、医院或学校的运营数据如何科学评估它们的效率高低数据包络分析DEA就像一台X光机能透视出各决策单元的效率真相。作为运筹学中的经典方法它不需要预设生产函数仅通过实际数据就能构建效率前沿面。本文将带你用R语言的deaR包完成从原始数据到决策建议的全流程实战。1. 环境准备与数据导入工欲善其事必先利其器。在开始DEA分析前我们需要准备好R环境和示例数据集。假设你正在评估10家连锁医院的运营效率投入指标包括医护人员数量人、设备投入金额万元和床位数量张产出指标则是年门诊量万人次、手术台数台和患者满意度评分百分制。首先安装并加载必要的包install.packages(deaR) install.packages(readxl) library(deaR) library(readxl)典型的CSV数据格式如下所示前5行示例DMU医护人员设备投入床位数量年门诊量手术台数满意度A医院12056030045320086B医院9548025038280082C医院15072040052350088导入数据并转换为DEA专用格式hospital_data - read.csv(hospital_efficiency.csv) dea_data - read_data(hospital_data, dmus 1, # DMU列位置 inputs 2:4, # 投入指标列范围 outputs 5:7) # 产出指标列范围注意确保数据中不含缺失值和负值建议先用summary()检查数据分布。极端异常值可能扭曲效率前沿需提前处理。2. CCR模型规模报酬不变下的效率评估CCR模型由Charnes、Cooper和Rhodes提出假设生产规模报酬不变CRS计算出的效率值称为技术效率。运行模型只需一行代码ccr_result - model_basic(dea_data, orientation io, # 投入导向 rts crs) # 规模报酬不变关键参数说明orientation分析导向io投入导向在现有产出下最小化投入oo产出导向在现有投入下最大化产出rts规模报酬假设crs常数规模报酬CCR模型vrs可变规模报酬BCC模型查看结果摘要summary(ccr_result)这将生成包含多个工作表的Excel文件其中最重要的是efficiencies技术效率值0-1之间1表示DEA有效位于效率前沿面上1表示存在改进空间slacks松弛变量投入过剩或产出不足的量targets达到有效需要调整的目标值技术效率可以分解为技术效率 纯技术效率 × 规模效率3. BCC模型规模报酬可变下的效率分解Banker、Charnes和Cooper扩展的BCC模型允许规模报酬可变VRS能分离出纯技术效率和规模效率bcc_result - model_basic(dea_data, orientation io, rts vrs) # 规模报酬可变结果解读要点纯技术效率反映管理和技术水平规模效率反映规模是否处于最优状态规模报酬递增扩大规模可提升效率规模报酬递减缩小规模更有利通过比较CCR和BCC结果可以制作效率类型诊断表DMU技术效率(CCR)纯技术效率(BCC)规模效率规模报酬状态A医院0.920.950.97递增B医院0.850.900.94递增C医院1.001.001.00最优提示当技术效率1而纯技术效率1时说明效率低下完全由规模不当引起。4. 结果可视化与决策建议数字结果需要转化为直观洞察。以下是几种有效的可视化方法效率值分布直方图library(ggplot2) efficiencies - get_efficiencies(bcc_result) ggplot(data.frame(DMUnames(efficiencies), Efficiencyefficiencies), aes(xEfficiency)) geom_histogram(bins10, fillsteelblue) labs(title纯技术效率分布)效率-规模散点图scale_efficiency - get_efficiencies(ccr_result)/get_efficiencies(bcc_result) plot(get_efficiencies(bcc_result), scale_efficiency, xlab纯技术效率, ylab规模效率, pch19, colifelse(scale_efficiency0.9, red, blue))基于分析结果可给出具体改进建议对纯技术效率低的DMU优化流程管理如门诊预约系统加强人员培训更新老旧设备对规模效率低的DMU规模报酬递增考虑扩大床位数量规模报酬递减精简冗余科室标杆学习识别效率前沿面上的DMU作为标杆分析其投入产出组合特征最后将关键结果导出为可交互的HTML报告library(rmarkdown) render(DEA_Report.Rmd, output_fileHospital_Efficiency.html)5. 高级技巧与常见问题排查实际分析中常遇到一些技术挑战这里分享几个实战经验处理零值数据方法1对所有数据加1后取对数hospital_data[-1] - log(hospital_data[-1] 1)方法2使用极小值替代如0.0001超效率模型区分有效DMUsuper_result - model_supereff(dea_data, rts vrs)敏感度分析检验指标稳健性# 移除满意度指标后的效率变化 dea_data2 - read_data(hospital_data[, -7], dmus1, inputs2:4, outputs5:6) bcc_result2 - model_basic(dea_data2, rtsvrs) cor(get_efficiencies(bcc_result), get_efficiencies(bcc_result2))常见报错解决方案Error in solve.default通常因为DMU数量不足至少需要3倍于投入产出指标总数效率值全为1检查是否有重复的DMU或线性相关的指标结果异常尝试切换导向io/oo或检查单位一致性在完成分析后建议保存工作空间以便后续复查save.image(DEA_Analysis.RData)