Как мне нарезать массив из вывода из RollCor в R? - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь получить скользящий вывод корреляции между двумя переменными DGS10 и SP500, но я получаю вывод матрицы корреляции для каждой строки.Есть ли способ нарезать его, чтобы получить только реальное значение [0] [1].Я новичок в R из Python ...

Пакеты и переменные

library(quantmod)
getSymbols('DGS10',src='FRED')
getSymbols('SP500',src='FRED')

Код

```{r}
merge(DGS10, SP500) %>%
  na.omit() %>%
  roll_cor(width=5)
```

Вывод

          DGS10     SP500
DGS10 1.0000000 0.8542177
SP500 0.8542177 1.0000000

, , 6

          DGS10     SP500
DGS10 1.0000000 0.9104856
SP500 0.9104856 1.0000000

, , 7

          DGS10     SP500
DGS10 1.0000000 0.9672053
SP500 0.9672053 1.0000000

ЖелаемыйВыход

5       0.8542177
6       0.9104856
7       0.9672053

1 Ответ

0 голосов
/ 05 февраля 2019

Если честно, я впервые вижу такой массив - [1:2, 1:2, 1:2496].Я вижу, что невозможно получить значения из этого с многомерными индексами как [1, 2, 1:2496].Он имеет длину 9984 (2496 * 4), поэтому вы можете получить нужные значения с помощью:

merge(DGS10, SP500) %>%
  na.omit() %>%
  roll_cor(width=5) %>%
  `[`(seq(2, length(.), 4)) %>%
  as.data.frame()

. Это может показаться вам немного неопределенным, поскольку вы новичок в R, что эквивалентно:

temp <-
  merge(DGS10, SP500) %>%
  na.omit() %>%
  roll_cor(width=5)

temp[seq(2, length(temp), 4)] %>%
  as.data.frame()

Но я посоветую вам использовать библиотеку tidyquant.Тогда вы можете получить свои результаты более понятным способом:

library(tidyquant)

tq_get(c('DGS10', 'SP500'), get = 'economic.data') %>%
  spread(symbol, price) %>%
  na.omit() %>%
  tq_mutate_xy(
    x = DGS10,
    y = SP500,
    mutate_fun = runCor,
    n = 5
  )
...