首页 > 解决方案 > 优化函数对 2 个相似的数据集给出了不正确的结果

问题描述

我有 2 个数据集彼此差别不大。每个数据集有 27 行实际值和预测值。在 Excel 中针对 Solver 进行测试以最小化绝对误差(abs(actual - par * predict))时,它们都为参数“par”提供几乎相等的值。但是,当这些数据集中的每一个都传递给相同的优化函数时我写的, 它只适用于其中一个. 对于另一个数据集, 目标总是被评估为零 (0), 'par' 分配了上限值.

这绝对是不正确的。我无法理解的是为什么 R 会这样做?

这是2个数据集:-

test
dateperiod,usage,fittedlevelusage
2019-04-13,16187.24,17257.02
2019-04-14,16410.18,17347.49
2019-04-15,18453.52,17246.88
2019-04-16,18113.1,17929.24
2019-04-17,17712.54,17476.67
2019-04-18,15098.13,17266.89
2019-04-19,13026.76,15298.11
2019-04-20,13689.49,13728.9
2019-04-21,11907.81,14122.88
2019-04-22,13078.29,13291.25
2019-04-23,15823.23,14465.34
2019-04-24,14602.43,15690.12
2019-04-25,12628.7,13806.44
2019-04-26,15064.37,12247.59
2019-04-27,17163.32,16335.43
2019-04-28,17277.18,16967.72
2019-04-29,20093.13,17418.99
2019-04-30,18820.68,18978.9
2019-05-01,18799.63,17610.66
2019-05-02,17783.24,17000.12
2019-05-03,17965.56,17818.84
2019-05-04,16891.25,18002.03
2019-05-05,18665.49,18298.02
2019-05-06,21043.86,19157.41
2019-05-07,22188.93,21092.36
2019-05-08,22358.08,21232.56
2019-05-09,22797.46,22229.69

Optimization result from R
$minimum
[1] 1.018188

$objective
[1] 28031.49



test1
dateperiod,Usage,fittedlevelusage
2019-04-13,16187.24,17248.29
2019-04-14,16410.18,17337.86
2019-04-15,18453.52,17196.25
2019-04-16,18113.10,17896.74
2019-04-17,17712.54,17464.45
2019-04-18,15098.13,17285.82
2019-04-19,13026.76,15277.10
2019-04-20,13689.49,13733.90
2019-04-21,11907.81,14152.27
2019-04-22,13078.29,13337.53
2019-04-23,15823.23,14512.41
2019-04-24,14602.43,15688.68
2019-04-25,12628.70,13808.58
2019-04-26,15064.37,12244.91
2019-04-27,17163.32,16304.28
2019-04-28,17277.18,16956.91
2019-04-29,20093.13,17441.80
2019-04-30,18820.68,18928.29
2019-05-01,18794.10,17573.40
2019-05-02,17779.00,16969.20
2019-05-03,17960.16,17764.47
2019-05-04,16884.77,17952.23
2019-05-05,18658.16,18313.66
2019-05-06,21036.49,19149.12
2019-05-07,22182.11,21103.37
2019-05-08,22335.57,21196.23
2019-05-09,22797.46,22180.51

Optimization result from R
$minimum
[1] 1.499934

$objective
[1] 0

使用的优化函数如下所示:-

optfn <- function(x)
{act <- x$usage
fcst <- x$fittedlevelusage
fn <- function(par)
{sum(abs(act - (fcst * par)))
}
adjfac <- optimize(fn, c(0.5, 1.5))
return(adjfac)
}




adjfacresults <- optfn(test)
adjfacresults <- optfn(test1)

Optimization result from R
adjfacresults <- optfn(test)

$minimum
[1] 1.018188
$objective
[1] 28031.49



Optimization result from R
adjfacresults <- optfn(test1)

$minimum [1]
1.499934
$objective
[1] 0

任何人都可以帮助确定为什么 R 没有对 2 个数据集执行相同的过程并在两种情况下都输出正确的结果。

使用 Excel Solver 对 2 个数据集的相应结果如下:-

For 'test' data set
par value = 1.018236659
objective function valule (min) : 28031 

For 'test1' data set
par value = 1.01881062927878
objective function valule (min) : 28010

此致

迪帕克

标签: r

解决方案


那是因为 的第二列test1是命名的Usage,而不是usage。因此,act = x$usageis NULL,并且函数fn返回sum(abs(NULL - something)) = sum(NULL) = 0。您必须将此列重命名为usage.


推荐阅读