当前位置: 首页 > news >正文

用R语言deaR包搞定DEA效率分析:从数据导入到结果解读的保姆级教程

用R语言deaR包搞定DEA效率分析:从数据导入到结果解读的保姆级教程

第一次接触数据包络分析(DEA)时,我被那些晦涩的理论公式和复杂的效率指标搞得晕头转向。直到发现R语言的deaR包,才真正找到了将理论转化为实践的工具钥匙。本文将带你从零开始,用最直白的语言和详实的操作步骤,完成一次完整的DEA效率分析之旅。

1. 环境准备与数据导入

工欲善其事,必先利其器。在开始DEA分析前,我们需要确保R环境和数据都准备就绪。不同于其他统计方法,DEA对数据格式有着特殊要求,这也是新手最容易踩坑的地方。

首先安装必要的包(如果尚未安装):

install.packages("deaR") install.packages("readxl") # 用于读取Excel数据

推荐使用RStudio作为开发环境,它的自动补全和可视化功能能极大提升工作效率。安装完成后,加载这两个包:

library(deaR) library(readxl)

数据准备要点

  • 决策单元(DMU)需要放在第一列(如银行名称、年份等标识符)
  • 投入指标连续排列在前,产出指标连续排列在后
  • 避免缺失值和极端异常值

假设我们有一个名为"bank_efficiency.csv"的数据文件,结构如下:

bankemployeesassetsexpensesrevenueloans
A15050080120400
B20060090150500

读取并转换数据的正确姿势:

