税收与补贴
税收在买方支付的价格与卖方收到的价格之间形成楔子。无论向买方或卖方征收,楔子、数量与两个价格都相同 Mankiw (2021)。
情景
TaxScenario(
tax_type,
amount,
tax_on=TaxOn.PRODUCER,
anchor_mode=AnchorMode.NONE
)
FIXED_TAX 或 PER_UNIT_TAX:每单位征收固定金额,曲线平移 amount;AD_VALOREM_TAX:依价格征收比率,曲线旋转。两种从量形式的均衡相同。
每单位税额,或从价税的税率(0.35 即 35%);税率必须大于 \(-1\)。
法定纳税人:PRODUCER 使供给上移,CONSUMER 使需求下移。
绘制从价税时,NONE 以截距为轴旋转曲线,BASELINE_EQUILIBRIUM 以未征税的均衡点为轴。
一项税收,位于 principle_viz.policy.tax。
求解
solve_tax_equilibrium(
demand,
supply,
scenario
)
征税后的市场,返回 TaxEquilibriumResult:q_star、consumer_price、producer_price、tax_wedge(两价之差)与 tax_revenue(楔子乘以数量)。
from principle_viz import solve_tax_equilibrium
from principle_viz.policy.tax import TaxOn, TaxScenario, TaxType
tax = TaxScenario(TaxType.PER_UNIT_TAX, 3.0, TaxOn.PRODUCER)
print(solve_tax_equilibrium(demand, supply, tax))
# TaxEquilibriumResult(q_star=2.5, consumer_price=7.5,
# producer_price=4.5, tax_wedge=3.0,
# tax_revenue=7.5)
TaxOn.CONSUMER 的结果相同。税率为 \(r\) 的从价税使消费者价格等于生产者价格的 \((1 + r)\) 倍。
compare_tax_scenario(
demand,
supply,
scenario
)
并列征税前后的市场:baseline_equilibrium、post_tax、变动量 delta_q、delta_p_consumer、delta_p_producer,以及各自的方向("left"/"right"、"up"/"down")。
build_tax_visual_guide(
demand,
supply,
scenario
)
征税曲线的几何信息:base_curve、taxed_curve、curve_role("supply" 或 "demand")与 transform_kind("shift" 或 "rotation")。add_tax_transform() 依此绘图。
图形
MarketFigure.add_tax_transform(
demand,
supply,
scenario,
q_max
)
画出征税后的曲线并命名为 \(S + t\) 或 \(D - t\),以虚线箭头表示平移或旋转,并标出未征税的均衡(参见向卖方征收从量税。、向买方征收从价税。)。
MarketFigure.add_tax_comparison(
result,
*,
brace_side="outside",
notes=False
)
括号在坐标轴外侧("outside")或绘图区内("inside")。
在坐标轴旁说明每个标记。
标出 compare_tax_scenario() 结果的楔子:在价格轴上标 \(p_d\)(买方)、\(p_0\)(征税前)与 \(p_s\)(卖方),并以 "Tax" 括号涵盖 \(p_s\) 到 \(p_d\)。
搭配福利的福利区块(参见征税下的剩余与无谓损失。):
from principle_viz import compare_tax_scenario
from principle_viz.welfare.surplus import (
compare_surplus,
outcome_from_equilibrium,
outcome_from_tax,
)
eq = solve_equilibrium(demand, supply)
baseline = outcome_from_equilibrium(eq)
taxed = outcome_from_tax(
solve_tax_equilibrium(demand, supply, tax)
)
delta = compare_surplus(demand, supply, baseline, taxed)
# 7.5 2.25
print(delta.policy.tax_revenue, delta.deadweight_loss)
fig = MarketFigure(
x_max=12, y_max=12, title="Welfare Under a Tax"
)
fig.add_curves(demand, supply, q_max=10)
fig.add_welfare(delta.policy)
fig.add_tax_comparison(
compare_tax_scenario(demand, supply, tax)
)
fig.finalize()
补贴
SubsidyScenario(amount, subsidy_to=SubsidyTo.PRODUCER)
每单位 amount 的补贴(不得为负),发给卖方(SubsidyTo.PRODUCER)或买方(SubsidyTo.CONSUMER),位于 principle_viz.policy.subsidy。
solve_subsidy_equilibrium(
demand,
supply,
scenario
)
compare_subsidy_scenario(
demand,
supply,
scenario
)
补贴后的市场(q_star、consumer_price、producer_price、subsidy_wedge、government_expenditure),以及与自由市场的比较(baseline_equilibrium、post_subsidy、delta_q、delta_p_consumer、delta_p_producer)。在快速开始的市场中补贴 2:数量 5,买方支付 5,卖方收到 7,政府支出 10。
MarketFigure.add_subsidy_comparison(
result,
*,
brace_side="outside",
notes=False
)
以标示税收楔子的方式标出补贴楔子,加上 "Subsidy" 括号,并标示补贴成本。从量补贴与无谓损失。以 regions=("dwl",) 只为无谓损失填色,并以 visibility 隐藏部分标签(详见标签与图层)。
from principle_viz import (
SubsidyScenario,
SubsidyTo,
compare_subsidy_scenario,
)
demand = line_from_inverse(12.0, -1.0)
subsidy = SubsidyScenario(3.0, SubsidyTo.PRODUCER)
comparison = compare_subsidy_scenario(demand, supply, subsidy)
fig = MarketFigure(
x_max=12,
y_max=13,
title="Per-Unit Subsidy",
visibility={
"market.subsidy.expenditure.label": False,
"market.subsidy.wedge.label": False,
"market.subsidy.wedge.mark.p_0": False,
"market.subsidy.wedge.brace": False,
},
)