跳转至

税收与补贴

税收在买方支付的价格与卖方收到的价格之间形成楔子。无论向买方或卖方征收,楔子、数量与两个价格都相同 Mankiw (2021)。

情景

TaxScenario(
    tax_type,
    amount,
    tax_on=TaxOn.PRODUCER,
    anchor_mode=AnchorMode.NONE
)
tax_typeTaxType

FIXED_TAX 或 PER_UNIT_TAX:每单位征收固定金额,曲线平移 amount;AD_VALOREM_TAX:依价格征收比率,曲线旋转。两种从量形式的均衡相同。

amountfloat

每单位税额,或从价税的税率(0.35 即 35%);税率必须大于 \(-1\)。

tax_onTaxOn默认值: PRODUCER

法定纳税人:PRODUCER 使供给上移,CONSUMER 使需求下移。

anchor_modeAnchorMode默认值: NONE

绘制从价税时,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
)
brace_sidestr默认值: "outside"

括号在坐标轴外侧("outside")或绘图区内("inside")。

notesbool默认值: False

在坐标轴旁说明每个标记。

标出 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,
    },
)

从量补贴与无谓损失。

评论