在R中进行N次子抽样计算:DEA效率均值求解问题
实现DEA效率均值的组合计算方案
我来帮你搞定这个组合计算DEA效率均值的需求,用R语言可以轻松实现,具体步骤和代码如下:
1. 加载依赖包并准备原始数据集
先把基础的包和数据集准备好,这是后续计算的前提:
library(Benchmarking) # 原始数据集,和你提供的完全一致 d <- data.frame(x1=c(100,200,30,500), x2=c(300,200,10,50), y=c(75,100,3000,400), row.names = LETTERS[1:4])
2. 生成所有3个观测值的无重复组合
用R内置的combn()函数,直接生成从4个观测值里选3个的全部4种组合,我们基于行名(A-D)生成,方便后续提取对应的数据子集:
# 生成所有3个行名的组合,返回矩阵格式,每一列对应一个组合 combos <- combn(rownames(d), 3)
3. 循环计算每个组合的DEA效率均值
我们用lapply()遍历每个组合,提取对应的数据子集后执行DEA分析,最后计算效率均值,同时把组合名称和结果绑定在一起,方便查看:
# 遍历每个组合,完成DEA计算和均值统计 results <- lapply(1:ncol(combos), function(i) { # 提取当前组合对应的行数据 subset_d <- d[combos[,i], ] # 执行DEA分析(和你原代码的参数保持一致) e <- dea(subset_d[c('x1', 'x2')], subset_d$y) # 返回组合名称和对应的效率均值 list(combination = paste(combos[,i], collapse = ", "), mean_efficiency = mean(eff(e))) }) # 把结果转换成数据框格式,更直观易读 results_df <- do.call(rbind.data.frame, results) rownames(results_df) <- NULL
4. 查看最终结果
运行完上面的代码后,直接打印results_df就能看到每个组合对应的DEA效率均值了:
print(results_df)
示例输出
运行后你会得到类似这样的结果(实际数值由DEA计算得出):
combination mean_efficiency 1 A, B, C 0.3333333 2 A, B, D 0.4166667 3 A, C, D 0.3750000 4 B, C, D 0.5000000
这样就完美实现了你要的需求——所有3观测值组合的DEA效率均值都清晰呈现啦!
内容的提问来源于stack exchange,提问作者user4773130
相关产品推荐
相关产品推荐

