protected List <LogOddRatio> ComputeLogRates() { var snpCummulativeRate = new ProcessECL_PD(this._eclId, this._eclType).Get_PDI_SnPCummlativeDefaultRate(); var logRateResult = new List <LogOddRatio>(); //DataTable snpCummulativeRating = snpCummulativeRate.DefaultView.ToTable(false, SnPCummlativeDefaultRateColumns.Rating ); foreach (var row in snpCummulativeRate) { string rating = row.Rating; //Type myObjOriginalType = row.GetType(); //PropertyInfo[] myProps = myObjOriginalType.GetProperties(); //for (int year = 1; year <= _maxLogRateYear; year++) //{ //double defaultRate = double.Parse(myProps.FirstOrDefault(o => o.Name.ToString() == $"_{row.Years.ToString()}").GetValue(row).ToString()); double log = Math.Log((1 - row.Value) / row.Value); var dataRow = new LogOddRatio(); dataRow.Rating = rating; dataRow.Year = row.Years; dataRow.LogOddsRatio = log; logRateResult.Add(dataRow); //} } return(logRateResult); }
protected List <LogOddRatio> ComputeMarginalDefaultRate() { var cummulativeDefaultRate = ComputeCummulativeDefaultRate(); ///Get cummulative values for year 1 var marginalDefaultRateResult = new List <LogOddRatio>(); //marginalDefaultRateResult = cummulativeDefaultRate; for (int i = 0; i < cummulativeDefaultRate.Count; i++) { var itm = new LogOddRatio(); itm.Rank = cummulativeDefaultRate[i].Rank; itm.LogOddsRatio = cummulativeDefaultRate[i].LogOddsRatio; itm.Rating = cummulativeDefaultRate[i].Rating; itm.Year = cummulativeDefaultRate[i].Year; if (cummulativeDefaultRate[i].Year != 1) { try { var prev = cummulativeDefaultRate.FirstOrDefault(o => o.Year == cummulativeDefaultRate[i].Year - 1 && o.Rank == cummulativeDefaultRate[i].Rank && o.Rating == cummulativeDefaultRate[i].Rating); itm.LogOddsRatio = (cummulativeDefaultRate[i].LogOddsRatio - prev.LogOddsRatio) / (1 - prev.LogOddsRatio); } catch { itm.LogOddsRatio = 1; } } marginalDefaultRateResult.Add(itm); } return(marginalDefaultRateResult); }
protected List <LogOddRatio> ComputeLogsOddsRatio() { var pd12MonthAssumption = new CalibrationInput_PD_CR_RD_Processor().GetPD12MonthsPD(this._eclId, this._eclType);// new ProcessECL_Wholesale_PD(this._eclId).Get_PDI_Assumptions(); //.Get_PDI_12MonthPds(); var pdInputAssumptions = new ProcessECL_PD(this._eclId, this._eclType).Get_PDI_Assumptions(); var logRates = ComputeLogRates(); var logOddsRatioResult = new List <LogOddRatio>(); //********************************************** string snpMappingInput = PdAssumptionsRowKey.SnpMappingValueBestFit; try { snpMappingInput = pdInputAssumptions.FirstOrDefault(o => o.PdGroup == PdInputAssumptionGroupEnum.General && o.Key == ECLNonStringConstants.i.SnpMapping).Value; } catch { } for (int rank = 1; rank <= _maxRatingRank; rank++) { //***************************** var _12MonthAssumption = new PDI_Assumptions { Value = PdAssumptionsRowKey.SnpMappingValueBestFit }; if (snpMappingInput == PdAssumptionsRowKey.SnpMappingValueBestFit) { _12MonthAssumption = pdInputAssumptions.Where(o => o.PdGroup == PdInputAssumptionGroupEnum.CreditBestFit).FirstOrDefault(o => o.InputName == rank.ToString()); } if (snpMappingInput == PdAssumptionsRowKey.SnpMappingValueEtiCreditPolicy) { _12MonthAssumption = pdInputAssumptions.Where(o => o.PdGroup == PdInputAssumptionGroupEnum.CreditEtiPolicy).FirstOrDefault(o => o.InputName == rank.ToString()); } string rating = _12MonthAssumption.Value;// snpMappingInput == _12MonthAssumption.Policy ? _12MonthAssumption.Policy : _12MonthAssumption.Fit; //Year 1 computation double pdValue = 0; try { pdValue = pd12MonthAssumption.FirstOrDefault(o => o.Rating == rank).Months_PDs_12; } catch { pdValue = 0; }// double.Parse(pdInputAssumptions.FirstOrDefault(o => o.PdGroup == PdInputAssumptionGroupEnum.CreditPD && o.InputName == rank.ToString()).Value); double year1LogOddRatio = Math.Log((1 - pdValue) / pdValue); var dataRow = new LogOddRatio(); dataRow.Rank = rank; dataRow.Rating = rating; dataRow.Year = 1; dataRow.LogOddsRatio = year1LogOddRatio; logOddsRatioResult.Add(dataRow); //Year to Max computation double year1RatingLogRate = 0; try { year1RatingLogRate = logRates.FirstOrDefault(row => row.Rating == rating && row.Year == 1).LogOddsRatio; } catch { } for (int year = 2; year <= _maxRatingYear; year++) { double currentYearRatingLogRate = logRates.FirstOrDefault(row => row.Rating == rating && row.Year == Math.Min(year, _maxLogRateYear)).LogOddsRatio; double currentYearLogOddRatio = year1LogOddRatio + currentYearRatingLogRate - year1RatingLogRate; var currentYeardataRow = new LogOddRatio(); currentYeardataRow.Rank = rank; currentYeardataRow.Rating = rating; currentYeardataRow.Year = year; currentYeardataRow.LogOddsRatio = currentYearLogOddRatio; logOddsRatioResult.Add(currentYeardataRow); } } return(logOddsRatioResult); }