1
我有一些股票價格OHLC時間序列:OHCL時間序列 - 異常檢測與多元高斯分佈
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更合適,因爲這看起來像是一個「編程」問題。