The partial autocorrelation(pacf) of an ARMA process is the function defined by the equation:
f(0) = 1
, f(x) = g(x)(x)
correlation of series with itself. for x >= 1
The first component of every pacf series is 1.
I implemented pacf with yulewalker equations of unbiased and mle outcomes. Yulewalker equations are the set of equations represented by:
Yulewalker uses the Toeplitz matrix(gives same output when stored in either rowmajor or columnmajor form) inverse with the outcomes to generate the intermediate vector results.
Here, we can generate pacf by making use of either unbiased
and mle
method with yulewalker function. For unbiased
, the denominator is (nk)
whereas for mle
, it is n
(n is the size of timeseries). To achieve that, I made use of fantastic Ruby lambdas
to make a closure over the variable k
as:
1 2 3 4 5 6 7 8 

Below might have been a viable shortcut, but I used former for maintaining descriptive comments and simplicity in code:
1


Here is the useful description and theoretical implementation of yulewalker by University of Pennsylvania.
Henceforth, the overall yulewalker method looks like following:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 

toeplitz
method generates the Toeplitz matrix, and solve_matrix
solves the equation by using the inverse and matrix muliplication.
pacf
is available in Statsample::TimeSeries
and can be called as:
1 2 3 4 

The entire implementation can be seen at : https://github.com/AnkurGel/statsample/blob/master/lib/statsample/timeseries.rb#L151 with it’s tests at : https://github.com/AnkurGel/statsample/blob/master/test/test_pacf.rb
Cheers, /Ankur Goel