R中的样本协方差矩阵

时间:2018-10-30 08:23:09

标签: r covariance

我应该使用EBAY,GOOG,TEVA的2015年3月1日至2017年3月1日下载的每日价格来计算算术收益的样本协方差矩阵。

这就是我所拥有的:

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的矩阵...我知道我的循环正在覆盖价格中的代码,因此其余代码只使用最后一个代码的价格。我试图使用列表函数来更正此问题,但这并没有改变我的协方差最终结果。我相信我应该以4x4矩阵结尾,但是我不太了解如何得到它。

1 个答案:

答案 0 :(得分:0)

我建议在尝试使用list之前,先详细了解list和它们如何工作。另外,我建议您不要使用=来分配变量,有关此SO线程What are the differences between "=" and "<-" in R?的更多信息,请参见。

列表的另一种选择是为每个data.frame保存一个ticker,然后为cbind保存data.frame

但是根据您的代码,列表版本为:

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