我正在对多标准决策模型进行敏感性分析。该模型使用包 MCDM 在 R 中运行。该模型的一个关键组成部分是,它依赖于用户给定的一组权重,这些权重的总和必须为 1。我正在使用的权重偏好最初总和不为 1,但我将其归一化为总和为 1。
weights <- data.frame("w1"=0.03125, "w2"=0.53125, "w3"=0.84375, "w4"=0.21875, "w5"=0.46875, "w6"=0.28125, "w7"=0.96875)
normal_weights <- weights/rowSums(weights)
当我检查并确认新的权重总和为 1 时,R 确认它们是...
rowSums(normal_weights)
...返回“1”。
但是,当我运行模型时,我收到了特定于包的错误,即权重总和不等于 1。
根据我自己尝试解决这个问题,我猜这与:
这可能是发生的事情吗?如果是这样,我该如何解决?有没有办法保持精度?有更好的标准化方法不会导致此问题吗?
编辑:我理解R Q&A “为什么这些数字不相等?”回答为什么R这样做;但是,该帖子没有回答我的问题:考虑到我无法更改正在使用的软件包,有哪些解决方法可以解决此问题?
identical(rowSums(normal_weights),1)
[1] FALSE
事实上你可以看到
rowSums(normal_weights) -1
[1] -1.110223e-16
所以我会做两件事:
1) 建立合理的权重总和为 1 准确性,例如 1e-8(这实际上取决于您的问题)
2)要解决该错误,只需将 normal_weights 的最后一个元素定义为 1 - 其他元素的总和:
normal_weights[length(normal_weights)] <- 1-
sum(normal_weights[1:(length(normal_weights)-1)])
identical(rowSums(normal_weights),1)
[1] TRUE
我猜你在某个地方用作 x == y 语句的 MCMC 函数,如果他们进行容差测试可能会更好,但那是另一个故事了。