diff --git a/lectures/inequality.md b/lectures/inequality.md index 9c6cffb7..0fda5cf2 100644 --- a/lectures/inequality.md +++ b/lectures/inequality.md @@ -15,11 +15,11 @@ kernelspec: ## 概览 -在{doc}`long_run_growth` 中,我们研究了某些国家和地区的人均国内生产总值是如何变化的。 +在{doc}`long_run_growth` 中,我们研究了在某些国家和地区,人均国内生产总值是如何变化的。 -人均 GDP 很重要,因为它能让我们了解某个国家的家庭平均收入。 +人均 GDP 很重要,我们能通过这一经济指标了解到某个特定国家的家庭平均收入。 -然而,当我们研究收入和财富时,平均数只是其中的一部分。 +然而,当我们研究收入和财富问题时,平均数只是其中的一个方面。 ```{prf:example} :label: ie_ex_av @@ -30,40 +30,42 @@ kernelspec: * 在第二个社会中,每个人的年收入都是 100 美元 -这些国家的人均收入相同(平均收入为 100 美元),但人民的生活却大不相同(例如,在第一个社会中,几乎每个人都在挨饿,尽管有一个人非常富有)。 +这些国家的人均收入相同(平均收入为 100 美元),但人民的生活却大不相同(例如,在第一个社会中,尽管有一个人非常富有, 但是几乎每个人都在挨饿)。 ``` -上面的例子表明,我们在研究收入和财富时,不应该仅仅局限于简单的平均数。 +上面的例子表明,我们在研究收入和财富问题时,不应该仅仅局限于简单的平均数。 -这就引出了经济不平等的话题,即研究收入和财富(以及其他数量)如何在人口中分配。 +这就引出了经济不平等的话题,即研究收入和财富(以及其他资源的数量)如何在人口中分配的话题。 -在本讲座中,我们将研究不平等问题,首先探讨不平等的衡量标准,然后将其应用于美国和其他国家的财富和收入数据。 +在本讲中,我们将研究不平等问题。 + +我们首先探讨不平等的衡量标准,然后将其应用于美国和其他国家的财富和收入数据。 ### 一些历史 -许多历史学家认为,不平等在罗马共和国的衰落中扮演了重要角色(参见{cite}`levitt2019did`等)。 +许多历史学家认为,在罗马共和国衰落这一历史事件中,不平等这一问题起到了重要作用(参见{cite}`levitt2019did`等)。 -在打败迦太基和入侵西班牙之后,资金从帝国各地流入罗马,极大地富裕了掌权者。 +罗马打败了迦太基,并入侵了西班牙,在这之后,资金从帝国各地流入罗马,掌权者变得极为富有。 -与此同时,普通公民却被从农田中抽调出来长期作战,使他们的财富不断减少。 +但与此同时,普通公民却从农业生产中被抽调出来,进行长期作战,这使得他们的财富不断减少。 -由此导致的不平等现象加剧,成为动摇共和国根基的政治动荡的驱动因素。 +由此导致的持续加剧的不平等成为罗马共和国政治动荡背后的重要驱动因素,深深地动摇了共和国的根基。 -最终,罗马共和国让位于一系列独裁政权 -- 从公元前 27 年的[屋大维](https://en.wikipedia.org/wiki/Augustus)(奥古斯都)开始。 +最终,罗马共和国让位于从公元前 27 年的[屋大维](https://en.wikipedia.org/wiki/Augustus)(奥古斯都)开始的一系列独裁政权。 -这段历史告诉我们,不平等很关键,因为它可以推动世界重大事件的发生。 +这段历史告诉我们,不平等问题很关键,它可以推动世界的重大事件发生。 -不平等之所以关键,还有其他原因,比如它如何影响人类福祉。 +当然还有其他原因使得不平等问题很关键,比如它如何影响人类福祉。 -有了这些动机,让我们开始思考什么是不平等,以及如何量化和分析不平等。 +基于这些原因,我们开始思考什么是不平等,以及如何量化和分析不平等。 ### 测量 在政界和大众媒体中,“不平等 ”一词的使用往往相当宽泛,没有任何确切的定义。 -要从科学的角度来看待不平等这一话题,我们必须从谨慎的定义开始。 +我们必须从严谨的定义出发,从科学的角度来看待不平等这一话题。 因此,我们首先讨论经济研究中衡量不平等的方法。 @@ -95,16 +97,16 @@ plt.rcParams['font.family'] = ['Source Han Serif SC'] 洛伦兹曲线是衡量不平等的一个常用指标。 -在本节中,我们将定义洛伦兹曲线并研究其特性。 +在本节中,我们将讨论洛伦兹曲线的定义和性质。 ### 定义 -洛伦兹曲线取一个样本 $w_1,\ldots,w_n$,并生成一条曲线 $L$。 +洛伦兹曲线选取一个样本 $w_1,\ldots,w_n$,并生成一条曲线 $L$。 我们假设样本从小到大排序。 -为了便于解释,假设我们测量的是财富 +为了便于解释,假设样本衡量的是财富 * $w_1$ 是人口中最贫穷成员的财富,而 * $w_n$ 是人口中最富有成员的财富。 @@ -124,11 +126,11 @@ y_i = \frac{\sum_{j \leq i} w_j}{\sum_{j \leq n} w_j}, $$ ``` -现在,洛伦兹曲线 $L$ 就是根据这些数据点用插值法绘制的。 +现在,根据这些数据点,我们用插值法绘制得到洛伦兹曲线 $L$。 如果我们使用 `matplotlib` 中的线形图,它将自动帮我们完成插值。 -洛伦兹曲线 $y = L(x)$ 的含义是,最低的 $(100 \times x$ \% 的人拥有$(100 \times y)$\% 的财富。 +洛伦兹曲线 $y = L(x)$ 的含义是,最底层的 $(100 \times x$ \% 的人拥有$(100 \times y)$\% 的财富。 * 如果 $x=0.5$,$y=0.1$,那么最底层的 50%人口拥有 10%的财富。 @@ -137,18 +139,18 @@ $$ ### 洛伦兹曲线的模拟数据 -让我们来看一些例子,并尝试构建理解。 +让我们来看一些例子,并加强理解。 首先,让我们构建一个可以在下面模拟中使用的 `lorenz_curve` 函数。 -构造这样一个函数,它能将收入或财富数据的数组转换为个人(或家庭)的累积份额和收入(或财富)的累积份额。 +构造这样一个函数很有用,因为它能将收入或财富数据的数组转换为个人(或家庭)的累积份额和收入(或财富)的累积份额。 ```{code-cell} ipython3 def lorenz_curve(y): """ 计算洛伦兹曲线,这是收入或财富分配的图形表示。 - 它返回人们的累积份额(x轴)和赚取的收入的累积份额。 + 它返回人口累积份额(x轴)和赚取的收入的累积份额。 参数 ---------- @@ -159,9 +161,9 @@ def lorenz_curve(y): 返回值 ------- cum_people : array_like(float, ndim=1) - 每个人指数的人们的累积份额(i/n) + 每个人的人口累积份额指数(i/n) cum_income : array_like(float, ndim=1) - 每个人指数的收入的累积份额 + 每个人的收入累积份额指数 参考文献 @@ -190,11 +192,11 @@ def lorenz_curve(y): 在下图中,我们从对数正态分布中生成了 $n=2000$ 个样本,并将这些样本视为我们的总体。 -其中45 度线($x=L(x)$ 对于所有 $x$)对应于完全平等的情况。 +其中45 度线(对于所有 $x$,$x=L(x)$)对应于完全平等的情况。 对数正态分布的样本产生了一个不那么平等的分布。 -例如,如果我们将这些样本看作是家庭财富的观测值,那么虚线表明,底部 80\% 的家庭仅拥有总财富的 40\% 多一点。 +例如,如果我们将这些样本看作是家庭财富的观测值,那么虚线表明,底层 80\% 的家庭仅拥有总财富的 40\% 多一点。 ```{code-cell} ipython3 --- @@ -224,7 +226,7 @@ plt.show() ### 洛伦兹曲线(美国数据) -接下来让我们查看美国的收入和财富数据。 +接下来,我们来看一看美国的收入数据和财富数据。 (data:survey-consumer-finance)= 下面的代码导入了2016年的`SCF_plus`数据集的一个子集, @@ -240,9 +242,9 @@ df_income_wealth = df.dropna() df_income_wealth.head(n=5) ``` -接下来的代码使用存储在数据框 `df_income_wealth` 中的数据来生成洛伦兹曲线。 +接下来我们用存储在数据框 `df_income_wealth` 中的数据来生成洛伦兹曲线。 -(代码稍微复杂一些,因为我们需要根据 SCF 提供的人口权重来调整数据。) +(接下来的代码会稍微复杂一些,因为我们需要根据 SCF 提供的人口权重来调整数据。) ```{code-cell} ipython3 :tags: [hide-input] @@ -265,12 +267,12 @@ for var in varlist: l_vals = [] for year in years: - # 根据他们的权重重复观测 + # 根据他们的权重来重复这些观测值 counts = list(round(df[df['year'] == year]['weights'] )) y = df[df['year'] == year][var].repeat(counts) y = np.asarray(y) - # 洗牌序列以改善图形 + # 打乱y的序列来改善图形形状 rd.shuffle(y) # 计算并储存洛伦兹曲线数据 @@ -289,7 +291,7 @@ l_vals_nw, l_vals_ti, l_vals_li = L_vals 总收入是家庭所有收入来源的总和,包括劳动收入但不包括资本收益。 -(所有收入计量均为税前。) +(所有收入均用税前收入衡量。) ```{code-cell} ipython3 --- @@ -311,11 +313,11 @@ ax.legend() plt.show() ``` -一个关键发现是,财富不平等比收入不平等更为极端。 +从图中可以得到一个关键发现,财富不平等比收入不平等更为极端。 ## 基尼系数 -洛伦兹曲线提供了分布不平等的可视化表示。 +洛伦兹曲线提供了不平等分布的可视化表示。 另一种研究收入和财富不平等的方法是通过基尼系数。 @@ -339,7 +341,7 @@ $$ 基尼系数与洛伦兹曲线密切相关。 -事实上,可以证明基尼系数的值是平等线与洛伦兹曲线之间面积的两倍(例如,{numref}`lorenz_gini` 中的阴影区域)。 +事实上,我们可以证明基尼系数的值是平等线与洛伦兹曲线之间面积的两倍(例如,{numref}`lorenz_gini` 中的阴影区域)。 其思想是,$G=0$ 表示完全平等,而 $G=1$ 表示完全不平等。 @@ -358,19 +360,19 @@ ax.fill_between(f_vals, l_vals, f_vals, alpha=0.06) ax.set_ylim((0, 1)) ax.set_xlim((0, 1)) ax.text(0.04, 0.5, r'$G = 2 \times$ 阴影区域') -ax.set_xlabel("家庭比例 (%)") -ax.set_ylabel("财富比例 (%)") +ax.set_xlabel("家庭份额 (%)") +ax.set_ylabel("财富份额 (%)") ax.legend() plt.show() ``` -事实上,基尼系数还可以表示为 +基尼系数还可以表示为 $$ G = \frac{A}{A+B} $$ -其中 $A$ 是完美平等的45度线与洛伦兹曲线之间的区域面积,$B$ 是洛伦兹曲线以下的区域面积 —— 参见 {numref}`lorenz_gini2`。 +其中 $A$ 是45度的完美平等线与洛伦兹曲线之间的区域的面积,$B$ 是洛伦兹曲线以下的区域的面积 —— 参见 {numref}`lorenz_gini2`。 ```{code-cell} ipython3 --- @@ -382,7 +384,7 @@ mystnb: fig, ax = plt.subplots() f_vals, l_vals = lorenz_curve(sample) ax.plot(f_vals, l_vals, label='对数正态样本', lw=2) -ax.plot(f_vals, f_vals, label='平等', lw=2) +ax.plot(f_vals, f_vals, label='平等线', lw=2) ax.fill_between(f_vals, l_vals, f_vals, alpha=0.06) ax.fill_between(f_vals, l_vals, np.zeros_like(f_vals), alpha=0.06) ax.set_ylim((0, 1)) @@ -396,13 +398,13 @@ plt.show() ``` ```{seealso} -在全球数据网站上有一个很有趣的用图表阐述[洛伦兹曲线的网页](https://ourworldindata.org/what-is-the-gini-coefficient) +在全球数据网站 (Our World in Data) 上有一个用图表阐述[洛伦兹曲线和基尼系数](https://ourworldindata.org/what-is-the-gini-coefficient)的网页 ``` ### 模拟数据的基尼系数 -让我们通过模拟数据来研究基尼系数。 +让我们通过一些模拟数据来研究基尼系数。 下面的代码将从样本中计算基尼系数。 @@ -411,7 +413,7 @@ plt.show() ```{code-cell} ipython3 def gini_coefficient(y): r""" - 实现的基尼不平等指数 + 基尼不平等指数 参数 ---------- @@ -439,11 +441,11 @@ def gini_coefficient(y): 现在我们可以计算五个不同总体的基尼系数。 -这些总体中的每一个都是从参数为 $\mu$(均值)和 $\sigma$(标准差)的对数正态分布中生成的。 +其中,每个总体都是从参数为 $\mu$(均值)和 $\sigma$(标准差)的对数正态分布中生成的。 为了创建这五个总体,我们在 $0.2$ 到 $4$ 的网格上变化 $\sigma$,网格长度为 $5$。 -在每种情况下,我们都设置 $\mu = - \sigma^2 / 2$。 +在每种情况下,我们都设定 $\mu = - \sigma^2 / 2$。 这意味着分布的均值不会随 $\sigma$ 改变。 @@ -463,7 +465,7 @@ for σ in σ_vals: ginis.append(gini_coefficient(y)) ``` -让我们构建一个返回图形的函数(这样我们可以在后面的讲义中使用它)。 +让我们构建一个返回图形的函数(便于我们之后继续使用它)。 ```{code-cell} ipython3 def plot_inequality_measures(x, y, legend, xlabel, ylabel): @@ -484,7 +486,7 @@ mystnb: --- fix, ax = plot_inequality_measures(σ_vals, ginis, - '模拟', + '模拟数据', '$\sigma$', '基尼系数') plt.show() @@ -496,9 +498,9 @@ plt.show() 让我们来看一下美国收入分布的基尼系数。 -我们将从世界银行预先计算的基尼系数(基于收入)中获取数据,使用 [wbgapi](https://blogs.worldbank.org/opendata/introducing-wbgapi-new-python-package-accessing-world-bank-data)。 +我们使用 [wbgapi](https://blogs.worldbank.org/opendata/introducing-wbgapi-new-python-package-accessing-world-bank-data),从世界银行获得预先计算的基尼系数(基于收入)。 -让我们使用前面导入的 `wbgapi` 包,搜索世界银行数据中的基尼系数以找到系列 ID。 +我们使用前面导入的 `wbgapi` 包,搜索世界银行数据中的基尼系数以找到系列 ID。 ```{code-cell} ipython3 wb.search("gini") @@ -508,7 +510,7 @@ wb.search("gini") (另一种找到系列 ID 的方法是使用 [世界银行数据门户](https://data.worldbank.org) 并使用 `wbgapi` 提取数据。) -为了快速概览,让我们绘制世界银行数据集中所有国家和所有年份的基尼系数直方图。 +为了快速掌握数据概况,我们来绘制世界银行数据集中所有国家和所有年份的基尼系数直方图。 ```{code-cell} ipython3 --- @@ -519,10 +521,10 @@ mystnb: --- # 获取所有国家的基尼数据 gini_all = wb.data.DataFrame("SI.POV.GINI") -# 移除索引中的 'YR' 并转为整数 +# 移除索引中的 'YR' 并将其转为整数 gini_all.columns = gini_all.columns.map(lambda x: int(x.replace('YR',''))) -# 创建带有多重索引的长系列数据,以获取全球最大和最小值 +# 创建带有多重索引的长系列数据,以获取全球的最大值和最小值 gini_all = gini_all.unstack(level='economy').dropna() # 构建直方图 @@ -532,7 +534,7 @@ ax.set_ylabel("频率") plt.show() ``` -我们可以在 {numref}`gini_histogram` 中看到,根据50年的数据和所有国家的数据,该指标在20到65之间变化。 +我们可以在 {numref}`gini_histogram` 中看到,根据50年所有国家的数据,该指标在20到65之间变化。 现在,我们来看看美国在过去几十年的基尼系数变化。 @@ -543,7 +545,7 @@ data.head(n=5) data.columns = data.columns.map(lambda x: int(x.replace('YR',''))) ``` -(这个数据包通常会返回包含年份信息的列。这在使用 pandas 简单绘图时并不总是方便,因此在绘图之前将结果转置可能会有帮助。) +(这个包经常返回包含年份信息的数据列。这对于使用 pandas 进行简单绘图来说并不总是很方便,所以在绘图之前对结果进行转置可能会很有用。) ```{code-cell} ipython3 data = data.T # 将年份作为行 @@ -567,7 +569,7 @@ ax.set_xlabel("年份") plt.show() ``` -如 {numref}`gini_usa1` 所示,从1980年到2020年,美国的收入基尼系数呈上升趋势,然后在COVID疫情初期下降。 +如 {numref}`gini_usa1` 所示,从1980年到2020年,美国的收入基尼系数呈上升趋势,然后在COVID疫情开始后下降。 (compare-income-wealth-usa-over-time)= ### 财富的基尼系数 @@ -606,17 +608,17 @@ ax.set_ylabel("基尼系数") plt.show() ``` -财富基尼系数的时间序列呈现出 U 形走势,在20世纪80年代初之前下降,然后迅速上升。 +财富基尼系数的时间序列呈现出 U 形走势,在20世纪80年代初之前,基尼系数呈下降趋势,然后迅速上升。 -一个可能的原因是这种变化是主要由技术驱动的。 +导致这种变化的一个可能的原因是技术的驱动。 -然而,我们将在下文中看到,并非所有发达经济体都经历了类似的不平等增长。 +然而,我们将在下文中看到,并非所有发达经济体都经历了类似的不平等问题的增长。 ### 跨国收入不平等的比较 在本讲义的前面部分,我们使用 `wbgapi` 获取了多个国家的基尼数据,并将其保存在名为 `gini_all` 的变量中。 -在本节中,我们将使用这些数据来比较几个发达经济体,并查看它们各自的收入基尼系数的变化。 +在本节中,我们将使用这些数据来比较几个发达经济体,并看一看它们各自的收入基尼系数的变化。 ```{code-cell} ipython3 data = gini_all.unstack() @@ -625,7 +627,7 @@ data.columns 此数据包中涵盖了167个国家的数据。 -让我们比较三个发达经济体:美国、英国和挪威。 +我们来比较三个发达经济体:美国、英国和挪威。 ```{code-cell} ipython3 --- @@ -644,13 +646,13 @@ plt.show() 我们发现挪威的数据时间序列较短。 -让我们仔细查看底层数据,看看是否可以修正这个问题。 +让我们仔细检查底层数据,看看是否可以修正这个问题。 ```{code-cell} ipython3 data[['NOR']].dropna().head(n=5) ``` -此数据包中挪威的数据可以追溯到1979年,但时间序列中存在空缺,所以matplotlib 没有显示这些数据点。 +此数据包中挪威的数据可以追溯到1979年,但时间序列中存在空缺,所以 matplotlib 没有显示这些数据点。 我们可以使用 `.ffill()` 方法来复制并前移序列中的最后已知值,以填补这些空缺。 @@ -676,7 +678,7 @@ plt.show() ### 基尼系数与人均GDP(随时间变化) -我们还可以查看(随时间变化的)基尼系数与人均GDP的比较。 +我们还可以看一看基尼系数与人均GDP的比较(随时间变化)。 让我们再次关注美国、挪威和英国。 @@ -715,7 +717,7 @@ max_year = plot_data.year.max() 这三个国家的时间序列开始和结束的年份不同。 -我们将在数据中添加一个年份掩码,以提高图表的清晰度,包含每个国家时间序列的不同结束年份。 +我们将在数据中添加年份掩码,以提高图表的清晰度,包括显示每个国家时间序列不同的结束年份。 ```{code-cell} ipython3 labels = [1979, 1986, 1991, 1995, 2000, 2020, 2021, 2022] + \ @@ -746,15 +748,15 @@ fig.show() 此图表显示,所有三个西方经济体的人均GDP随着时间增长,而基尼系数则有所波动。 -从80年代初开始,英国和美国的经济都经历了收入不平等的增加。 +从80年代初开始,英国和美国的经济都经历了收入不平等程度的增加。 -有趣的是,自2000年以来,英国的收入不平等有所下降,而美国则表现出基尼系数约为40的持续但稳定的水平。 +有趣的是,自2000年以来,英国的收入不平等程度有所下降,而美国则表现出持续且稳定的水平,基尼系数约为40。 ## 前10%比例 另一个受欢迎的不平等衡量指标是前10%比例。 -在本节中,我们展示如何计算前10%比例。 +在本节中,我们学习如何计算前10%比例。 ### 定义 @@ -771,7 +773,7 @@ T(p) = 1 - L (1-p) $$ (topshares) ``` -这里 $\lfloor \cdot \rfloor$ 是取整函数,它将任何数字向下取整为小于或等于该数的整数。 +这里 $\lfloor \cdot \rfloor$ 是向下取整函数,它将任何数字向下取整为小于或等于该数的整数。 以下代码使用数据框 `df_income_wealth` 中的数据生成另一个数据框 `df_topshares`。 @@ -797,7 +799,7 @@ df4['weighted_l_income'] = df4['l_income'] * df4['r_weights'] df6 = df4[df4['nw_groups'] == 'Top 10%'] df7 = df4[df4['ti_groups'] == 'Top 10%'] -# 计算按净财富、总收入和劳动收入加权的前10% +# 分别计算按净财富、总收入和劳动收入加权的前10%的总和 df5 = df4.groupby('year').sum(numeric_only=True).reset_index() df8 = df6.groupby('year').sum(numeric_only=True).reset_index() df9 = df7.groupby('year').sum(numeric_only=True).reset_index() @@ -842,6 +844,7 @@ plt.show() ``` ## 练习 + ```{exercise} :label: inequality_ex1 @@ -849,11 +852,11 @@ plt.show() 随着 $\sigma$ 的增加,$w_\sigma$ 的方差也在增加。 -为了关注波动性,在每一步调整 $\mu$ 以保持等式 $\mu = -\sigma^2 / 2$ 成立。 +为了关注波动性,在每个步骤调整 $\mu$ ,以保持等式 $\mu = -\sigma^2 / 2$ 成立。 对于每个 $\sigma$,生成2000个 $w_\sigma$ 的独立抽样,并计算洛伦兹曲线和基尼系数。 -确认更高的方差会在样本中产生更多的分散,从而导致更大的不平等。 +证明更高的方差会在样本中产生更多的分散,从而导致更大的不平等。 ``` ```{solution-start} inequality_ex1 @@ -962,7 +965,7 @@ plt.show() :class: dropdown ``` -这是一个解决方案: +这是一种解法: ```{code-cell} ipython3 def lorenz2top(f_val, l_val, p=0.1): @@ -1003,13 +1006,13 @@ plt.show() ```{exercise} :label: inequality_ex3 -{ref}`计算基尼系数的代码在上述讲义中列出 `。 +{ref}`计算基尼系数的代码已在上述讲义中列出 `。 -此代码使用循环计算基于收入或财富数据的基尼系数。 +此代码循环计算基于收入或财富数据的基尼系数。 -该函数可以通过向量化改写,从而大大提高 `python` 中的计算效率。 +该函数可以通过向量化改写,从而大大提高在 `python` 中的计算效率。 -使用 `numpy` 和向量化代码重写 `gini_coefficient` 函数。 +使用 `numpy` 和向量化代码来重写 `gini_coefficient` 函数。 你可以比较新函数与上面函数的输出,并注意速度差异。 ``` @@ -1018,7 +1021,7 @@ plt.show() :class: dropdown ``` -让我们先看看存储在 `df_income_wealth` 中的美国原始数据 +我们先来看看存储在 `df_income_wealth` 中的美国原始数据 ```{code-cell} ipython3 df_income_wealth.describe()