If a multi-good calibration is built from a single-good calibration and meant to be equivalent to it, it isn't — unless χⁿ and χᵇ are recalibrated. The reason is one term in the household conditions that is not adjusted.
OG-Core master (59ad58d), default parameters unchanged. Rows B, C, D differ only in how the single good is counted:
|
p̃ |
r |
w |
L |
B |
| A. one good (default) |
1.00 |
0.06285 |
1.1779 |
0.3330 |
2.4590 |
| B. two identical industries, one good |
1.00 |
0.06285 |
1.1779 |
0.3330 |
2.4590 |
| C. the good split into two equal shares |
2.00 |
0.07560 |
1.1114 |
0.3647 |
2.3098 |
| D. as C, χ quoted in the new unit (× 2^0.5) |
2.00 |
0.06285 |
1.1779 |
0.3330 |
2.4590 |
Nothing real changes in C, yet r moves 127 bp and labor 9.5%. D has the same p̃ as C; the only difference is that χ was rescaled — and the economy is back to B.
Cause. At unit prices, Eq. (20) gives p̃ = ∏ αᵢ^(−αᵢ) — 1 for one good, 2 for two equal shares. So splitting the good halves the unit of composite consumption and doubles its price. In the labor condition, Eq. (36), those two variables sit on the left side only:
$$\underbrace{w_t e_{j,s}(1-\tau^{mtrx}_{s,t})}_{\times 1}\cdot\underbrace{\frac{1}{\textcolor{red}{p_t}}}_{\times \frac{1}{2}}\cdot\underbrace{(\textcolor{red}{c_{j,s,t}})^{-\sigma}}_{\times 2^{\sigma}} = \underbrace{e^{g_y(1-\sigma)}\chi^n_s\left(\frac{b}{\tilde l}\right)\left(\frac{n_{j,s,t}}{\tilde l}\right)^{\upsilon-1}\left[1-\left(\frac{n_{j,s,t}}{\tilde l}\right)^{\upsilon}\right]^{\frac{1-\upsilon}{\upsilon}}}_{\times 1}$$
$$2^{\sigma}\cdot\frac{1}{2} = 2^{\sigma-1} = 1.41 \qquad (\sigma = 1.5)$$
After the split, the left side of Eq. (36) is 1.41 times what it was, even though the household is doing exactly the same thing. The right side has no consumption and no price in it, so it is the same number as before. The two sides no longer match, so the household changes how much it works until they do. The same happens to the savings conditions, Eqs. (37) and (38), through χᵇ.
Why the right side does not adjust: χⁿ and χᵇ are numbers that were calibrated when the model had one good, so they are in "one-good" units. The code uses those same numbers no matter how many goods the model has.
Fix. Make the price of composite consumption equal 1 whenever all goods cost 1, for any number of goods. That is Eq. (20) without the division by αᵢ:
$$p_t = \prod_{i=1}^{I}\left([1+\tau^c_{i,t}] p_{i,t}\right)^{\alpha_i}$$
In code: remove / alpha_c at ogcore/aggregates.py lines 678 and 681. With one good this is exactly the current formula, so nothing that works today changes. With more goods, the unit of composite consumption no longer depends on how many goods there are, so the calibrated χ keep their meaning.
Reproduce. Row A is the baseline of examples/run_ogcore_example.py. For the other rows, replace the reform's og_spec.update({"cit_rate": [[0.35]]}) with:
# B: two identical industries, one good
og_spec.update({"M": 2, "gamma": [0.35, 0.35], "epsilon": [1.0, 1.0], "gamma_g": [0.0, 0.0],
"I": 1, "io_matrix": [[0.5, 0.5]]})
# C: as B, the good split into two equal shares
og_spec.update({"M": 2, "gamma": [0.35, 0.35], "epsilon": [1.0, 1.0], "gamma_g": [0.0, 0.0],
"I": 2, "alpha_c": [0.5, 0.5], "c_min": [0.0, 0.0], "io_matrix": [[1.0, 0.0], [0.0, 1.0]]})
# D: C, plus chi in the new unit
og_spec.update({"chi_n": (np.array(p.chi_n[0]) * 2**0.5).tolist(),
"chi_b": (np.array(p.chi_b) * 2**0.5).tolist()})
If a multi-good calibration is built from a single-good calibration and meant to be equivalent to it, it isn't — unless χⁿ and χᵇ are recalibrated. The reason is one term in the household conditions that is not adjusted.
OG-Core master (59ad58d), default parameters unchanged. Rows B, C, D differ only in how the single good is counted:
Nothing real changes in C, yet r moves 127 bp and labor 9.5%. D has the same p̃ as C; the only difference is that χ was rescaled — and the economy is back to B.
Cause. At unit prices, Eq. (20) gives p̃ = ∏ αᵢ^(−αᵢ) — 1 for one good, 2 for two equal shares. So splitting the good halves the unit of composite consumption and doubles its price. In the labor condition, Eq. (36), those two variables sit on the left side only:
After the split, the left side of Eq. (36) is 1.41 times what it was, even though the household is doing exactly the same thing. The right side has no consumption and no price in it, so it is the same number as before. The two sides no longer match, so the household changes how much it works until they do. The same happens to the savings conditions, Eqs. (37) and (38), through χᵇ.
Why the right side does not adjust: χⁿ and χᵇ are numbers that were calibrated when the model had one good, so they are in "one-good" units. The code uses those same numbers no matter how many goods the model has.
Fix. Make the price of composite consumption equal 1 whenever all goods cost 1, for any number of goods. That is Eq. (20) without the division by αᵢ:
In code: remove
/ alpha_catogcore/aggregates.pylines 678 and 681. With one good this is exactly the current formula, so nothing that works today changes. With more goods, the unit of composite consumption no longer depends on how many goods there are, so the calibrated χ keep their meaning.Reproduce. Row A is the baseline of
examples/run_ogcore_example.py. For the other rows, replace the reform'sog_spec.update({"cit_rate": [[0.35]]})with: