/// <summary> /// Constructor. Menghitung nilai LjungBox Q Stat. /// </summary> /// <param name="Y">Vektor. Vektor data yang akan dicari /// nilai LjungBox Q Statistiknya. </param> /// <param name="Lag">Int. Jumlah lag yang di include kan</param> public LjungBoxQTest(Vector Y, int Lag) { double[] ljung = new double[Lag]; double[] acfValue = new double[Lag]; double sekuadrat; double sumacf = 0; double[] acfD; this.acf = new Vector(Lag); this.pacf = new Matrix(Lag, Lag); this.se = new Vector(Lag); this.lBox = new Vector(Lag); this.pValue = new Vector(Lag); this.pValue1 = new Vector(Lag); this.n = Y.Tuples; this.lag = Lag; this.y = Y.Copy(); this.sumY = y.GetSumData(); this.yBar = sumY / n; // Penghitungan nilai ACF for (int k = 0; k < lag; k++) { acf[k] = getRho(k + 1); } double sumRho = 0; for (int i = 1; i <= lag; i++) { sumRho += Math.Pow(acf[i - 1], 2) / (n - i); lBox[i - 1] = n * (n + 2) * sumRho; ChiSquare chi = new ChiSquare(i); pValue1[i - 1] = chi.PValue(lBox[i - 1]); if (pValue1[i - 1] < 0) { pValue[i - 1] = 0; } else { pValue[i - 1] = pValue1[i - 1]; } } //previous way //for (int i = 1; i <= lag; i++) //{ // double sumRho = 0; // for (int k = 1; k <= i; k++) // { // sumRho += Math.Pow(acf[k - 1], 2) / (n - k); // } // lBox[i - 1] = n * (n + 2) * sumRho; // ChiSquare chi = new ChiSquare(i); // pValue1[i - 1] = chi.PValue(lBox[i - 1]); // if (pValue1[i - 1] < 0) pValue[i - 1] = 0; // else pValue[i - 1] = pValue1[i - 1]; //} //Penghitungan nilai PACF pacf[0, 0] = acf[0]; for (int i = 1; i < lag; i++) { double sumatas = 0; double sumbawah = 0; for (int k = 0; k < i; k++) { sumatas += pacf[i - 1, k] * acf[(i - k) - 1]; sumbawah += pacf[i - 1, k] * acf[k]; } pacf[i, i] = (acf[i] - sumatas) / (1 - sumbawah); for (int j = 0; j < i; j++) { pacf[i, j] = pacf[i - 1, j] - (pacf[i, i] * pacf[i - 1, (i - j) - 1]); } } // previous way //for (int i = 1; i < lag; i++) //{ // for (int j = 0; j < i; j++) // { // double sumatas = 0; // double sumbawah = 0; // for (int k = 0; k < i; k++) // { // sumatas += pacf[i - 1, k] * acf[(i - k) - 1]; // sumbawah += pacf[i - 1, k] * acf[k]; // } // pacf[i, i] = (acf[i] - sumatas) / (1 - sumbawah); // pacf[i, j] = pacf[i - 1, j] - (pacf[i, i] * pacf[i - 1, (i - j) - 1]); // } //} acfD = acf.GetData(); sumacf = 0; for (int i = 0; i < lag; i++) { sekuadrat = (1 + 2 * sumacf) / y.Tuples; se[i] = Math.Sqrt(sekuadrat); sumacf += Math.Pow(acfD[i], 2); } // previous way //for (int i = 0; i < lag; i++) //{ // sumacf = 0; // for (int j = 0; j < i; j++) // { // sumacf += Math.Pow(acfD[j], 2); // } // sekuadrat = (1 + 2 * sumacf) / y.Tuples; // se[i] = Math.Sqrt(sekuadrat); //} }