Skip to content
Snippets Groups Projects
paramspaces.R 2.33 KiB
Newer Older
  • Learn to ignore specific revisions
  • # This R code generates parameter spaces for the distributional
    # sensivitity analyses of the main results of Hübler et al. (2022).
    # More specifically, 1000 random draws from a +-10% interval around 
    # each of the sector-specific elasiticity estimates are generated.
    # This results in 1000 sets of sectoral parameter values to be used
    # in a parameter sweep in Snakemake.
    #
    # A separate parameter space is generated for each of the three sets
    # of sector-specific elasticity parameters present in the model:
    # - esubd(i): elasticities between domestically produced versus
    #   imported goods
    # - esubm(i): Armington elasticities
    # - esubva(j): elasticities between production factors
    
    marius-lucas braun's avatar
    marius-lucas braun committed
    library(readr)
    
    library(extrafont)
    library(openxlsx)
    library(Rcpp)
    library(tictoc)
    library(moments)
    library(confintr)
    library(stringr)
    
    marius-lucas braun's avatar
    marius-lucas braun committed
    library(dplyr)
    
    
    num_draws = 1000  # number of draws from interval
    set.seed(127)   # set random seed
    
    var = 0.1 # size of variation
    
    num_decimals = 3 # max. number of decimals (important due to file path length restrictions)
    
    # create vector of elasticity names
    elasticities = c("esubd", "esubm", "esubva")
    
    # create parameter spaces
    make_paramspace = function(elasticity_type) {
    
      # load CSV file with baseline parameter values
    
      baseline = read.csv(
        paste0("paramspaces/", elasticity_type, "_baseline.csv"),
    
      # vary baseline values by +- var %
      baseline$elasticity_minus_10p = baseline$elasticity * (1 - var)
      baseline$elasticity_plus_10p = baseline$elasticity * (1 + var)
    
      
      paramspace = data.frame(matrix(nrow = num_draws, ncol = 0))
      
    
      # generate draws from a uniform distribution of +- var % around each estimate
      make_draws = function(sector) {
        sector_draws = round(
          x = runif(
            n = nrow(paramspace),
            min = baseline["elasticity_minus_10p"][sector, ],
            max = baseline["elasticity_plus_10p"][sector, ]
          ),
          digits = num_decimals
        )
        paramspace = cbind(paramspace, sector_draws)
    
      paramspace = as.data.frame(lapply(X = 1:nrow(baseline), FUN = make_draws))
    
      
      # write parameter space to CSV file
    
      colnames(paramspace) = baseline$X...sector
    
      write.csv(
        paramspace,
    
        paste0("paramspaces/paramspace_", elasticity_type, ".csv"),
    
        row.names = FALSE
    
    marius-lucas braun's avatar
    marius-lucas braun committed
    }
    
    lapply(X = elasticities, FUN = make_paramspace)