static void RegressAtLag(CompanyObservations compObs, int lag, SqlCommand cmd, CompanyObservations.RegressionType type) { DoubleVector prices = compObs.GetPrices(type, compObs.Length - lag, 1); DoubleVector laggedPrices = compObs.GetPrices(type, compObs.Length - lag, lag); //Regress price & priceLag LinearRegression priceRegression = new LinearRegression(new DoubleMatrix(laggedPrices), prices); LinearRegressionAnova priceAnova = new LinearRegressionAnova(priceRegression); DoubleMatrix companyGen = compObs.GetCompanyGenerated(type, lag); //Regress Price and compLag LinearRegression companyRegression = new LinearRegression(companyGen, prices); LinearRegressionAnova companyAnova = new LinearRegressionAnova(companyRegression); DoubleMatrix customerGen = compObs.GetCustomerGenerated(type, lag); //Regress Price and cust lag LinearRegression customerRegression = new LinearRegression(customerGen, prices); LinearRegressionAnova customerAnova = new LinearRegressionAnova(customerRegression); double priceExplain = Double.IsInfinity(priceAnova.AdjustedRsquared) ? 0 : priceAnova.AdjustedRsquared; double companyExplain = Double.IsInfinity(companyAnova.AdjustedRsquared) ? 0 : companyAnova.AdjustedRsquared; double customerExplain = Double.IsInfinity(customerAnova.AdjustedRsquared) ? 0 : customerAnova.AdjustedRsquared; cmd.CommandText = $"Insert INTO RegressionResults VALUES ({compObs.CompanyID}, {lag}, {priceExplain}, {customerExplain}, {companyExplain}, {(int) type})"; cmd.ExecuteNonQuery(); }
static void PerformRegressions(CompanyObservations compObs, SqlCommand cmd) { if (compObs.Length < 10) { return; } for (int i = 1; i < 6; i++) { RegressAtLag(compObs, i, cmd, CompanyObservations.RegressionType.Full); if (i != 1) { RegressAtLag(compObs, i, cmd, CompanyObservations.RegressionType.Delta); RegressAtLag(compObs, i, cmd, CompanyObservations.RegressionType.PercentChanged); } } }