Example #1
0
        public static double[,] DiscretePartialAutocorrelation(double[,] x)
        {
            int length = x.Length;

            double[,] r = new double[1, length];
            r[0, 0]     = 1; r[0, 1] = DiscreteAutocorrelation(x)[0, 1];
            for (int k = 2; k < length; k++)
            {
                double[,] Px  = new double[length - k, k - 1];
                double[,] PyL = new double[length - k, 1];
                double[,] PyR = new double[length - k, 1];
                for (int i = 0; i < length - k; i++)
                {
                    for (int j = 0; j < k - 1; j++)
                    {
                        Px[i, j] = x[0, j + 1 + i];
                    }
                    PyL[i, 0] = x[0, i];
                    PyR[i, 0] = x[0, i + k];
                }
                r[0, k] =
                    Matrix.Product(
                        Matrix.Trans(Matrix.Subtract(PyL, Matrix.Product(Px, OrdinaryLeastSquares.Beta(Px, PyL)))),
                        Matrix.Subtract(PyR, Matrix.Product(Px, OrdinaryLeastSquares.Beta(Px, PyR)))
                        )[0, 0] / Math.Sqrt(
                        Matrix.Product(
                            Matrix.Product(
                                Matrix.Trans(Matrix.Subtract(PyL, Matrix.Product(Px, OrdinaryLeastSquares.Beta(Px, PyL)))),
                                Matrix.Subtract(PyL, Matrix.Product(Px, OrdinaryLeastSquares.Beta(Px, PyL)))
                                ),
                            Matrix.Product(
                                Matrix.Trans(Matrix.Subtract(PyR, Matrix.Product(Px, OrdinaryLeastSquares.Beta(Px, PyR)))),
                                Matrix.Subtract(PyR, Matrix.Product(Px, OrdinaryLeastSquares.Beta(Px, PyR)))
                                )
                            )[0, 0]);
            }
            return(r);
        }