Образец ковариационной матрицы в R - PullRequest
0 голосов
/ 30 октября 2018

Я должен использовать загруженные ежедневные цены с 1 марта 2015 года по 1 марта 2017 года для EBAY, GOOG, TEVA, чтобы вычислить выборочную ковариационную матрицу для арифметических возвратов.

Вот что у меня есть:

library(zoo)
library(tseries)
library(fBasics)

for(ticker in c("ebay", "goog", "teva", "ge")){
Prices = get.hist.quote(instrument = ticker, start = "2015-03-01",
                        end = "2017-03-01", quote = "Close", 
                        provider = "yahoo",origin = "1970-01-01", 
                        compression = "d", retclass = "zoo")}


return = diff(Prices)/lag(Prices, k=-1)

covariance = cov(return)

Однако, когда я печатаю ковариацию, я получаю матрицу 1 на 1 ... Я знаю, что мой цикл перезаписывает тикеры в ценах, поэтому он использует только цены из последнего тикера для остальной части кода. Я пытался использовать функцию списка, чтобы исправить это, но это не изменило мой конечный результат для ковариации. Я полагаю, что в итоге получу матрицу 4х4, но я не совсем понимаю, как это получить.

1 Ответ

0 голосов
/ 30 октября 2018

Предлагаю прочитать больше о list с и как они работают, прежде чем пытаться использовать list с. Кроме того, я рекомендую вам не использовать = для присваивания переменных, подробнее об этом в этом потоке SO В чем различия между "=" и "<-" в R? </a>.

Альтернативой спискам может быть сохранение отдельных data.frame для каждого ticker, а затем cbind data.frame s.

Но на основании вашего кода версия списка:

library(zoo)
library(tseries)
Prices <- c()
k <- 1
for(ticker in c("ebay", "goog", "teva", "ge")){

  Prices[[k]] <- get.hist.quote(instrument = ticker, start = "2015-03-01",
                          end = "2017-03-01", quote = "Close", 
                          provider = "yahoo",origin = "1970-01-01", 
                          compression = "d", retclass = "zoo")
  k <- k+1
  }


return_list <- lapply(Prices, function(x) diff(x)/lag(x, k=c(-1)))
return_matrix <- do.call("cbind", return_list)
colnames(return_matrix) <- c("ebay", "goog", "teva", "ge")

covariance <- cov(return_matrix)

             ebay         goog         teva           ge
ebay 3.180376e-04 8.985594e-05 5.332997e-05 7.296451e-05
goog 8.985594e-05 2.385761e-04 6.331062e-05 7.274448e-05
teva 5.332997e-05 6.331062e-05 3.919655e-04 4.754861e-05
ge   7.296451e-05 7.274448e-05 4.754861e-05 1.538201e-04
...