У меня есть временные ряды OHLC для некоторых цен на акцию:OHCL Time Series - Обнаружение Anomaly с многомерным гауссовским распределением
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()
для вычисления матрицы ковариации, но только с помощью функции надежной ковариационной матрицы. Ковариантная матрица сама по себе выглядит довольно мягкой, поэтому я не уверен, что происходит. Причины, по которым я хочу использовать надежную оценку ковариационной матрицы, состоит в том, что стандартная ковариационная матрица давала несколько ложных срабатываний, так как я включал аномалии в моем наборе тренировок.
Может кто-нибудь сказать мне:
а) как исправить эту
б) если этот подход даже имеет смысл
Спасибо!
P.S. Я считал, что вы разместили это на Cross Validated, но подумал, что SO был более уместным, поскольку это похоже на проблему программирования.