private double CalculateNumeratorFor(Person p) { int result = 0; foreach (int year in p.GetPovertyYears()) { result += (year - minYear) + 1; } return (double) result; }
public SequenceEffect CalculateFor(Person p) { var result = new SequenceEffect(); var numerator = CalculateNumeratorFor(p); result.V1 = numerator.S1.Value / denominator1; result.V2 = numerator.S2.Value / denominator1; result.V3 = numerator.S3.Value / denominator2; result.V4 = numerator.S4.Value / denominator2; result.V5 = numerator.S5.Value / denominator2; return result; }
public Person CreateInstance(Observation observation) { int id = idMap.GetIdFor(observation); if (peopleCache.ContainsKey(id)) { return peopleCache[id]; } else { string country = observation.Country; string personId = observation.PersonId; Person person = new Person(country, personId); peopleCache[id] = person; return person; } }
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; }
private void ValidatePerson(Person p) { if (p.MinYear != yearMin) { AddError(string.Format("{0}: first observation year does not correspond to first year for panel", GetIdStringFor(p))); } if (p.MaxYear != yearMax) { AddError(string.Format("{0}: last observation year does not correspond to last year for panel", GetIdStringFor(p))); } if (p.ObservationCount != yearSpan) { AddError(string.Format("{0}: observations do not cover the entire span", GetIdStringFor(p))); } }
private SequenceEffect GetSequenceEffect(Person p) { return sequenceEffects[p]; }
private double GetEmergencyEffect(Person p) { return emergencyEffects[p]; }
private static string GetIdStringFor(Person p) { return string.Format("({0}, {1})", p.Country, p.PersonId); }
public double CalculateFor(Person p) { return CalculateNumeratorFor(p) / denominator; }