Example #1
0
        /// <summary>
        /// Piecewise linear regression
        /// </summary>
        /// <param name="regResults"></param>
        /// <param name="NObs"></param>
        /// <param name="Z"></param>
        /// <param name="Beta"></param>
        /// <param name="NVar"></param>
        /// <param name="DepVarMean"></param>
        /// <param name="B"></param>
        /// <param name="StkSprdPLOut"></param>
        /// <param name="CoefLabel"></param>
        public void Reg(StreamWriter regResults, int NObs, double[,] Z,
      double[] Beta, int NVar, double DepVarMean, double[] B,
      StreamWriter StkSprdPLOut, string[] CoefLabel)
        {
            //
              //  Find X"X.
              //
              //Write(9,*) "NObs =", NObs
              regResults.WriteLine("NObs = " + NObs);
              regResults.WriteLine("X'X Matrix");
              for (k = 1; k <= NVar; k++)
              {
            for (n = 1; n <= NObs; n++) Mean[k] = Mean[k] + Z[n, k];
            for (l = 1; l <= NVar; l++)
            {
              XPrimeX[k, l] = 0;
              for (m = 1; m <= NObs; m++)
              {
            XPrimeX[k, l] = XPrimeX[k, l] + (Z[m, k] * Z[m, l]);
              }
              if (l < 8) regResults.Write(string.Format("{0,10:#######.00}", XPrimeX[k, l]));
              else regResults.WriteLine(string.Format("{0,10:#######.00}", XPrimeX[k, l]));
            }
              }
              for (k = 1; k <= NVar; k++)
            Mean[k] = Mean[k] / NObs;
              //
              for (n = 1; n <= NObs; n++)
            DepVarMean = DepVarMean + B[n];
              //
              DepVarMean = DepVarMean / NObs;
              //
              //  Invert X"X.
              //
              int Indic = -1;                           //Flag to invert X"X
              Invert invert = new Invert();
              double Deter = invert.Matrix(NVar, XPrimeX, Dum, 1e-19, Indic, NVar + 1);
              regResults.WriteLine("X'X Inverse");
              for (k = 1; k <= NVar; k++)
              {
            for (int l = 1; l <= NVar - 1; l++)  // Use Write for 1st NVar-1 cols.
              regResults.Write(string.Format("{0,10:####.00000}", XPrimeX[k, l]));
            regResults.WriteLine(string.Format("{0,10:####.00000}", XPrimeX[k, NVar]));
              }
              //
              //  Get X"Y.
              //
              regResults.WriteLine("XPrimeY");
              for (k = 1; k <= 8; k++)
              {
            XPrimeY[k] = 0;
            for (l = 1; l <= NObs; l++)
            {
              XPrimeY[k] = XPrimeY[k] + (Z[l, k] * B[l]);
            }
            regResults.WriteLine(k + " "
              + string.Format("{0,10:########.00000}", XPrimeY[k]));
              }
              //
              //  Last step to compute Betas.
              //
              regResults.WriteLine("Betas");
              for (k = 1; k <= NVar; k++)
              {
            for (l = 1; l <= NVar; l++)
            {
              Beta[k] = Beta[k] + (XPrimeX[l, k] * XPrimeY[l]);
            }
            regResults.WriteLine(k + " "
              + string.Format("{0,10:########.00000}", Beta[k]));
              }
              //
              //  Get SER, R2, & t-stats.
              //
              double SSR = 0;
              double YY = 0;
              double SumY = 0;
              for (i = 1; i <= NObs; i++)
              {
            YHat[i] = 0;
            for (j = 1; j <= NVar; j++)       // For all betas.
              YHat[i] = YHat[i] + Beta[j] * Z[i, j];
            SSR = SSR + (B[i] - YHat[i]) * (B[i] - YHat[i]);
            YY = YY + B[i] * B[i];
            SumY = SumY + B[i];  // B is not a Beta; it is the dep. var.
              }
              //
              double TotSS = YY - (SumY * SumY) / NObs;
              double XSS = TotSS - SSR;
              double RSqrd = XSS / TotSS;

              //
              double SER = Math.Sqrt(SSR / (NObs - NVar));
              //
              //  Write table in new coef. file.
              //
              DateTime TimeNow = DateTime.Now;              //  To put run time on output file.
              StkSprdPLOut.WriteLine("Coefficients for weekly stock equation estimated on " + TimeNow);
              StkSprdPLOut.WriteLine();
              StkSprdPLOut.WriteLine(" Est Coef t-Stat Variable             Mean");
              StkSprdPLOut.WriteLine("--------- ------ ----------------- -------");
              for (j = 1; j <= NVar; j++)
              {
            if (XPrimeX[j, j] <= 0)
            {
              string msg = XPrimeX[j, j] + " Inv(X'X) element " + " " + j + " is negative.";
              Warning.Message(msg, "Terminate", 1);
            }
            StkSprdPLOut.WriteLine(string.Format("{0,9:###.00000}", Beta[j])
            + string.Format("{0,7:###.000}", Beta[j] / (SER * Math.Sqrt(XPrimeX[j, j])))
            + CoefLabel[j] + string.Format("{0,8:###.0000}", Mean[j]));
            //430	  Format(f9.5,f7.2,1x,a17,f8.4)
              }
              //
              // Write summary stats below table.
              //
              StkSprdPLOut.WriteLine("--------- ------ ----------------- -------");
              StkSprdPLOut.WriteLine("      R-Squared = " + RSqrd);
              StkSprdPLOut.WriteLine("            SER = " + SER);
              StkSprdPLOut.WriteLine("  Number of obs = " + NObs);
              StkSprdPLOut.WriteLine(" Dep. Var. Mean = " + DepVarMean);
              //
              return;
        }
