Применить переменную скорость изменения, используя предыдущее значение в R - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь сделать что-то, что, как мне кажется, легко в Excel, но в R. Концепция - это сложный процент с переменной процентной ставкой, которая может увеличиваться или уменьшаться и использует значение прошлого года.Я хочу, чтобы значение x определялось предыдущим значением x, добавленным к предыдущему значению x, кратному скорости в другом векторе.Это должно происходить рекурсивно по всему вектору.

Математика: x [i + 1] = x [i] + x [i] * rate [i]

Я пытался исследовать этос stats::filter и использованием lag в dplyr, но либо они не могут обрабатывать переменную скорость, либо выходной вектор, кажется, слегка отклоняется от значения, которое должно быть.

Вот некоторые смоделированные данные:

set.seed(2)
x <- 100 ## initial data
rate <- rnorm(5,1)/100 ## generate random rate of change

Так что скорость равна:

rate = c(0.001030855, 0.011848492, 0.025878453, -0.001303757, 0.009197482)

Требуемый вывод:

x.with.rate <- c(100.1031, 101.2892, 103.9104, 103.7749, 104.7294)

Предпочтительно без петли, пожалуйста

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Ваша логика может быть уменьшена до (X_0)*((1+R_0)*(1+R_1)...(1+R_n))

т.е.

set.seed(2)
x <- 100 ## initial data
rate <- rnorm(5,1)/100 ## generate random rate of change
(x)*cumprod((1+rate))

[1] 100.1031 101.2892 103.9104 103.7749 104.7294
0 голосов
/ 16 ноября 2018

Использование Reduce

Reduce(function(x, r) x * (1 + r), init = 100, rate, acc = TRUE)[-1]
## [1] 100.1031 101.2892 103.9104 103.7749 104.7294
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...