The income tax payable if tax settings are changed.

model_income_tax(sample_file, baseline_fy, n_dependants = 0L,
  elasticity_of_taxable_income = NULL, ordinary_tax_thresholds = NULL,
  ordinary_tax_rates = NULL, medicare_levy_taper = NULL,
  medicare_levy_rate = NULL, medicare_levy_lower_threshold = NULL,
  medicare_levy_upper_threshold = NULL,
  medicare_levy_lower_sapto_threshold = NULL,
  medicare_levy_upper_sapto_threshold = NULL,
  medicare_levy_lower_family_threshold = NULL,
  medicare_levy_upper_family_threshold = NULL,
  medicare_levy_lower_family_sapto_threshold = NULL,
  medicare_levy_upper_family_sapto_threshold = NULL,
  medicare_levy_lower_up_for_each_child = NULL, lito_max_offset = NULL,
  lito_taper = NULL, lito_min_bracket = NULL, lito_multi = NULL,
  Budget2018_lamington = FALSE, Budget2019_lamington = FALSE,
  Budget2018_lito_202223 = FALSE, Budget2018_watr = FALSE,
  Budget2019_watr = FALSE, sapto_eligible = NULL,
  sapto_max_offset = NULL, sapto_lower_threshold = NULL,
  sapto_taper = NULL, sapto_max_offset_married = NULL,
  sapto_lower_threshold_married = NULL, sapto_taper_married = NULL,
  sbto_discount = NULL, cgt_discount_rate = NULL,
  calc_baseline_tax = TRUE, return. = c("sample_file", "tax",
  "sample_file.int"), clear_tax_cols = TRUE,
  warn_upper_thresholds = TRUE, .debug = FALSE)

Arguments

sample_file

A sample file having at least as many variables as the 2012-13 sample file.

baseline_fy

If a parameter is not selected, the parameter's value in this tax year is used.

Must be a valid tax year and one for which income_tax has been programmed.

n_dependants

The number of dependants for each entry in sample_file.

elasticity_of_taxable_income

Either NULL (the default), or a numeric vector the same length of sample_file (or length-1) providing the elasticity of taxable income for each observation in sample_file; $$\frac{\Delta z / z}{\Delta \tau / (1 - \tau)}$$ where \(z\) is taxable income and \(\tau\) is tax payable.

For example, if, for a given taxpayer, the tax settings would otherwise result in a 2% decrease of disposable income under the tax settings to be modelled, and elasticity_of_taxable_income is set to 0.1, the Taxable_Income is reduced by 0.2% before the tax rates are applied.

If NULL, an elasticity of 0 is used.

ordinary_tax_thresholds

A numeric vector specifying the lower bounds of the brackets for "ordinary tax" as defined by the Regulations. The first element should be zero if there is a tax-free threshold.

ordinary_tax_rates

The marginal rates of ordinary tax. The first element should be zero if there is a tax-free threshold. Since the temporary budget repair levy was imposed on a discrete tax bracket when it applied, it is not included in this function.

medicare_levy_taper

The taper that applies between the _lower and _upper thresholds.

medicare_levy_rate

The ordinary rate of the Medicare levy for taxable incomes above medicare_levy_upper_threshold.

medicare_levy_lower_threshold

Minimum taxable income at which the Medicare levy will be applied.

medicare_levy_upper_threshold

Minimum taxable income at which the Medicare levy will be applied at the full Medicare levy rate (2% in 2015-16). Between this threshold and the medicare_levy_lower_threshold, a tapered rate applies, starting from zero and climbing to medicare_levy_rate.

medicare_levy_lower_sapto_threshold, medicare_levy_upper_sapto_threshold

The equivalent values for SAPTO-eligible individuals (not families).

medicare_levy_lower_family_threshold, medicare_levy_upper_family_threshold

The equivalent values for families.

medicare_levy_lower_family_sapto_threshold, medicare_levy_upper_family_sapto_threshold

The equivalent values for SAPTO-eligible individuals in a family.

medicare_levy_lower_up_for_each_child

The amount to add to the _family_thresholds for each dependant child.

lito_max_offset

The maximum offset available for low incomes.

lito_taper

The taper to apply beyond lito_min_bracket.

lito_min_bracket

The taxable income at which the value of the offset starts to reduce (from lito_max_offset).

lito_multi

