Функция оптимизации дает неверные результаты для 2 одинаковых наборов данных - PullRequest
0 голосов
/ 11 мая 2019

У меня есть 2 набора данных, не сильно отличающихся друг от друга. Каждый набор данных имеет 27 строк фактических и прогнозных значений. При проверке в Solver в Excel на предмет минимизации абсолютной ошибки (abs (фактическая - номинальная * прогноз)) они оба дают почти равные значения для параметра 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 не выполняет один и тот же процесс над двумя наборами данных и выдает правильные результаты в обоих случаях.

Соответствующие результаты с использованием 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

С наилучшими пожеланиями

Дипак

1 Ответ

1 голос
/ 11 мая 2019

Это потому, что второй столбец test1 называется Usage, а не usage. Следовательно, act = x$usage равно NULL, а функция fn возвращает sum(abs(NULL - something)) = sum(NULL) = 0. Вы должны переименовать этот столбец в usage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...