У меня есть проект для работы, который мне поручили, и я абсолютно не могу понять. Справочная информация:
В настоящее время у нас есть сценарий, который сообщает компании, сколько им будет стоить поднять разницу в заработной плате до определенного процентиля. Это называется pcost (p), где вы вводите число от 0 до 1, и возвращается значение бюджета (в тысячах), например (составленные числа):
> x = pcost(.2)
печать (х)
1 451,002
В этом случае, если мы повысим самую низкую заработную плату до 20-го процентиля, это будет стоить компании около 450 тыс. Долл. *
То, что мне было поручено сделать, - это создать что-то, что инвертирует это так, что мы будем вводить желаемый бюджет, который компания должна потратить, и результат будет в процентах, к которым мы могли бы поднять самую низкую заработную плату. Я был проинструктирован, что это должно быть сделано с помощью оптимизатора для следующей функции:
pobj = function(p, budget){
return((budget - pcost(p)^2))
}
Куда мы вставим бюджет, а оптимизатор найдет значение p.
Я создал следующую команду, используя пакет оптимизации, с мыслью, что в приведенном ниже примере .2 (или рядом с ним) будет результат
xmin = optimize(pobj, interval = c(0,1), budget = 451.002, tol = .00001)
Однако я всегда получаю следующую ошибку:
Error in optimize(pobj, interval = c(0, 1), budget = 500, tol = 1e-05) :
invalid function value in 'optimize'
Я прочитал файл справки, выполнил поиск здесь и на других сайтах и, похоже, не могу получить четкое объяснение того, что является причиной этой ошибки. Понятно, что я делаю что-то не так, но у меня нет большого опыта работы с оптимизаторами или нелинейной регрессией в целом, поэтому самостоятельно устранить неполадки крайне сложно.
Любое руководство или опыт будут чрезвычайно признательны.
РЕДАКТИРОВАТЬ: по запросу PeterK, результаты pobj в 0 и 1
> pobj(0, 455.002)
[1] 207026.8
> pobj(.2, 455.002)
[1] 0
> pobj(1, 455.002)
[1] 18171830
РЕДАКТИРОВАТЬ 2: Как прокомментировал @AkselA, я также попытался запустить его после того, как pobj был изменен на следующее:
pobj = function(p, budget){
(budget - pcost(p))^2
}
По-прежнему выдает следующую ошибку:
> xmin <- optimize(pobj, c(0, 1), tol=0.01, budget=450)
Error in optimize(pobj, c(0, 1), tol = 0.01, budget = 450) :
invalid function value in 'optimize'
РЕДАКТИРОВАТЬ 3: в @AkselA, последовательный сюжет pobj. Несмотря на то, что между индексами 0–10 наблюдается небольшое падение, я проверил точные числа, и результат увеличивается с каждым процентилем.
ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Хотя ни один из ответов напрямую не решил мою проблему, AkselA предоставил наилучшее направление. Проблема в запуске оптимизатора заключалась не в самом оптимизаторе, а в pcost (p). Значительно сократив код в этой функции, оптимизатор смог работать правильно, и проблема была решена. Спасибо за помощь!