Splitting one consumption good into two identical goods changes the steady state

Đang mở
#1,218 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
57/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
backend

Hướng nghiên cứu

Read ogcore/aggregates.py around lines 678 and 681, where the issue identifies / alpha_c in the composite-consumption price formula. First run the baseline in examples/run_ogcore_example.py and reproduce the two-good case using the provided parameter changes. Done when removing those divisions preserves the one-good result and makes the split-good calibration match the equivalent one-good steady state.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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 (59ad58d7), 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()})
Ngôn ngữ chính
Python
Star
85
Fork
153
Merge trung bình
1 ngày 19 giờ
Pull request đã merge (30 ngày)
22

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của PSLmodels/OG-Core

Tất cả issue của PSLmodels/OG-Core

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.