Я пытаюсь сделать что-то похожее, что я просил здесь и, к сожалению, я не могу решить это.
Это мои данные (данные), временной ряд цен:
Date Price Vol
1998-01-01 200 0.3
1998-01-02 400 0.4
1998-01-03 600 -0.2
1998-01-04 100 0.1
...
1998-01-20 100 0.1
1998-01-21 200 -0.4
1998-01-21 500 0.06
....
1998-02-01 100 0.2
1998-02-02 200 0.4
1998-02-03 500 0.3
1998-02-04 100 0.1
etc.
Я бы хотел сказать R,
- возьмите 1-е значение "Vol" и разделите его на 20-е значение "Price", затем
- возьмите 2-е значение "Vol" и затем разделите его на 21-е значение "Price".
- возьмите 3-е значение "Vol" и разделите его на 22-е значение "Price", затем
- и т.д.
В моем другом посте я смог использовать эту функцию для расчета доходности за период владения 20 дней:
> data.xts <- xts(data[, -1], data[, 1])
> hold <- 20
> f <- function(x) log(tail(x, 1)) - log(head(x, 1))
> data.xts$returns.xts <- rollapply(data.xts$Price, FUN=f,
width=hold+1, align="left", na.pad=T)
Есть ли способ сделать что-то очень похожее для указанной выше проблемы? Так что-то вроде
f1 <- function(x,y) head(x, 1) / tail(y,1)
где x - это "Vol", а y - "цена", а затем применить "rollapply"?
Большое спасибо
ОБНОВЛЕНИЕ: @ Dr G:
Спасибо за ваши предложения. С небольшим изменением он сделал то, что хотел!
data.xts <- xts(data[, -1], data[, 1])
hold <- 20
data.xts$quo <- lag(data.xts[,2], hold) / data.xts[,1]
Теперь моя проблема в том, что результирующий фрейм данных выглядит следующим образом:
Date Price Vol quo
1 1998-01-01 200 0.3 NA
2 1998-01-02 400 0.4 NA
3 1998-01-03 600 -0.2 NA
4 1998-01-04 100 0.1 NA
...
21 1998-01-20 180 0.2 0.003
Я знаю, что в качестве результата должны быть НС, но только для последних 20 наблюдений, а не для первых 20 наблюдений. Формула, указанная выше, вычисляет правильные значения, однако помещает их начиная с 21-й строки вместо первой. Вы знаете, как я мог это изменить?