2015-04-28 65 views
4

<code>x(n) = \sum_{j=1}^p a_jx(n-j) + u(n)</code>Matlab的:計算協方差矩陣的逆時間序列模型

是爲了p = 2和數據樣本N的單變量自迴歸AR模型由u激發時是高斯零平均噪聲和方差sigma_u^2

我知道函數cov(x),但是如何使用它得到AR模型係數的pxp協方差矩陣C(n)及其逆矩陣S(n)= C(n)。爲逆協方差矩陣的數學公式,S(n)被表示爲

Invcovformula

其中A_1和A_2是下三角Toeplitz矩陣。

InverseCOv

我可以直接做pinv(Cov(coefficients))?我也不確定如何將參數作爲AR係數傳遞給函數。

如何實現這個公式?謝謝你的幫助

+0

如您所見,StackOverflow不支持TeX/LaTeX。請刪除它(並且絕對不要將它格式化爲代碼,除非它實際上是代碼)。如果您絕對需要顯示一個公式,請使用已完成的圖像。 – horchler

+0

@horchler:我已經爲AR模型的方程建立了一個圖像,謝謝:) – SKM

+0

我知道'cov'的東西,但不知道AR。你有什麼AR模型的輸出? 'cov()'函數用於數值計算變量的協方差,給定一組觀察/變量本身的樣本(input =觀察值x變量數組)。不知道這是這種情況。如果你想要係數的協方差,你是否有一個公式來產生係數本身的樣本? (這些'a_i'值是那些係數?)AR可能有一個封閉形式的解決方案,但我不知道它是什麼。 –

回答

1

你的問題完全是病態的,正如其他人所指出的,所以我會鼓勵你做一些閱讀並思考你真正想要做什麼首先。儘管如此,我可以提供一些指導,與編程相比,這更多的是理清概念。根據這個問題和評論,你的問題應該被重新表述爲:「如何通過最大似然估計來估計參數的AR(n)模型參數的協方差矩陣?」在這種情況下,我們可以回答如下。

  1. 爲了討論起見,我們先來生成一些測試數據
>> rng(0); 
>> n = 10000; 
>> x = rand(n,2); 
  • 首先獲得初始條件巧妙通過運行OLS。無論如何,大多數人估計自主反應(幾乎所有關於向量自迴歸的文獻)以及OLS和MLE在某些條件下是漸近等價的。如果你想包含一個常量(如果你使用的是非貶值數據,你希望這樣做)包含一列零。在輸出b是您的參數估計向量,並且C是標準錯誤的相應向量。
  • >> X = [x,ones(n,1)]; 
    >> [b,C]=lscov(X,y) 
    
    b = 
    
        4.9825 
        9.9501 
        20.0227 
    
    
    C = 
    
        0.0347 
        0.0345 
        0.0266 
    
  • 之前可以做最大似然你需要一個可能性第一。我們可以構造一個作爲幾個簡單的匿名函數的組合。我們還需要構建一個包含預測誤差標準差的初始條件向量,因爲這是我們要使用MLE估計的事情之一。在這種情況下,我假設你想要一個正常分佈的錯誤,並以此爲基礎的例子,但你沒有說,當然可以選擇任何東西(沒有正常分佈的錯誤通常是不做的動機OLS)。另外,由於我們正在使用最小化例程,因此我將建立負對數似然。
  • >> err = @(b) y - X*b 
    
    err = 
    
        @(b)y-X*b 
    
    >> std(err(b)) 
    
    ans = 
    
        0.9998 
    
    >> b0 = [b; std(err(b))]; 
    >> nll = @(b) (n/2)*log(2*pi*b(end)^2) + (1/(2*b(end)^2))*sum(err(b(1:end-1)).^2); 
    
  • 接着使用某種類型的最小化過程(例如,fminsearchfminunc等)做MLE
  • >> bmle = fminsearch(nll,b0) 
    
    bmle = 
    
        4.9825 
        9.9501 
        20.0227 
        0.9997 
    

    不出所料,估計是幾乎相同,我們OLS下獲得的,這正是我們所期望的,當誤差是正態分佈的,而這就是爲什麼大多數人選擇只是在做OLS除非有一些令人信服的理由認爲錯誤是非正常的。協方差矩陣可以通過得分的外積來估計,這在正常情況下是一個特別簡單的表達式。

    >> inv(X'*X/bmle(end)) 
    
    ans = 
    
        0.0012 0.0000 -0.0006 
        0.0000 0.0012 -0.0006 
        -0.0006 -0.0006 0.0007 
    

    最後,標準誤差與我們在最小二乘情況下得到的結果相匹配。

    >> sqrt(diag(inv(X'*X/bmle(end)))) 
    
    ans = 
    
        0.0347 
        0.0345 
        0.0266 
    

    編輯:對不起,我剛剛意識到我的測試數據是橫截面而不是時間序列數據。我會盡快解決這個問題。但估算模型的方法不變。

    +0

    對不起,在這麼晚的時候回覆。我正在將你的技術應用到我的實現中,不幸的是,有很多問題。這可能是由於我不正確的理解。你能看一下嗎? – SKM

    +0

    因此,我將時間序列模型擬合到AR中,並使用命令aryule()使用OLS估計參數。這給了我2個參數。現在,我嘗試通過改變噪聲的方差來估計零均值高斯白噪聲,這是sigma^2(在我的問題中)。那麼我怎麼能在每個時刻n實現這個協變公式S? :inv(sigma^2)*(A_1 * A_1' - A_2 * A_2')我不關注Toeplitz矩陣,A_1和A_2將在這種情況下以及係數估計的作用。在你的例子中,很容易發現估計值在分母 – SKM

    +0

    中使用aryule()不是內置函數,我不確定你使用的是什麼函數。但是我可以從名稱中猜出它與Yule-Walker方程有關。這些只是讓你在自迴歸模型暗示的自協方差函數和自協方差函數隱含的自迴歸模型之間進行反演。那麼你是否真的在尋找估計的自協方差函數?這與估計的自迴歸參數對應的協方差矩陣不同。無論如何,我會建議該線程被關閉,因爲這不是編程... –