def test_gini2shares(self): gini0 = random.random() nbrackets = 10 ** random.randrange(3, 5) shares01 = list(gini2shares(gini=gini0, nbrackets=nbrackets)) print "sum", sum(shares01) gini1 = calc_gini(shares01) # print "ginis:", gini0, gini1 TODO: better accuracy expected... self.assert_(fmath.feq(gini0, gini1, 1e-3)) # imposed and computed Gini shd be equal print "here" shares02 = list(gini2sharesPareto(gini=gini0, nbrackets=nbrackets)) print "sum", sum(shares02) gini2 = calc_gini(shares02) # print "ginis:", gini0, gini1 TODO: better accuracy expected... self.assert_(fmath.feq(gini0, gini2, 1.0 / nbrackets)) # imposed and computed Gini shd be equal """
def test_gini2shares(self): nshares = 30 test_gini = random.random() shares = list( utilities.gini2sharesPower(test_gini, 30) ) shares02 = np.diff( np.linspace(0, 1, nshares+1)**((1+test_gini)/(1-test_gini)) ) self.assertTrue(np.allclose(shares, shares02)) shares_gini = calc_gini(share*100 for share in shares) #print test_gini, shares_gini #TODO: improve accuracy self.assert_( abs(test_gini - shares_gini ) < 1e-02 )
def test_calc_gini(self): #test that two Gini formulae give same result gini1 = calc_gini(self.wealths) gini2 = calc_gini2(self.wealths) gini3 = calc_gini3(self.wealths) gini4 = calc_gini4(self.wealths) #print "gini1:%f, gini2:%f"%(gini1, gini2) self.assert_(fmath.feq(gini1, gini2)) self.assert_(fmath.feq(gini1, gini3)) print gini1, gini4 self.assert_(fmath.feq(gini1, gini4))
def test_calc_gini(self): # test that two Gini formulae give same result gini1 = calc_gini(self.wealths) gini2 = calc_gini2(self.wealths) gini3 = calc_gini3(self.wealths) gini4 = calc_gini4(self.wealths) # print "gini1:%f, gini2:%f"%(gini1, gini2) self.assert_(fmath.feq(gini1, gini2)) self.assert_(fmath.feq(gini1, gini3)) print gini1, gini4 self.assert_(fmath.feq(gini1, gini4))
def record_history(self): #TODO: calc distribution over **indivs** or households?? history = self.history #compute current wealth distribution dist = utilities.calc_gini( indiv.calc_wealth() for indiv in self.ppl.gen_indivs() ) history['dist'].append(dist) history['ppl_size'].append(self.ppl.get_size()) history['capital'].append( self.funds[0].calc_accts_value() ) if hasattr(self.ppl, 'new_cohort_sexes'): freq = defaultdict(int) for s in self.ppl.new_cohort_sexes.split(';'): freq[len(s)] += 1 history['sexes'].append( freq )
def test_gini2shares(self): gini0 = random.random() nbrackets = 10**random.randrange(3, 5) shares01 = list(gini2shares(gini=gini0, nbrackets=nbrackets)) print "sum", sum(shares01) gini1 = calc_gini(shares01) #print "ginis:", gini0, gini1 TODO: better accuracy expected... self.assert_(fmath.feq(gini0, gini1, 1e-3)) #imposed and computed Gini shd be equal print "here" shares02 = list(gini2sharesPareto(gini=gini0, nbrackets=nbrackets)) print "sum", sum(shares02) gini2 = calc_gini(shares02) #print "ginis:", gini0, gini1 TODO: better accuracy expected... self.assert_( fmath.feq(gini0, gini2, 1. / nbrackets)) #imposed and computed Gini shd be equal print shares01[::100] print calc_gini(shares01) print shares02[::100] print calc_gini(shares02) fig, (ax1, ax2) = plt.subplots(1, 2) ax1.plot(shares01) ax2.plot(np.cumsum(shares01)) ax2.plot(np.cumsum(shares02)) plt.show() exit()
def record_history( self): #TODO: calc distribution over **indivs** or households?? history = self.history #compute current wealth distribution dist = utilities.calc_gini(indiv.calc_wealth() for indiv in self.ppl.gen_indivs()) history['dist'].append(dist) history['ppl_size'].append(self.ppl.get_size()) history['capital'].append(self.funds[0].calc_accts_value()) if hasattr(self.ppl, 'new_cohort_sexes'): freq = defaultdict(int) for s in self.ppl.new_cohort_sexes.split(';'): freq[len(s)] += 1 history['sexes'].append(freq)
def test_gini2shares(self): gini0 = random.random() nbrackets = 10**random.randrange(3,5) shares01 = list(gini2shares(gini=gini0, nbrackets=nbrackets)) print "sum", sum(shares01) gini1 = calc_gini(shares01) #print "ginis:", gini0, gini1 TODO: better accuracy expected... self.assert_(fmath.feq(gini0, gini1, 1e-3)) #imposed and computed Gini shd be equal print "here" shares02 = list( gini2sharesPareto(gini=gini0, nbrackets=nbrackets) ) print "sum", sum(shares02) gini2 = calc_gini(shares02) #print "ginis:", gini0, gini1 TODO: better accuracy expected... self.assert_(fmath.feq(gini0, gini2, 1./nbrackets)) #imposed and computed Gini shd be equal print shares01[::100] print calc_gini(shares01) print shares02[::100] print calc_gini(shares02) fig, (ax1,ax2) = plt.subplots(1,2) ax1.plot(shares01) ax2.plot(np.cumsum(shares01)) ax2.plot(np.cumsum(shares02)) plt.show() exit()
def adjust_kn(self, d, g): for consumer in self.consumers: consumer.adjust_kn(d, g) def get_unemployment(self): kn = self.kn return sum(f[1] == 0 for f in kn) / len(kn) print # health_threshold currently global: TODO health_threshold = 1.0 health_threshold = 0.1 consumer = CompositeSolowConsumer(K0, N0) for _ in range(1000): K, N = consumer.get_kn() Y = f(K, N) #print "K: %5.2f, AN: %5.2f, Y: %5.2f"%(K,N,Y) #print consumer.kn if not _ % 50: print "unemployment: ", consumer.get_unemployment( ), "inequality: ", calc_gini(c.k for c in consumer.consumers) #print [(c.health < health_threshold) for c in consumer.consumers] #TODO: d and g and alpha are currently global consumer.adjust_kn(d, gN + gA) #timing crucial! (fix that?) consumer.receive(alpha * Y, 'rents') print consumer.receive((1 - alpha) * Y, 'wages') print
def testGini(self): #TODO: move this gini1 = calc_gini(self.wealths) gini2 = calc_gini2(self.wealths) print "gini1:%f, gini2:%f"%(gini1, gini2) self.assert_( abs(gini1-gini2)<1e-8 )