2013-04-09 37 views
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) 

941 OHLC time series

正如你可以從圖中看到,有兩個下降的峯值,很可能是由於某種數據錯誤。我想用多元高斯檢測包含這兩個違規數據點的行。

> 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更合適,因爲這看起來像是一個「編程」問題。

回答

1

你是對的。我不知道如何解決錯誤,但我可以建議你如何找到新的點的指數。

  1. 你的訓練數據可能有少數異常,否則交叉驗證和測試結果將遭受
  2. 計算均值和方差在MATLAB 作爲

    mu=mean(traindata); 
        sigma=cov(traindata); 
    
  3. 集小量按您的要求

    count=0; 
        Actual=[]; 
        for j=1:size(cv,1) 
        p=mvnpdf(cv(j,:),mu,sigma); 
         if p<eplison 
         count=count+1; 
         Actual=[Actual;j]; 
          fprintf('j=%d \t p=%e\n',j,p); 
        end 
    end 
    
  4. 調整閾值如果結果不令人滿意

  5. 評估採用F-1的比分模型(如F-1得分爲1,你這樣做是正確的)
  6. 應用模型試驗數據
  7. 完成!