我正在研究对预测进行排名的方法,并找到了这篇论文,A new ranking procedure for predicting methods using Data Envelopment Analysis,我一直在研究这篇文章并设置我的数据,但我似乎无法复制他们的 LP 公式?
这是我所指的配方:LP Formulation
这是一个示例,我正在尝试使用上述公式作为参考来复制他们的结果。数据基于上述文章中的“表 2。说明性示例数据的日志值”。
library(lpSolve)
library(nonparaeff)
DMU = c("FOR01", "FOR02", "FOR03", "FOR04", "FOR05")
log.data = matrix(data = as.numeric(c("1.794","1.575","3.576"
,"2.228","2.106","6.628"
,"2.399","1.871","6.354"
,"2.619","1.983","5.849"
,"2.559","1.541","5.676")), ncol = 3, byrow = TRUE)
colnames(log.data) = c("M1", "M2", "M3")
rownames(log.data) = DMU
THETA = c(-1,-1,-1,0)
add.to.one = c(1,1,1,1,1) # Constraint so each lambda adds up to one.
f.obj = c(1)
f.con = cbind(THETA, rbind(t(log.data), add.to.one))
f.dir = c("<=","<=","<=","=")
f.rhs = c(1.794,1.575,3.576,1)
lp2(direction = "min", f.obj, f.con, f.dir, f.rhs, free.var = c(1))
我正在使用包 lpsolve 和 nonparaeff;nonparaeff 扩展了lp()
函数,因此它可以处理自由变量。
使用此代码我最终得到了错误:
“错误:找不到可行的解决方案”。
但是,在文章中,他们最终以 theta 为 0 或 1,第一个 lambda 返回为 1。所以我一定做错了什么。
我是否正确应用了第四个约束('add.to.one')?此外,lp()
已经假设每个变量 >= 为零,但它是否假设其他任何变量?
我是否正确地将公式转换为 R?我lp2
是否正确使用该功能?
我在这里查看了其他类似的 lp 问题,但我没有看到很多关于自由变量的问题。但是,如果您不这么认为,请将我链接到其他问题。
提前致谢。