raw_data <- read.csv("bank_efficiency.csv") dea_data <- read_data( raw_data, dmus = 1, # DMU所在列 inputs = 2:4, # 投入指标列范围 outputs = 5:6 # 产出指标列范围 )

注意:如果数据存储在Excel中,可以使用read_excel()函数替代read.csv()。确保所有数值都是正数,DEA不接受零或负值。

2. 基础模型构建与运行

理解了数据格式后,我们进入核心环节——模型构建。DEA有两大经典模型:CCR(规模报酬不变)和BCC(规模报酬可变),它们适用于不同场景。

2.1 CCR模型实现

CCR模型是DEA最基础的形式,假设决策单元在最优规模下运作。运行CCR模型的代码如下:

ccr_result <- model_basic( dea_data, dmu_eval = 1:nrow(raw_data), # 评估所有DMU dmu_ref = 1:nrow(raw_data), # 参考集为全部DMU orientation = "io", # 投入导向 rts = "crs" # 规模报酬不变 )

关键参数解析:

  • orientation:分析导向
    • "io"(投入导向):在产出不变情况下,最小化投入
    • "oo"(产出导向):在投入不变情况下,最大化产出
  • rts:规模报酬假设
    • "crs":规模报酬不变(CCR)
    • "vrs":规模报酬可变(BCC)

2.2 BCC模型实现

当决策单元可能不在最优规模运行时,BCC模型更为合适:

bcc_result <- model_basic( dea_data, dmu_eval = 1:nrow(raw_data), dmu_ref = 1:nrow(raw_data), orientation = "io", rts = "vrs" # 规模报酬可变 )

模型运行后,使用summary()函数生成详细报告:

summary(ccr_result, exportExcel = TRUE) summary(bcc_result, exportExcel = TRUE)

这将生成包含多个工作表的Excel文件,存储在工作目录中。如果遇到"无法打开zip文件"错误,尝试安装writexl包:

install.packages("writexl")

3. 结果解读与可视化

模型跑出结果只是第一步,真正考验功力的是如何解读那些数字背后的含义。我们以CCR模型输出为例,拆解关键结果表。

3.1 效率值分析

生成的Excel文件中,"efficiencies"工作表包含各DMU的效率得分:

DMUeff_score
A1.000
B0.857
C0.923
  • 效率值为1表示DEA有效(前沿面)
  • 小于1表示存在改进空间
  • 效率值排名可以直观比较DMU相对表现

绘制效率值分布直方图:

eff_scores <- efficiencies(ccr_result)$eff hist(eff_scores, main = "效率值分布", xlab = "效率得分", col = "lightblue")

3.2 松弛变量解读

"slacks"工作表展示了投入过剩或产出不足的情况:

DMUinput_slack1output_slack1
B15.20
C08.7
  • 投入松弛:可以减少的投入量
  • 产出松弛:可以增加的产出量
  • 全为零表示DEA有效

3.3 目标值与参考集

"targets"和"references"工作表揭示了改进方向:

  • 目标值:非有效DMU达到有效应该达到的投入产出水平
  • 参考集:每个DMU的benchmark组合

提取银行B的参考DMU:

references <- references(ccr_result) print(references[["B"]])

4. 高级技巧与疑难排解

掌握了基础分析流程后,我们来看几个提升分析深度和解决常见问题的技巧。

4.1 模型选择策略

何时用CCR,何时用BCC?这里有个简单判断流程:

  1. 先运行CCR模型
  2. 检查效率值的分布
    • 如果大部分DMU效率值接近1 → 可能规模报酬不变 → 用CCR
    • 如果效率值分散 → 运行BCC模型
  3. 比较两种模型结果:
# 计算规模效率 scale_eff <- eff_scores_ccr / eff_scores_bcc

4.2 数据敏感性检验

DEA结果对指标选择非常敏感。建议:

  • 使用相关系数矩阵检查指标间关系
  • 尝试不同的指标组合
  • 使用交叉验证方法

生成投入产出相关系数矩阵:

cor_matrix <- cor(raw_data[, -1]) print(cor_matrix)

4.3 常见错误处理

错误1:"Error in read_data: inputs and outputs must be positive"

  • 检查数据中是否有零或负值
  • 对数据进行标准化处理(如x/max(x))

错误2:"System is computationally singular"

  • 检查是否有完全线性相关的指标
  • 减少指标数量或使用主成分分析

错误3:效率值全部为1

  • 可能指标选择不当
  • 尝试增加DMU数量或减少指标数量

4.4 结果可视化进阶

除了基础直方图,还可以绘制效率前沿面:

plot(ccr_result, type = "efficient")

制作雷达图比较DMU表现:

library(fmsb) radarchart(rbind(rep(1,3), rep(0,3), raw_data[1:3, -1]))

5. 实际案例:银行分支机构效率评估

让我们通过一个真实案例巩固所学知识。假设要评估某银行20家分支机构的运营效率,数据包含:

  • 投入:员工数、营业面积、运营成本
  • 产出:存款额、贷款额、中间业务收入

分析步骤

  1. 数据清洗与验证
bank_data <- read.csv("branch_data.csv") summary(bank_data) # 检查异常值
  1. 构建DEA数据集
dea_bank <- read_data( bank_data, dmus = 1, inputs = 2:4, outputs = 5:7 )
  1. 运行CCR和BCC模型
ccr_bank <- model_basic(dea_bank, rts = "crs") bcc_bank <- model_basic(dea_bank, rts = "vrs")
  1. 结果整合分析
# 提取各类效率值 tech_eff <- efficiencies(ccr_bank)$eff pure_tech_eff <- efficiencies(bcc_bank)$eff scale_eff <- tech_eff / pure_tech_eff # 创建结果数据框 result_df <- data.frame( Branch = bank_data$branch, Technical = tech_eff, PureTechnical = pure_tech_eff, Scale = scale_eff )
  1. 制定改进建议
  • 识别低效分支(效率值<0.9)
  • 分析其松弛变量找出改进方向
  • 参考高效分支的最佳实践
# 找出低效分支 inefficient <- result_df[result_df$Technical < 0.9, ] # 获取这些分支的松弛变量 slacks <- slacks(ccr_bank)$input slacks[as.numeric(rownames(inefficient)), ]

通过这个完整流程,我们不仅能计算出各分支的效率得分,还能明确具体改进方向和幅度,为管理决策提供有力支持。

http://www.jsqmd.com/news/666889/

相关文章:

  • 提交的追溯与考古:log、show、blame命令高效查看历史
  • 国际化技术中的多语言本地化与文化适配
  • 别再只盯着Transformer了:用MoE+Sparse-MLP在ImageNet上跑赢MLP-Mixer的实战配置
  • vue-json-editor不止是编辑器:打造一个简易的本地JSON配置管理工具
  • ESP32物联网开发终极指南:从零开始构建智能环境监测系统
  • Path of Building PoE2:流放之路2角色构建规划的终极解决方案
  • 综述:甲基锂盐和超酸锂盐
  • 告别信号盲猜:用Python+Matlab实战OFDM自适应功率分配(附代码)
  • Windows下用清华源一键搞定ONNX全家桶(附CUDA版本匹配避坑指南)
  • 如何快速免费解锁iPhone激活锁:applera1n完整使用指南
  • 从OpenOffice到LibreOffice:kkFileView预览核心转换引擎的选型、配置与性能调优实战
  • dnSpy BAML反编译技术:快速解析WPF二进制界面资源的实战指南
  • FanControl终极指南:5分钟掌握Windows风扇控制软件,打造静音高效电脑系统
  • 避坑指南:在WSL的Anaconda环境里装Open3D,我踩过的那些‘依赖包’的坑
  • BiliPlus:如何让你的B站体验变得更好的终极指南
  • 一文学会Excel条件格式:让数据自己“开口说话“
  • MATLAB实战:手把手教你搭建机载SAR正侧视回波仿真环境(附完整代码)
  • SAP Fiori List Report开发避坑指南:从默认过滤器到Object Page跳转的完整配置流程
  • R语言实战:用Chow检验判断两个回归模型的系数差异(附完整代码)
  • 从物流仓库到城市交通:手把手教你用AnyLogic行人库+道路交通库搭建一个综合枢纽仿真
  • AI原生研发为何90%团队卡在L2?AISMM成熟度评估实战手册(含自测评分表V2.3)
  • 为TPPi正名
  • 终极视频修复指南:用Untrunc拯救你的损坏MP4/MOV文件
  • 解码CAN总线错误帧:从标志到界定符的故障诊断实战
  • 如何解决CRM系统碎片化问题:EspoCRM开源客户关系管理系统部署指南
  • 抖音无水印下载器完整指南:如何高效批量下载抖音视频
  • 从Hello World到消息收发:用Qt Creator在Ubuntu上快速搭建ZeroMQ C++开发环境(含zmqpp静态库链接)
  • 从防御者视角复盘:如何用Burp Suite和代码审计,在Pikachu靶场中挖掘并修复DOM-XSS漏洞
  • Undecimus诊断系统深度解析:从内核漏洞到用户配置的全面监控
  • 如何彻底禁用Windows Defender:终极系统权限管理指南