R语言Benchmarking包运行dea模型报一元运算符参数无效错误如何解决
DEA模型报错解决方案
针对Error in -XREF[, h] : invalid argument to unary operator报错,可按以下顺序排查解决:
- 排查1:校验输入输出矩阵的数值类型与缺失值
该报错最常见诱因是输入输出矩阵中存在非数值类型数据或缺失值,运行以下代码校验:
如存在缺失值,可直接剔除含缺失值的样本:# 检查各列数据类型 sapply(x, class) sapply(y, class) # 检查缺失值数量 sum(is.na(x)) sum(is.na(y))valid_idx <- complete.cases(x, y) x <- x[valid_idx, ] y <- as.matrix(y[valid_idx, ]) - 排查2:确认决策单元数量与变量数量的匹配关系
DEA模型要求决策单元(即数据行)数量至少大于输入+输出变量的总数量,最优为变量总数的3倍以上,避免线性规划求解时矩阵奇异。运行以下代码校验数量:
如变量过多,可结合研究场景筛选核心输入输出指标,削减冗余变量。# 决策单元数量 nrow(x) # 输入+输出变量总数量 ncol(x) + ncol(y) - 排查3:校验输入输出矩阵的有效性
确保矩阵中无全列取值相同的无差异变量、无负数值/零值:- 如存在无差异变量直接删除对应列即可
- 如存在零值/负值,可给全矩阵添加极小常数做偏移:
x <- x + 1e-5 y <- y + 1e-5
- 调整后完整运行代码参考
# 加载依赖包与数据 library(Benchmarking) IES<-read.csv("_INPUTS & OUTPUTS.csv", sep=";", stringsAsFactors = FALSE) # 构造输入输出矩阵 x <- as.matrix(with(IES, cbind(STUDENTS, FACULTY, AGE, PHD, MA, PRES, FTE, FTNE, PART, HOUR, TEC, TEC_SUP, TEC_SPEC, TEC_MA, TEC_PHD, PORTAL_CAPES, VIRT_JOURNAL, VIRT_BOOK, VL_DESPESA_PESSOAL_DOCENTE, VL_DESPESA_PESSOAL_TECNICO, VL_DESPESA_PESSOAL_ENCARGO, VL_DESPESA_CUSTEIO, VL_DESPESA_INVESTIMENTO, VL_DESPESA_PESQUISA, VL_DESPESA_OUTRA))) y <- as.matrix(IES$ST_COMPLETING) # 数据清洗 valid_idx <- complete.cases(x, y) x <- x[valid_idx, ] y <- as.matrix(y[valid_idx, ]) x <- x + 1e-5 y <- y + 1e-5 # 运行DEA模型 dea(x,y, RTS="vrs", ORIENTATION="out")
内容的提问来源于stack exchange,提问作者João Augusto Freire
相关产品推荐
相关产品推荐