Example #2
0
        /// <summary>
        /// Piecewise linear regression
        /// </summary>
        /// <param name="regResults"></param>
        /// <param name="NObs"></param>
        /// <param name="Z"></param>
        /// <param name="Beta"></param>
        /// <param name="NVar1"></param>
        /// <param name="DepVarMean"></param>
        /// <param name="B"></param>
        /// <param name="StkSprdPLOut"></param>
        /// <param name="CoefLabel"></param>
        public void Reg(StreamWriter regResults, int NObs, double[,] Z,
      double[] Beta, int NVar, double DepVarMean, double[] B,
      StreamWriter StkSprdPLOut, string[] CoefLabel)
        {
            NVar1 = NVar - 1;    // See note above.
              //
              //  Find X'X.
              //
              regResults.WriteLine("NObs = " + NObs);
              regResults.WriteLine("X'X Matrix");
              for (k = 1; k <= NVar1; k++)
              {
            for (n = 1; n <= NObs; n++)
              Mean[k] = Mean[k] + Z[n, k];  // Accumulate for means.
            for (l = 1; l <= NVar1; l++)
            {
              XPrimeX[k, l] = 0;
              for (m = 1; m <= NObs; m++)
            XPrimeX[k, l] = XPrimeX[k, l] + (Z[m, k] * Z[m, l]);
              if (l < NVar1)
              {
            // Switch print masks depending on magnitude of number.
            //
            if (XPrimeX[k, l] >= 10000000 || XPrimeX[k, l] <= -1000000)
              regResults.Write(string.Format("{0,10:#########0}", XPrimeX[k, l]));
            else
              regResults.Write(string.Format("{0,10:######0.00}", XPrimeX[k, l]));
              }
              else
            if (XPrimeX[k, l] >= 10000000 || XPrimeX[k, l] <= -1000000)
              regResults.WriteLine(string.Format("{0,10:#########0}", XPrimeX[k, l]));
            else
              regResults.WriteLine(string.Format("{0,10:######0.00}", XPrimeX[k, l]));
            } // End for l
              } // End for k

              for (k = 1; k <= NVar1; k++)
            Mean[k] = Mean[k] / NObs;  // Compute means.
              //
              for (n = 1; n <= NObs; n++)
              {
            DepVarMean = DepVarMean + B[n];
            //Console.WriteLine(n + " " + B[n] + " " + DepVarMean);  // 12-2-14
              }
              //
              DepVarMean = DepVarMean / NObs;
              //
              //  Invert X'X.
              //
              int Indic = -1;                           //Flag to invert X'X
              Invert invert = new Invert();
              double Deter = invert.Matrix(NVar1, XPrimeX, Dum, 1e-19, Indic, NVar1 + 1);
              //
              // If Dum[0] is 1, Invert encountered a fatal error.  Close output files & exit.
              //
              if (Dum[0] == 1)
              {
            regResults.Close();
            StkSprdPLOut.Close();
            Warning.Message("Fatal error in Invert.  Closing output files.", "Terminate", 1);
              }
              regResults.WriteLine("X'X Inverse");
              for (k = 1; k <= NVar1; k++)
              {
            for (int l = 1; l <= NVar1 - 1; l++)  // Use Write for 1st NVar1-1 cols.
              regResults.Write(string.Format("{0,10:####.00000}", XPrimeX[k, l]));
            regResults.WriteLine(string.Format("{0,10:####.00000}", XPrimeX[k, NVar1]));
              }
              //
              //  Get X'Y.
              //
              regResults.WriteLine("XPrimeY");
              for (k = 1; k <= NVar1; k++)
              {
            XPrimeY[k] = 0;
            for (l = 1; l <= NObs; l++)
            {
              XPrimeY[k] = XPrimeY[k] + (Z[l, k] * B[l]);
            }
            regResults.WriteLine(string.Format("{0,10:#########0}", k)
              + string.Format("{0,10:######.000}", XPrimeY[k]));
              }
              //
              //  Last step to compute Betas.
              //
              regResults.WriteLine("Betas");
              for (k = 1; k <= NVar1; k++)
              {
            for (l = 1; l <= NVar1; l++)
            {
              Beta[k] = Beta[k] + (XPrimeX[l, k] * XPrimeY[l]);
            }
            regResults.WriteLine(string.Format("{0,10:#########0}", k)
              + string.Format("{0,10:#####.0000}", Beta[k]));
              }
              //
              //  Get SER, R2, & t-stats.
              //
              double SSR = 0;
              double YY = 0;
              double SumY = 0;
              for (i = 1; i <= NObs; i++)
              {
            YHat[i] = 0;
            for (j = 1; j <= NVar1; j++)       // For all betas.
              YHat[i] = YHat[i] + Beta[j] * Z[i, j];
            SSR = SSR + (B[i] - YHat[i]) * (B[i] - YHat[i]);
            YY = YY + B[i] * B[i];
            SumY = SumY + B[i];  // B is not a Beta; it is the dep. var.
              }
              //
              double TotSS = YY - (SumY * SumY) / NObs;
              double XSS = TotSS - SSR;
              double RSqrd = XSS / TotSS;
              //
              double SER = Math.Sqrt(SSR / (NObs - NVar1));
              //
              //  Write table in new coef. file.
              //
              DateTime TimeNow = DateTime.Now;              //  To put run time on output file.
              StkSprdPLOut.WriteLine("Coefficients for weekly stock equation estimated on " + TimeNow);
              StkSprdPLOut.WriteLine();
              StkSprdPLOut.WriteLine("  Est Coef t-Stat Variable          Mean");
              StkSprdPLOut.WriteLine(" --------- ------ -------------- -------");
              for (j = 1; j <= NVar1; j++)
              {
            if (XPrimeX[j, j] <= 0)
            {
              string msg = XPrimeX[j, j] + " Inv(X'X) element " + " " + j + " is <= 0.";
              regResults.Close();
              Warning.Message(msg, "Terminate", 1);
            }
            double tStat = Beta[j] / (SER * Math.Sqrt(XPrimeX[j, j]));
            StkSprdPLOut.WriteLine(" " + string.Format("{0,9:##0.00000}", Beta[j])
            + string.Format("{0,7:##0.000}", tStat) + " "
            + CoefLabel[j] + "\t" + string.Format("{0,8:##0.0000}", Mean[j]));
              }
              //
              //  To remind us that MAHDD is not in the reg., but still available, give it a zero
              //  coef & show it on the last line.
              //
              StkSprdPLOut.WriteLine(" " + string.Format("{0,9:##0.00000}", 0)
              + string.Format("{0,7:##0.000}", 0) + " "
              + CoefLabel[j] + "\t" + string.Format("{0,8:##0.0000}", 0));
              //
              // Write summary stats below table.
              //
              StkSprdPLOut.WriteLine(" --------- ------ --------------- -------");
              StkSprdPLOut.WriteLine(string.Format("{0,7:#0.0000}", RSqrd) + " = R-Squared");
              StkSprdPLOut.WriteLine(string.Format("{0,7:#0.0000}", SER) + " = SER");
              StkSprdPLOut.WriteLine(string.Format("{0,7:######0}", NObs) + " = Number of obs");
              StkSprdPLOut.WriteLine(string.Format("{0,7:###0.00}", DepVarMean) + " = Dep. Var. Mean");
              StkSprdPLOut.WriteLine();
        }