@@ -17,27 +17,27 @@ kernelspec:
1717</div>
1818```
1919
20- # 求职搜索 III: 拟合值函数迭代
20+ # 工作搜寻 III: 拟合值函数迭代
2121
2222``` {contents} 目录
2323:depth: 2
2424```
2525
2626## 概述
2727
28- 在本讲座中,我们再次研究{doc}` 带有离职的McCall求职搜索模型 <mccall_model_with_separation>` ,但这次使用连续工资分布 。
28+ 在本讲座中,我们再次研究{doc}` 带有离职情形的McCall工作搜寻模型 <mccall_model_with_separation>` ,但这次会使用连续工资分布 。
2929
30- 虽然我们在{doc}` 第一个求职搜索讲座 <mccall_model>` 的练习中已经简要考虑过连续工资分布,但在那种情况下 ,这种改变相对来说是微不足道的。
30+ 虽然我们在{doc}` 第一个工作搜寻讲座 <mccall_model>` 的练习中已经简要讨论过连续工资分布,但在那个案例中 ,这种改变相对来说是微不足道的。
3131
32- 这是因为我们能够将问题简化为求解单个标量值(持续价值) 。
32+ 这是因为我们能够将问题简化为求解单个标量值,即延续价值 。
3333
34- 在这里,由于分离,变化不那么简单,因为连续的工资分布导致了不可数的无限状态空间 。
34+ 在这一讲座中,由于离职情形的存在,变化不再那么简单,因为连续工资分布会导致不可数的无限状态空间 。
3535
36- 无限状态空间带来了额外的挑战 ,特别是在应用值函数迭代(VFI)时。
36+ 无限状态空间带来了额外的问题 ,特别是在应用值函数迭代(VFI)时。
3737
38- 这些挑战将促使我们通过添加插值步骤来修改VFI 。
38+ 这些问题会促使我们通过添加插值这一步骤,来改进VFI方法 。
3939
40- VFI和这个插值步骤的组合被称为 ** 拟合值函数迭代** (fitted VFI)。
40+ VFI和这个插值步骤的结合被称为 ** 拟合值函数迭代** (拟合 VFI)。
4141
4242拟合VFI在实践中非常常见,所以我们将花一些时间来详细研究。
4343
@@ -57,19 +57,19 @@ from numba.experimental import jitclass
5757
5858## 算法
5959
60- 该模型与我们{doc}` 之前学习的 <mccall_model_with_separation> ` 带有工作分离的McCall模型相同,只是工资分布是连续的 。
60+ 该模型与我们{doc}` 之前学习的 <mccall_model_with_separation> ` 带有离职情形的McCall模型相同,除了工资分布是连续的 。
6161
62- 我们将从{ref}` 简化转换 <ast_mcm>` 后得到的两个Bellman方程开始 。
62+ 我们将从{ref}经 ` 简化变换 <ast_mcm>` 后得到的两个贝尔曼方程入手 。
6363
64- 为了适应连续的工资分布,它们采用以下形式 :
64+ 为了适应连续工资抽样,这两个方程呈现以下形式 :
6565
6666``` {math}
6767:label: bell1mcmc
6868
6969d = \int \max \left\{ v(w'), \, u(c) + \beta d \right\} q(w') d w'
7070```
7171
72- 和
72+ 以及
7373
7474``` {math}
7575:label: bell2mcmc
@@ -82,29 +82,29 @@ v(w) = u(w) + \beta
8282
8383这里的未知量是函数$v$和标量$d$。
8484
85- 这些方程与我们之前处理的一对Bellman方程的区别在于 :
85+ 这些方程与我们之前处理的一对贝尔曼方程的区别在于 :
8686
87871 . 在{eq}` bell1mcmc ` 中,原来对有限个工资值的求和变成了对无限集合的积分。
88881 . {eq}` bell2mcmc ` 中的函数$v$定义在所有$w \in \mathbb R_ +$上。
8989
90- 函数 $q$ 在 {eq}` bell1mcmc ` 中是工资分布的密度函数 。
90+ 函数 $q$ 在 {eq}` bell1mcmc ` 中是工资分布的概率密度函数 。
9191
9292其支撑集等于 $\mathbb R_ +$。
9393
9494### 值函数迭代
9595
9696理论上,我们应该按以下步骤进行:
9797
98- 1 . 从一个对 {eq}` bell1mcmc ` --{eq}` bell2mcmc ` 解的猜测值 $v, d$ 开始 。
99- 1 . 将 $v, d$ 代入 {eq}` bell1mcmc ` --{eq}` bell2mcmc ` 的右侧 ,
100- 计算左侧以获得更新值 $v', d'$
101- 1 . 除非满足某些停止条件,否则设置 $(v, d) = (v', d')$
98+ 1 . 对 {eq}` bell1mcmc ` --{eq}` bell2mcmc ` 的解设定初始猜测值 $v, d$ 。
99+ 1 . 将 $v, d$ 代入 {eq}` bell1mcmc ` --{eq}` bell2mcmc ` 的右侧表达式 ,
100+ 通过计算获得左侧更新值 $v', d'$
101+ 1 . 若未满足某些终止条件,则令 $(v, d) = (v', d')$
102102 并返回步骤2。
103103
104- 然而,在实施这个程序之前 ,我们必须面对一个问题:
105- 值函数的迭代既不能被精确计算 ,也不能被存储在计算机中。
104+ 然而,在实施这个算法之前 ,我们必须面对一个问题:
105+ 值函数的迭代序列既不能被精确计算 ,也不能被存储在计算机中。
106106
107- 要理解这个问题,请考虑 {eq}` bell2mcmc ` 。
107+ 要理解这个问题,请考察 {eq}` bell2mcmc ` 。
108108
109109即使 $v$ 是一个已知函数,存储其更新值 $v'$ 的唯一方法
110110是记录其在每个 $w \in \mathbb R_ +$ 处的值 $v'(w)$。
@@ -113,36 +113,36 @@ v(w) = u(w) + \beta
113113
114114### 拟合值函数迭代
115115
116- 我们将改用** 拟合值函数迭代** 。
116+ 我们将改用** 拟合值函数迭代** 的方法 。
117117
118118具体步骤如下:
119119
120- 假设已有当前的猜测值 $v$。
120+ 假设当前给定猜测值函数 $v$。
121121
122122我们只在有限个"网格"点 $w_1 < w_2 < \cdots < w_I$ 上记录函数 $v'$ 的值,然后在需要时根据这些信息重构 $v'$。
123123
124- 更具体地说,算法将是
124+ 更具体地说,这个算法是
125125
126126(fvi_alg)=
127- 1 . 从一个数组 $\mathbf v$ 开始,该数组表示在某些网格点 $\{ w_i\} $ 上的初始值函数猜测值 。
128- 1 . 基于 $\mathbf v$ 和 $\{ w_i\} $,通过插值或近似在状态空间 $\mathbb R_ +$ 上构建函数 $v$。
127+ 1 . 从一个数组 $\mathbf v$ 开始,该数组表示值函数在某些网格点 $\{ w_i\} $ 上的初始猜测值 。
128+ 1 . 基于 $\mathbf v$ 和 $\{ w_i\} $,通过插值法或近似法在状态空间 $\mathbb R_ +$ 上构建函数 $v$。
1291291 . 在每个网格点 $w_i$ 上获取并记录更新后的函数 $v'(w_i)$ 的样本。
130- 1 . 除非满足某些停止条件,否则将此作为新数组并返回步骤1 。
130+ 1 . 若未满足某些停止条件,则将其作为新数组并返回步骤1 。
131131
132132我们应该如何处理步骤2?
133133
134- 这是一个函数逼近问题 ,有很多种方法可以解决。
134+ 这是一个函数近似问题 ,有很多种方法可以解决。
135135
136- 这里重要的是函数近似方案不仅要对每个 $v$产生良好的近似,而且还要能够很好地配合上述更广泛的迭代算法 。
136+ 对于函数近似方案,我们需要考虑两个关键点:一是要能够准确地近似每个 $v$,二是要能够有效地融入到整个迭代算法中 。
137137
138- 从这两个方面来看,分段线性插值是一个不错的选择 。
138+ 从这两个方面来看,连续分段线性插值法是一个不错的选择 。
139139
140140这种方法
141141
142- 1 . 能够很好地配合值函数迭代(参见{cite}` gordon1995stable ` 或{cite}` stachurski2008continuous ` )且
143- 1 . 能保持有用的形状特性 ,如单调性和凹凸性。
142+ 1 . 能够很好地配合值函数迭代(参见{cite}` gordon1995stable ` 或{cite}` stachurski2008continuous ` )
143+ 1 . 能保持关键的形状特性 ,如单调性和凹凸性。
144144
145- 线性插值将使用 [ numpy.interp] ( https://numpy.org/doc/stable/reference/generated/numpy.interp.html ) 来实现。
145+ 线性插值将通过 [ numpy.interp] ( https://numpy.org/doc/stable/reference/generated/numpy.interp.html ) 来实现。
146146
147147下图展示了在网格点$0, 0.2, 0.4, 0.6, 0.8, 1$上对任意函数进行分段线性插值的情况。
148148
@@ -159,8 +159,8 @@ def Af(x):
159159
160160fig, ax = plt.subplots()
161161
162- ax.plot(f_grid, f(f_grid), 'b-', label='true function ')
163- ax.plot(f_grid, Af(f_grid), 'g-', label='linear approximation ')
162+ ax.plot(f_grid, f(f_grid), 'b-', label='真实函数 ')
163+ ax.plot(f_grid, Af(f_grid), 'g-', label='线性近似 ')
164164ax.vlines(c_grid, c_grid * 0, f(c_grid), linestyle='dashed', alpha=0.5)
165165
166166ax.legend(loc="upper center")
@@ -171,11 +171,11 @@ plt.show()
171171
172172## 实现
173173
174- 第一步是为具有分离和连续工资分布的McCall模型构建一个即时编译类 。
174+ 第一步,是为具有离职情况和连续工资分布的McCall模型构建一个jit类 。
175175
176- 在本应用中 ,我们将效用函数设定为对数函数,即$u(c) = \ln c$。
176+ 在这个应用中 ,我们将效用函数设定为对数函数,即$u(c) = \ln c$。
177177
178- 我们将为工资采用对数正态分布,当$z$为标准正态分布且$\mu, \sigma$为参数时,$ w = \exp(\mu + \sigma z)$。
178+ 我们将采用对数正态分布来描述工资水平,其具体形式为$ w = \exp(\mu + \sigma z)$,其中$z$服从标准正态分布,$\mu, \sigma$为模型参数 。
179179
180180``` {code-cell} ipython3
181181@jit
@@ -186,15 +186,15 @@ def lognormal_draws(n=1000, μ=2.5, σ=0.5, seed=1234):
186186 return w_draws
187187```
188188
189- 这是我们的类。
189+ 以下是类的定义:
190190
191191``` {code-cell} ipython3
192192mccall_data_continuous = [
193193 ('c', float64), # 失业补偿
194- ('α', float64), # 工作分离率
194+ ('α', float64), # 离职率
195195 ('β', float64), # 折现因子
196196 ('w_grid', float64[:]), # 用于拟合VFI的网格点
197- ('w_draws', float64[:]) # 用于蒙特卡洛的工资抽样
197+ ('w_draws', float64[:]) # 用于蒙特卡洛方法的工资抽样
198198]
199199
200200@jitclass(mccall_data_continuous)
@@ -221,10 +221,10 @@ class McCallModelContinuous:
221221 w = self.w_grid
222222 u = lambda x: np.log(x)
223223
224- # 对数组表示的值函数进行插值
224+ # 对用数组表示的值函数进行插值
225225 vf = lambda x: np.interp(x, w, v)
226226
227- # 使用蒙特卡洛方法评估积分来更新d
227+ # 使用蒙特卡洛方法进行积分估值来更新d
228228 d_new = np.mean(np.maximum(vf(self.w_draws), u(c) + β * d))
229229
230230 # 更新v
@@ -261,9 +261,9 @@ def solve_model(mcm, tol=1e-5, max_iter=2000):
261261 return v, d
262262```
263263
264- 这是一个函数 ` compute_reservation_wage ` ,它接收一个` McCallModelContinuous ` 实例并返回相应的保留工资。
264+ 以下是一个函数 ` compute_reservation_wage ` ,它接收一个` McCallModelContinuous ` 实例并返回相应的保留工资。
265265
266- 如果对所有的w都有$ v(w) < h$,那么函数返回np .inf
266+ 如果对所有的$w$都有$ v(w) < h$,那么函数返回 ` np .inf` 。
267267
268268``` {code-cell} ipython3
269269@jit
@@ -272,7 +272,7 @@ def compute_reservation_wage(mcm):
272272 通过寻找最小的满足v(w) >= h的w,
273273 计算McCall模型实例的保留工资。
274274
275- 如果不存在这样的w,则w_bar被设为np .inf。
275+ 如果不存在这样的w,那么w_bar就被设为np .inf。
276276 """
277277 u = lambda x: np.log(x)
278278
@@ -288,25 +288,25 @@ def compute_reservation_wage(mcm):
288288 return w_bar
289289```
290290
291- 这些练习要求你探索解决方案以及它如何随参数变化 。
291+ 下面的练习中我们探究保留工资随参数变化的情况 。
292292
293293## 练习
294294
295295``` {exercise}
296296:label: mfv_ex1
297297
298- 使用上面的代码探索当工资参数 $\mu$ 发生变化时,保留工资会发生什么变化。
298+ 使用上面的代码来探究当工资参数 $\mu$ 发生变化时,保留工资会发生什么变化。
299299
300- 使用默认参数和 `mu_vals = np.linspace(0.0, 2.0, 15)` 中的 $\mu$ 值 。
300+ 使用默认参数以及 `mu_vals = np.linspace(0.0, 2.0, 15)` 中 $\mu$ 的值 。
301301
302- 保留工资的变化是否如你所预期 ?
302+ 保留工资的变化是否符合你的预期 ?
303303```
304304
305305``` {solution-start} mfv_ex1
306306:class: dropdown
307307```
308308
309- 这是一个解决方案
309+ 这是一种答案
310310
311311``` {code-cell} ipython3
312312mcm = McCallModelContinuous()
@@ -320,41 +320,48 @@ for i, m in enumerate(mu_vals):
320320 w_bar = compute_reservation_wage(mcm)
321321 w_bar_vals[i] = w_bar
322322
323- ax.set(xlabel='mean ', ylabel='reservation wage ')
324- ax.plot(mu_vals, w_bar_vals, label=r'$\bar w$ as a function of $\mu$')
323+ ax.set(xlabel='均值 ', ylabel='保留工资 ')
324+ ax.plot(mu_vals, w_bar_vals, label=r'$\bar w$ 随 $\mu$ 的变化 ')
325325ax.legend()
326326
327327plt.show()
328328```
329329
330- 不出所料,当报价分布向右偏移时 ,求职者更倾向于等待。
330+ 不出所料,当工资报价分布向右偏移时 ,求职者更倾向于等待。
331331
332332``` {solution-end}
333333```
334334
335335``` {exercise}
336336:label: mfv_ex2
337337
338- 让我们现在来考虑求职者如何对波动性的增加做出反应 。
338+ 现在我们来考虑求职者在面对波动性增加时,会做出怎样的反应 。
339339
340- 为了理解这一点,请计算当工资报价分布在 $(m - s, m + s)$ 上均匀分布,且 $s$ 变化时的保留工资 。
340+ 为了理解这一点,请计算当工资报价在 $(m - s, m + s)$ 上均匀分布且 $s$ 会变化时的保留工资 。
341341
342- 这里的想法是我们保持均值不变,但扩大分布范围 。
342+ 这里的想法是我们保持均值不变,但扩大支撑集 。
343343
344- (这是一种*均值保持扩散 *。)
344+ (这是一种*均值保留展开 *。)
345345
346346使用 `s_vals = np.linspace(1.0, 2.0, 15)` 和 `m = 2.0`。
347347
348- 说明你预期保留工资如何随 $s$ 变化。
348+ 在分析保留工资如何随 $s$ 变化之前,让我们先思考一下:
349349
350- 现在计算它。结果是否如你所预期?
350+ 当工资分布的波动性增加时,求职者面临两个相反的影响:
351+
352+ 1. 更高的不确定性可能会让求职者倾向于接受当前工作机会,因为这提供了确定性收入
353+ 2. 但另一方面,更大的波动性也意味着出现高工资的机会增加了
354+
355+ 你认为哪个影响会占主导地位?保留工资会随着 $s$ 的增加而上升还是下降?
356+
357+ 现在,请计算它。结果是否符合你的预期?
351358```
352359
353360``` {solution-start} mfv_ex2
354361:class: dropdown
355362```
356363
357- 这是一个解决方案
364+ 这是其中一种解法
358365
359366``` {code-cell} ipython3
360367mcm = McCallModelContinuous()
@@ -371,7 +378,7 @@ for i, s in enumerate(s_vals):
371378 w_bar_vals[i] = w_bar
372379
373380ax.set(xlabel='波动性', ylabel='保留工资')
374- ax.plot(s_vals, w_bar_vals, label=r'工资波动性函数中的 $\bar w$')
381+ ax.plot(s_vals, w_bar_vals, label=r'将工资波动性作为自变量的 $\bar w$')
375382ax.legend()
376383
377384plt.show()
@@ -382,7 +389,7 @@ plt.show()
382389
383390人们可能会认为,更高的波动性会使求职者更倾向于接受给定的工作机会,因为接受工作代表确定性,而等待则意味着风险。
384391
385- 但求职就像持有期权:劳动者只面临上行风险 (因为在自由市场中,没有人可以强迫他们接受不好的工作机会)。
392+ 但求职就像持有期权:工人只面临上行风险 (因为在自由市场中,没有人可以强迫他们接受不好的工作机会)。
386393
387394更大的波动性意味着更高的上行潜力,这会鼓励求职者继续等待。
388395
0 commit comments