R/model_mahlkow_wanner_2021.R
mahlkow_wanner_2021.Rd`mahlkow_wanner_2021()` updates the equilibrium to a counterfactual situation with new trade costs, a carbon tax in a climate club and a carbon border adjustment (CBAM). It extends [caliendo_parro_2015()]: without a carbon policy it solves the same equilibrium with the same algorithm.
mahlkow_wanner_2021(input, settings)List of list of new equilibrium `output`.
**Carbon tax.** Using one unit of sector-`s` goods emits `carbon_intensity[s]` units of carbon, whether a firm uses the goods as an intermediate input or a household consumes them. This is the carbon released by burning the goods, so `carbon_intensity` is non-zero only for fossil-fuel sectors. Production-based intensities (the emissions of the producing sector per unit of its output) do not fit this definition. A member `n` of the climate club levies the carbon tax per unit of carbon on all domestic use of these goods, domestic and imported alike. The tax is a wedge `tax[n, s]` on the price of sector-`s` goods in `n`: `tax_new[n, s] = tax_new0[n, s] + carbon_tax * carbon_intensity[s] / price_new[n, s]`, where `tax_new0` is the exogenous tax (scenario `tax_new`, default `tax`) and `price_new = price * price_change` is the endogenous price level of sector-`s` goods in `n`. The carbon tax is a specific tax, so the initial price levels `price` set its ad-valorem equivalent. `carbon_tax`, `price` and `value_added` must therefore use the same currency unit. Because world value added is the numeraire, the carbon tax is in units of baseline currency. Non-members keep `tax_new0`.
The carbon tax adds to the exogenous wedge `tax_new0`. If the baseline wedge `tax` already contains a carbon price `t0`, a scenario with the new carbon price `t1` therefore sets `tax_new = 1` (it removes the old wedge) and `carbon_tax = t1`. With `tax_new` left at its default `tax`, the new carbon price would come on top of the old one.
Expenditure `expenditure` (`X[n, s]`) includes the tax. Firms pay `tax * price` for their intermediate inputs, so the input-cost change is `w^beta * prod_k (tax_change[n, k] * price_change[n, k])^((1 - beta) * gamma[k, s])`. Suppliers receive `X[n, s] / tax[n, s]`, so trade flows are `trade_share[i, n, s] * X[n, s] / tax[n, s]`, and the tax revenue `sum_s (tax[n, s] - 1) / tax[n, s] * X[n, s]` is part of income. Households also pay the tax, so [process_results()] reports the consumer price index `prod_s (tax_change[n, s] * price_change[n, s])^alpha[n, s]`.
**Border carbon adjustment.** Producing one unit of value of sector `s` in country `i` embodies the carbon `embodied[i, s] = sum_k carbon_intensity[k] / (tax_new[i, k] * price_new[i, k]) * (1 - beta[i, s]) * gamma[i, k, s]` of its intermediate inputs. This counts only the carbon in the direct intermediate inputs, not the carbon of earlier stages, such as the fuel burned to generate purchased electricity. The carbon tax, in contrast, raises the costs of club producers through all stages of the supply chain. With `scenario_carbon_tariff = TRUE`, club members levy the carbon tax on this embodied carbon on imports from non-members in the sectors `cbam_sector`: `tariff_new[i, n, s] = tariff_new0[i, n, s] + carbon_tax * embodied[i, s]`. With `scenario_export_rebate = TRUE`, club members refund it on their exports to non-members: `export_subsidy_new[i, n, s] = export_subsidy_new0[i, n, s] - carbon_tax * embodied[i, s]`. `tariff_new0` and `export_subsidy_new0` are the exogenous scenario values. The tax, the border tariffs and the export rebates depend on prices, so the solver updates them in every iteration and returns their equilibrium values as `tax_new`, `tariff_new` and `export_subsidy_new`.
**Inputs.** Besides the inputs of [caliendo_parro_2015()] (including `productivity_change`, `population_change` and `global_value_added_change`), the model reads these optional variables. Put the policy variables into the `model_scenario`.
Initial price levels, dimensions: country x sector. Required for a carbon tax.
Carbon released by burning one unit of sector goods, dimension: sector; non-zero only for fossil-fuel sectors. Required for a carbon tax.
Initial and exogenous new tax wedges, dimensions: country x sector (default 1).
Carbon tax per unit of carbon, a single number (default 0, no carbon policy).
Members of the climate club: a character vector of country codes, or a 0/1 (or logical) indicator by country, as a named vector or as a data.table with columns `country` and `value` (default: all countries).
Sectors with border carbon adjustment, in the same forms with `sector` (default: all sectors).
`TRUE` (or 1) for border carbon tariffs (default `FALSE`).
`TRUE` (or 1) for export rebates (default `FALSE`).
An unknown country or sector code in `countries_climate_club` or `cbam_sector` is an error.
The settings are those of [caliendo_parro_2015()]: `vfactor`, `max_inner_iterations`, `trade_balance_rule` (`"fixed"`, `"fixed_country_share"`, `"fixed_global_share"` or `"zero"`, see [update_trade_balance()]), `tolerance_output`, `convergence_method`, `require_inner_convergence` and `additional_output_variables`. As in [caliendo_parro_2015()], world value added is the numeraire.
Mahlkow, H., Petersen, T. and Wanner, J. (2021). Folgen eines höheren CO2-Preises in der EU – wer gewinnt, wer verliert? Wirtschaftsdienst, 101(11), 870–877. doi:10.1007/s10273-021-3048-5