Exemplo n.º 1
0
        public List <MonthlyLogOddsRatio> ComputeMonthlyLogOddsRatio()
        {
            var marginalDefaultRate       = ComputeMarginalDefaultRate();
            var monthlyLogOddsRatioResult = new List <MonthlyLogOddsRatio>();

            int monthCount = 1;

            for (int year = 1; year <= _maxRatingYear; year++)
            {
                for (int month = 1; month <= 12; month++)
                {
                    for (int rank = 1; rank <= _maxRatingRank; rank++)
                    {
                        var rate = marginalDefaultRate.FirstOrDefault(row => row.Year == year && row.Rank == rank);

                        var dataRow = new MonthlyLogOddsRatio();
                        dataRow.Month        = monthCount;
                        dataRow.Rank         = rank;
                        dataRow.Rating       = rate.Rating;
                        dataRow.CreditRating = 1.0 - Math.Pow((1.0 - rate.LogOddsRatio), (1.0 / 12.0));
                        monthlyLogOddsRatioResult.Add(dataRow);
                    }
                    monthCount += 1;
                }
            }



            return(monthlyLogOddsRatioResult);
        }
Exemplo n.º 2
0
        protected List <MonthlyLogOddsRatio> ComputeMonthlyCummulativeSurvival()
        {
            var monthlyLogOddsRatio = ComputeMonthlyLogOddsRatio();

            var monthlyCummulativeSurvivalResult = new List <MonthlyLogOddsRatio>();

            ///Month 1 Computation
            var tempDt = monthlyLogOddsRatio.AsEnumerable()
                         .Where(row => row.Month == 1).ToList();

            foreach (var dr in tempDt)
            {
                var dataRow = new MonthlyLogOddsRatio();
                dataRow.Month        = dr.Month;
                dataRow.Rank         = dr.Rank;
                dataRow.Rating       = dr.Rating;
                dataRow.CreditRating = 1.0 - dr.CreditRating;
                monthlyCummulativeSurvivalResult.Add(dataRow);
            }

            ///Month 2 to max computation
            for (int month = 2; month <= (_maxRatingYear * 12); month++)
            {
                var prevMonthCreditRating = monthlyCummulativeSurvivalResult.Where(row => row.Month == month - 1).ToList();

                var currMonthCreditRating = monthlyLogOddsRatio.Where(row => row.Month == month)
                                            .Select(row =>
                {
                    double prev = prevMonthCreditRating.AsEnumerable()
                                  .FirstOrDefault(x => x.Rank == row.Rank)
                                  .CreditRating;
                    row.CreditRating = prev * (1 - row.CreditRating);

                    return(row);
                }).ToList();

                monthlyCummulativeSurvivalResult.AddRange(currMonthCreditRating);
            }


            return(monthlyCummulativeSurvivalResult);
        }