public List <IndexForecast> ComputeIndexForecast() { List <IndexForecast> indexForecast = new List <IndexForecast>(); var statisticalInputs = GetStatisticalInputData(); var principalData = ComputeScenarioPrincipalComponents(statisticalInputs); double indexStandardDeviation = ComputeHistoricIndexStandardDeviation(); double indexMean = ComputeHistoricIndexMean(); var cp = new Macro_Processor().GetMacroResult_Statistics(this._eclId, this._eclType); var engenValues = statisticalInputs.Where(o => o.Mode == StatisticalInputsRowKeys.Eigenvalues).Select(p => p.MacroEconomicValue).ToList(); for (int i = 0; i < engenValues.Count; i++) { if (i == 0) { cp.IndexWeight1 = engenValues[i] / engenValues.Take(2).Sum(); } if (i == 1) { cp.IndexWeight2 = engenValues[i] / engenValues.Take(2).Sum(); } if (i == 2) { cp.IndexWeight3 = 0;// engenValues[i] / engenValues.Take(3).Sum(); } if (i == 3) { cp.IndexWeight4 = 0;// engenValues[i] / engenValues.Take(4).Sum(); } } foreach (var itm in principalData) { double actual = (itm.Principal1 * cp.IndexWeight1.Value) + (itm.Principal2 * cp.IndexWeight2.Value) + (itm.Principal3 * cp.IndexWeight3.Value) + (itm.Principal4 * cp.IndexWeight4.Value); var dr = new IndexForecast(); dr.Date = itm.Date; dr.Actual = actual; dr.Standardised = indexStandardDeviation == 0 ? 0 : (actual - indexMean) / indexStandardDeviation; indexForecast.Add(dr); } return(indexForecast); }
protected List <IndexForecast> ComputeScenarioStandardisedData(List <PDI_StatisticalInputs> statisticalInputs) { List <IndexForecast> standardisedData = new List <IndexForecast>(); //var statisticalInputs = GetStatisticalInputData(); var originalData = GetScenarioProjectionOriginalData(); //double macroeconomicStandardDeviation = ComputeHistoricIndexStandardDeviation(); //double macroeconomicMean = ComputeHistoricIndexMean(); foreach (var row in originalData) { var macroeconomicMean = statisticalInputs.FirstOrDefault(o => o.MacroEconomicVariableId == row.MacroEconomicVariableId && o.Mode == StatisticalInputsRowKeys.Mean); var macroeconomicStandardDeviation = statisticalInputs.FirstOrDefault(o => o.MacroEconomicVariableId == row.MacroEconomicVariableId && o.Mode == StatisticalInputsRowKeys.StandardDeviation); //**************************************** if (macroeconomicMean == null) { macroeconomicMean = new PDI_StatisticalInputs { MacroEconomicValue = 0, MacroEconomicVariableId = 0 } } ; if (macroeconomicStandardDeviation == null) { macroeconomicStandardDeviation = new PDI_StatisticalInputs { MacroEconomicValue = 0, MacroEconomicVariableId = 0 } } ; var dr = new IndexForecast(); dr.Date = row.Date; dr.MacroEconomicVariableId = row.MacroEconomicVariableId; if (macroeconomicStandardDeviation.MacroEconomicValue == 0) { macroeconomicStandardDeviation.MacroEconomicValue = 1; } dr.MacroEconomicValue = (row.MacroEconomicValue - macroeconomicMean.MacroEconomicValue) / macroeconomicStandardDeviation.MacroEconomicValue; standardisedData.Add(dr); //Log4Net.Log.Info($"{dr.Date},{dr.MacroEconomicVariableId},{dr.MacroEconomicValue},{this._Scenario.ToString()}++++++"); } return(standardisedData); }
protected List <IndexForecast> GetScenarioProjectionOriginalData() { var originalData = new List <IndexForecast>(); var projections = GetScenarioProjectionData(); //originalData = projections.AsEnumerable() // .Where(row => row.Field<DateTime>(MacroeconomicProjectionColumns.Date) > TempEclData.ReportDate) // .CopyToDataTable(); var qry = Queries.Get_AffiliateId(this._eclId, this._eclType); var dt = DataAccess.i.GetData(qry); var affiliateId = Convert.ToInt32(dt.Rows[0][0]); qry = Queries.Get_AffiliateMEVBackDateValues(this._eclId, this._eclType); dt = DataAccess.i.GetData(qry); var MEVBackDate = new List <AffiliateMEVBackDateValues>(); foreach (DataRow dr in dt.Rows) { MEVBackDate.Add(DataAccess.i.ParseDataToObject(new AffiliateMEVBackDateValues(), dr)); } var lastMacroVariableId = MEVBackDate.Select(o => o.MicroEconomicId).Distinct().Last(); projections = projections.OrderByDescending(o => o.Date).ToList(); for (int i = 0; i < projections.Count; i++) { if (1 != 1)//(affiliateId == 5 || affiliateId == 46 || affiliateId == 47) && projections[i].MacroEconomicVariableId == lastMacroVariableId) { var prevItm = projections.FirstOrDefault(o => o.MacroEconomicVariableId == lastMacroVariableId && o.Date < projections[i].Date); if (prevItm != null) { projections[i].BestEstimateMacroEconomicValue = projections[i].BestEstimateMacroEconomicValue - prevItm.BestEstimateMacroEconomicValue; projections[i].OptimisticMacroEconomicValue = projections[i].OptimisticMacroEconomicValue - prevItm.OptimisticMacroEconomicValue; projections[i].DownturnMacroEconomicValue = projections[i].DownturnMacroEconomicValue - prevItm.DownturnMacroEconomicValue; } else { projections[i].BestEstimateMacroEconomicValue = 0; projections[i].OptimisticMacroEconomicValue = 0; projections[i].DownturnMacroEconomicValue = 0; } } } var reportingDate = GetReportingDate(_eclType, _eclId); //Log4Net.Log.Info("================="); for (int i = 0; i < projections.Count; i++) { if (projections[i].Date > reportingDate)// && i > 3 { var itm = projections[i]; var bdate = MEVBackDate.FirstOrDefault(o => o.MicroEconomicId == itm.MacroEconomicVariableId); var _bdate = 0; if (bdate != null) { //if (bdate.BackDateQuarters == 1) //{ // bdate.BackDateQuarters = bdate.BackDateQuarters; //} _bdate = bdate.BackDateQuarters * 3; } var _dt = itm.Date.AddMonths(-_bdate); var _itm = projections.OrderBy(p => p.Date).FirstOrDefault(o => o.MacroEconomicVariableId == itm.MacroEconomicVariableId && o.Date.Month == _dt.Month && o.Date.Year == _dt.Year); // == GetLastDayOfMonth(itm.Date.AddMonths(-_bdate)) if (_itm == null) { if (projections.Count > 0) { _itm = projections.Last(); } } var dr = new IndexForecast(); dr.Date = itm.Date; dr.MacroEconomicVariableId = itm.MacroEconomicVariableId; if (this._Scenario == ECL_Scenario.Best) { dr.MacroEconomicValue = _itm.BestEstimateMacroEconomicValue; } if (this._Scenario == ECL_Scenario.Downturn) { dr.MacroEconomicValue = _itm.DownturnMacroEconomicValue; } if (this._Scenario == ECL_Scenario.Optimistic) { dr.MacroEconomicValue = _itm.OptimisticMacroEconomicValue; } originalData.Add(dr); //Log4Net.Log.Info($"{dr.Date},{dr.MacroEconomicVariableId},{dr.MacroEconomicValue},{this._Scenario.ToString()}"); } } return(originalData); }