private double CalculateNumeratorFor(Person p) { int result = 0; foreach (int year in p.GetPovertyYears()) { result += (year - minYear) + 1; } return (double)result; }
private Numerator CalculateNumeratorFor(Person p) { var povertyYears = p.GetPovertyYears(); int numPovertyYears = povertyYears.Count; if (numPovertyYears == 0) return Numerator.Zero; ; if (numPovertyYears == 1) return Numerator.Create(p.GetPovertyGapForYear(povertyYears[0])); var result = new Numerator(); for (int n = 0; n < numPovertyYears - 1; n++) { for (int m = n + 1; m < numPovertyYears; m++) { int lowYear = povertyYears[n]; int highYear = povertyYears[m]; int i = (highYear - minYear) + 1; int j = (lowYear - minYear) + 1; double Oij = p.GetNonPovertyYearsBetween(lowYear, highYear); double Wij = p.GetPovertyGapAverage(lowYear, highYear); double Pij = GetPovertyPersistenceRatioValue(p.Country, lowYear, highYear); // double term = (Math.Pow((i - j + 1), -(Pij * (Oij + 1)))) * Wij; result.S1.Terms.Add(Wij * Math.Pow((i - j + 1), -(Pij * (Oij + 1)))); result.S2.Terms.Add(Math.Pow((i - j + 1), -(Pij * (Oij + 1)))); result.S3.Terms.Add(Wij * Math.Pow((i - j + 1), -(Oij + 1))); result.S4.Terms.Add(Wij * Math.Pow((i - j + 1), -1.0)); result.S5.Terms.Add(Math.Pow((i - j + 1), -1.0)); } } return result; }