r - R中的样本协方差矩阵
问题描述
我应该使用从 2015 年 3 月 1 日到 2017 年 3 月 1 日为 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 x 1 的矩阵...我知道我的循环正在覆盖价格中的代码,因此它只使用最后一个代码中的价格作为其余代码。我尝试使用 list 函数来纠正这个问题,但这并没有改变我对协方差的最终结果。我相信我最终会得到一个 4x4 矩阵,但我真的不明白如何得到它。
解决方案
list
我建议在尝试使用 s 之前阅读更多关于s 以及它们如何工作的信息list
。另外,我建议您不要=
用于分配变量,请参阅此 SO 线程上的更多信息 R 中的“=”和“<-”有什么区别?.
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
推荐阅读
- webpack - 使用 truffle-solidity-loader 和 webpack 时如何包含 truffle.js?
- excel - 在列中查找最后使用的单元格并填充以下单元格
- java - 如何为 AWS SAM 本地 Lambda 函数设置 ARN?
- javascript - 如何删除包含特定短语的特定值之间的数组项
- http - 告诉网站我允许 cookie 的非交互式方式
- c# - c# windows窗体停止执行直到button_Click(没有无限循环)
- spring - Spring Boot 应用程序因@Async 进程而挂起
- ruby - 获取哈希数组中最大的哈希
- javascript - 使用 jQuery .first() 组合相似的类
- dart - Dart 单例中的奇怪行为