R/calcFETaxes.R

Defines functions calcFETaxes

Documented in calcFETaxes

#' Calculate FETaxes
#'
#' Reads in the data of the source IIASA_subs_taxes, by country. and
#' calculate taxes at the final energy delivery level to the end-use sectors
#' (industry, buildings and transport). Regional aggregation is done via the
#' respective energy quantities as weights.
#'
#' @param subtype choose between tax rates ("taxes") or subsidies rate ("subsidies") output
#'
#' @return MAgPIE object
#' @author Christoph Bertram and Renato Rodrigues
#' @seealso \code{\link{calcOutput}}, \code{\link{readIIASA_subs_taxes}},
#' \code{\link{convertIIASA_subs_taxes}}
#' @examples
#' \dontrun{
#' calcOutput("FETaxes")
#' }
#'
calcFETaxes <- function(subtype = "taxes") {
  # read in taxes/subsidies values
  if (subtype == "taxes") {
    tax <- readSource("IIASA_subs_taxes", subtype = "tax_rate")
    desc <- "Aggregated final energy tax data from country level data provided by IIASA (Jessica Jewell)"
  } else if (subtype == "subsidies") {
    tax <- -readSource("IIASA_subs_taxes", subtype = "subsidies_bulk")
    desc <- "Aggregated final energy subsidy data from country level data provided by IIASA (Jessica Jewell)"
  } else {
    stop("the subtype must be either 'taxes' or 'subsidies'")
  }

  # read in energy values
  energy <- readSource("IIASA_subs_taxes", subtype = "energy")
  # energy = 0 for regions/carriers with no information on subsidies, so that they are not considered in the weighting
  energy[is.na(tax)] <- 0
  # taxes without value are considered to be zero
  tax[is.na(tax)] <- 0
  # energy without value is considered to be zero
  energy[is.na(energy)] <- 0

  tax_map <- list(
    "indst" = c(
      "fegas" = "IN-Naturalgas",
      "feh2s" = "IN-Naturalgas",
      "fehos" = "IN-Oil",
      "fesos" = "IN-Coal",
      "feels" = "IN-Electricity",
      "fehes" = "TRP-Oilproducts"
    ),
    "build" = c(
      "fegas" = "RC-Naturalgas",
      "feh2s" = "RC-Naturalgas",
      "fehos" = "RC-Heatingoil",
      "fesos" = "RC-Coal",
      "feels" = "RC-Electricity",
      "fehes" = "TRP-Oilproducts"
    ),
    "trans" = c(
      "fepet" = "TRP-Oilproducts",
      "fedie" = "TRP-Oilproducts",
      "fegat" = "TRP-Oilproducts",
      "feh2t" = "TRP-Oilproducts",
      "feelt" = "RC-Electricity"
    )
  )


  Rtax <- Renergy <- NULL
  for (sector in c("indst", "build", "trans")) {
    Rtax <- mbind(Rtax,
                  add_dimension(setNames(tax[, , tax_map[[sector]]], names(tax_map[[sector]])),
                                dim = 3.1, add = "sector", nm = sector))
    Renergy <- mbind(Renergy,
                     add_dimension(setNames(energy[, , tax_map[[sector]]], names(tax_map[[sector]])),
                                dim = 3.1, add = "sector", nm = sector))
  }

  # convert original data from bulk values to subsidies rates for the case of subsidies
  if (subtype == "subsidies") {
    Rtax <- Rtax / Renergy * 1e9 # converting from billion$/GJ to $/GJ
    Rtax[is.na(Rtax)] <- 0
  }

  # Ex-post tax rate adjustments
  # feelt tax rate as weighted average on industry and buildings
  Rtax[, , "trans.feelt"] <- (Rtax[, , "indst.feels"] * Renergy[, , "indst.feels"] + Rtax[, , "build.feels"] *
                                Renergy[, , "build.feels"]) / (Renergy[, , "indst.feels"] + Renergy[, , "build.feels"])
  Rtax[, , "trans.feelt"][is.na(Rtax[, , "trans.feelt"])] <- 0
  ## feh2t tax rate as same as feelt
  Rtax[, , "trans.feh2t"] <- Rtax[, , "trans.feelt"]
  # disabling tax for fehes and feh2t
  Rtax[, , c("fehes")] <- 0
  # do not apply gas subsidies to H2
  if (subtype == "subsidies") {
    Rtax[, , c("feh2s")] <- 0
  }

  # Ex-post energy weight adjustments
  Renergy[, , "build.feh2s"] <- Renergy[, , "build.fegas"]
  Renergy[, , "indst.feh2s"] <- Renergy[, , "indst.fegas"]
  Renergy[, , "trans.feelt"] <- Renergy[, , "build.feels"]
  Renergy[, , "trans.feh2t"] <- Renergy[, , "build.feels"]
  Renergy[, , c("fehes")] <- 0

  # cdr sector taxes equal to industry taxes
  cdrTax <- Rtax[, , "indst"]
  getNames(cdrTax, dim = 1) <- "cdr"
  Rtax <- mbind(Rtax, cdrTax)
  cdrEnergy <- Renergy[, , "indst"]
  getNames(cdrEnergy, dim = 1) <- "cdr"
  Renergy <- mbind(Renergy, cdrEnergy)

  # bunkers sector taxes equal to transport taxes
  bunkersTax <- Rtax[, , "trans"]
  getNames(bunkersTax, dim = 1) <- "bunkers"
  Rtax <- mbind(Rtax, bunkersTax)
  bunkersEnergy <- Renergy[, , "trans"]
  getNames(bunkersEnergy, dim = 1) <- "bunkers"
  Renergy <- mbind(Renergy, bunkersEnergy)

  # set base year
  getYears(Rtax) <- "2005"
  getYears(Renergy) <- "2005"

  # Weights do not take into account the differentiation by services. So if
  # the tax in a Cooling country is very high and the tax in a country in the
  # same region using a lot of electricity for cooking is low, the tax for
  # cooling and cooking with electricity will be equal where it should be high
  # for cooling and low for cooking
  # So, we can assume that countries are app. similar in a given region

  list(x = Rtax, weight = Renergy, unit = "US$2017/GJ", description = desc)
}
pik-piam/mrremind documentation built on April 12, 2025, 12:02 a.m.