我有一些股票价格的 OHLC 时间序列:
library(quantmod)
library(mnormt)
library(MASS)
download.file("http://dl.dropbox.com/u/25747565/941.RData", destfile="test.RData")
load("test.RData")
chartSeries(p)
从图中可以看出,有两个向下的尖峰,很可能是由于某种数据错误。我想使用多元高斯来检测包含这两个违规数据点的行。
> x[122,]
941.Open 941.High 941.Low 941.Close
85.60 86.65 5.36 86.20
> x[136,]
941.Open 941.High 941.Low 941.Close
84.15 85.60 54.20 85.45
这是我的代码来拟合分布并计算每个数据点的概率:
x <- coredata(p[,1:4])
mu <- apply(x, 2, mean)
sigma <- cov.rob(x)$cov
prob <- apply(x, 1, dmnorm, mean = mu, varcov = sigma, log = TRUE)
但是,此代码引发以下错误:
Error in pd.solve(varcov, log.det = TRUE) : x appears to be not symmetric
当我使用标准函数计算协方差矩阵时没有出现这个错误cov()
,而只是使用了鲁棒协方差矩阵函数。协方差矩阵本身对我来说看起来很温和,所以我不确定发生了什么。我想使用协方差矩阵的稳健估计的原因是因为标准协方差矩阵给出了一些误报,因为我在训练集中包含了异常。
有人可以告诉我:
a)如何解决这个问题
b)如果这种方法甚至有意义
谢谢!
PS 我考虑在 Cross Validated 上发布此内容,但认为 SO 更合适,因为这似乎是一个“编程”问题。