A list of two components, named x and y, giving the value of a replacement for lito at specified points, which will be linked by a piecewise linear curve between the points specified. For example, to mimic LITO in 2015-16 (when the offset was \$445 for incomes below \$37,000, and afterwards tapered off to \$66,667), one would use lito_multi = list(x = c(-Inf, 37e3, 200e3/3, Inf), y = c(445, 445, 0, 0)). The reason the argument ends with multi is that it is intended to extend the original parameters of LITO so that multiple kinks (including ones of positive and negative gradients) can be modelled.

Budget2018_lamington

logical; default is `FALSE`. If set to `TRUE`, calculates the amount that taxpayers would be entitled to under the Low and Middle Income Tax Offset as contained in the 2018 Budget.

Budget2019_lamington

logical; default is `FALSE`. If set to `TRUE`, calculates the amount that taxpayers would be entitled to under the Low and Middle Income Tax Offset as amended by the 2019 Budget.

Budget2018_lito_202223

The LITO proposed for 2022-23 proposed in the 2018 Budget.

Budget2018_watr

logical; default is `FALSE`. If set to `TRUE`, calculates the "Working Australian Tax Refund" as proposed in the Labor Opposition Leader's Budget Reply Speech 2018.

Budget2019_watr

logical; default is `FALSE`. If set to `TRUE`, calculates the "Working Australian Tax Refund" as revised in the Labor Opposition Leader's Budget Reply Speech 2019.

sapto_eligible

Whether or not each taxpayer in sample_file is eligible for SAPTO. If NULL, the default, then eligibility is determined by age_range in sample_file; i.e., if age_range <= 1 then the taxpayer is assumed to be eligible for SAPTO.

sapto_max_offset

The maximum offset available through SAPTO.

sapto_lower_threshold

The threshold at which SAPTO begins to reduce (from sapto_max_offset).

sapto_taper

The taper rate beyond sapto_lower_threshold.

sapto_max_offset_married, sapto_lower_threshold_married, sapto_taper_married

As above, but applied to members of a couple

sbto_discount

The tax_discount in small_business_tax_offset.

cgt_discount_rate

(numeric(1)) The capital gains tax discount rate, currently 50%.

calc_baseline_tax

(logical, default: TRUE) Should the income tax in baseline_fy be included as a column in the result?

return.

What should the function return? One of tax, sample_file, or sample_file.int. If tax, the tax payable under the settings; if sample_file, the sample_file, but with variables tax and possibly new_taxable_income; if sample_file.int, same as sample_file but new_tax is coerced to integer.

clear_tax_cols

If TRUE, the default, then return. = sample_file implies any columns called new_tax or baseline_tax in sample_file are dropped silently.

warn_upper_thresholds

If TRUE, the default, then any inconsistency between baseline_fy and the upper thresholds result in a warning. Set to FALSE, if the lower_thresholds may take priority.

.debug

Return a data.table of new_tax. Experimental so cannot be relied in future versions.

Examples

library(data.table) library(hutils) # With new tax-free threshold of $20,000: if (requireNamespace("taxstats", quietly = TRUE)) { library(taxstats) library(magrittr) model_income_tax(sample_file_1314, "2013-14", ordinary_tax_thresholds = c(0, 20e3, 37e3, 80e3, 180e3)) %>% select_grep("tax", "Taxable_Income") }
#> #> Attaching package: 'magrittr'
#> The following objects are masked from 'package:testthat': #> #> equals, is_less_than, not
#> Untaxed_othr_pnsn_amt Cost_tax_affairs_amt Spouse_adjusted_taxable_inc #> 1: 0 0 0 #> 2: 0 336 0 #> 3: 0 0 0 #> 4: 0 138 19914 #> 5: 0 61 0 #> --- #> 258770: 0 383 178171 #> 258771: 0 0 144777 #> 258772: 0 241 24200 #> 258773: 0 0 0 #> 258774: 0 0 0 #> Taxable_Income baseline_tax new_tax #> 1: 4800 0 0.000 #> 2: 126122 36503 36161.970 #> 3: 39742 4655 4313.410 #> 4: 108123 29574 29232.355 #> 5: 85957 21040 20698.445 #> --- #> 258770: 24462 1111 769.710 #> 258771: 37055 3701 3359.525 #> 258772: 45024 6530 6188.520 #> 258773: 5134 0 0.000 #> 258774: 46368 7007 6665.640