Как рассчитать и построить «модель дисконтирования бета-дельта»? - PullRequest
0 голосов
/ 31 марта 2019

Мой код для получения правильного графика в R, похоже, не работает (я новичок в R и у меня проблемы с кодированием).

По сути, используя концепцию временного дисконтирования в форме бета-дельта-модели, мы должны рассчитывать субъективное значение для 10 долларов США при каждой задержке от 0 до 365.

Контекст домашней работы заключается в том, что мы должны учитывать важное исключение: если вознаграждение является НЕМЕДЛЕННЫМ, скидка не предоставляется, но если она происходит с любой задержкой, существует как экспоненциальная скидка, так и штраф за задержку.

Я создал переменную с именем BetaDeltaValuesOf10 , которая имеет длину 366 элементов и представляет субъективное значение в 10 долларов США при каждой задержке от 0 до 365.

Код должен иметь следующие свойства, используя for-loop и оператор if-else :

1) Если задержка равна 0, субъективное значение является объективной величиной (и должно быть сохранено в соответствующем элементе BetaDeltaValuesOf10 .

2) Иначе, вычислите субъективное значение по экспоненциально дисконтированной ставке, приняв ? = .98 и примените штраф за задержку 0,8, затем сохраните его в соответствующем элементе BetaDeltaValuesOf10 .

Стандартный код, предоставленный нам для создания кода, выглядит следующим образом:

BetaDeltaValuesOf10 = 0

Delays = 0:365

Код (уравнение) для получения субъективного значения / предпочтения с использованием модели экспоненциального дисконтирования:

ExponentialDecayValuesOf10 = .98^Delays*10

0,98 - это ставка дисконта в диапазоне от 0 до 1.

Задержки - это количество периодов времени в будущем, когда будет получено более позднее вознаграждение

10 - субъективное значение $ 10

Код (Уравнение) для получения субъективного значения с использованием бета-дельта-модели:

0.8*0.98^Delays*10

0,8 - штраф за задержку

Код, который я придумал, пытаясь удовлетворить вышеупомянутые свойства, выглядит следующим образом:

for(t in 1:length(Delays)){BetaDeltaValuesOf10 = 0.98^0*10

if(BetaDeltaValuesOf10 == 0){0.98^t*10}

else {0.8*0.98^t*10}
}

Итак, я попробовал код и не получил никакой ошибки. Но, когда я пытаюсь построить результат кода, мой график становится пустым.

Для построения я использовал код:

plot(BetaDeltaValuesOf10,type = 'l', ylab = 'DiscountedValue')

Я считаю, что мой код на самом деле неисправен, и поэтому я не получаю правильный результат для своего сюжета. Пожалуйста, дайте мне знать об изменениях в кодексе, и если сообществу понадобятся какие-либо разъяснения, я постараюсь уточнить, как только смогу.

1 Ответ

0 голосов
/ 31 марта 2019
result <- double(length=366)
delays <- 0:365

val     <- 10
delta   <- 0.98
penalty <- 0.8

for(t in seq_along(delays)) {
    result[t] <- val * delta^delays[t] * penalty^(delays[t]>0)
}

plot(x=delays, y=result, pch=20)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...