如何计算和绘制“β-delta折扣模型”?

时间:2019-03-31 18:14:51

标签: r for-loop if-statement

我在R中获得适当绘图的代码似乎不起作用(我是R的新手,并且在编码方面遇到困难)。

基本上,使用beta-delta模型形式的时间折扣的概念,我们应该计算从0到365的每个延迟的10美元的主观价值。

家庭作业的背景是,我们必须考虑一个重要的例外情况,即如果奖励是立即奖励,则不会有折扣,但是,如果发生任何延误,则会同时存在指数折扣和延误罚款。

我创建了一个名为 BetaDeltaValuesOf10 的变量,该变量长366个元素,代表从0到365的每个延迟的$ 10主观值。

使用 for循环 if-else语句,代码需要具有以下属性:

1)如果延迟为0,则主观值为客观幅度(应保存为 BetaDeltaValuesOf10 的适当元素。

2)否则,以指数折扣率计算主观值,假定= .98,并应用.8的延迟惩罚,然后将其保存到 BetaDeltaValuesOf10 的适当元素中。

为帮助我们创建代码而提供的标准代码如下:

BetaDeltaValuesOf10 = 0

Delays = 0:365

使用指数折扣模型获取主观价值/偏好的代码(方程):

ExponentialDecayValuesOf10 = .98^Delays*10

0.98 是折扣率,介于0和1之间。

延迟是将来提供较晚奖励的时间段

10 是$ 10的主观价值

使用beta-delta模型获得主观价值的代码(公式):

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 :(得分:0)

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)