Ejemplo n.º 1
0
def run_micro_macro(reform, user_params, guid):

    guid = ''
    start_time = time.time()

    REFORM_DIR = "./OUTPUT_REFORM_" + guid
    BASELINE_DIR = "./OUTPUT_BASELINE_" + guid

    # Add start year from reform to user parameters
    start_year = sorted(reform.keys())[0]
    user_params['start_year'] = start_year

    with open("log_{}.log".format(guid), 'w') as f:
        f.write("guid: {}\n".format(guid))
        f.write("reform: {}\n".format(reform))
        f.write("user_params: {}\n".format(user_params))
    '''
    ------------------------------------------------------------------------
        Run baseline
    ------------------------------------------------------------------------
    '''
    output_base = BASELINE_DIR
    kwargs = {
        'output_base': output_base,
        'baseline_dir': BASELINE_DIR,
        'test': True,
        'time_path': True,
        'baseline': True,
        'user_params': user_params,
        'run_micro': False,
        'guid': guid
    }
    runner(**kwargs)
    '''
    ------------------------------------------------------------------------
        Run reform
    ------------------------------------------------------------------------
    '''

    output_base = REFORM_DIR
    kwargs = {
        'output_base': output_base,
        'baseline_dir': BASELINE_DIR,
        'test': True,
        'time_path': True,
        'baseline': False,
        'reform': reform,
        'user_params': user_params,
        'guid': guid,
        'run_micro': False
    }
    runner(**kwargs)
    time.sleep(0.5)
    ans = postprocess.create_diff(baseline_dir=BASELINE_DIR,
                                  policy_dir=REFORM_DIR)
    print("total time was ", (time.time() - start_time))

    return ans
Ejemplo n.º 2
0
def run_micro_macro(reform, user_params, guid):

    guid = ''
    start_time = time.time()

    REFORM_DIR = "./OUTPUT_REFORM_" + guid
    BASELINE_DIR = "./OUTPUT_BASELINE_" + guid

    # Add start year from reform to user parameters
    start_year = sorted(reform.keys())[0]
    user_params['start_year'] = start_year

    with open("log_{}.log".format(guid), 'w') as f:
        f.write("guid: {}\n".format(guid))
        f.write("reform: {}\n".format(reform))
        f.write("user_params: {}\n".format(user_params))

    '''
    ------------------------------------------------------------------------
        Run baseline
    ------------------------------------------------------------------------
    '''
    output_base = BASELINE_DIR
    kwargs = {'output_base': output_base, 'baseline_dir': BASELINE_DIR,
              'test': True, 'time_path': True, 'baseline': True,
              'user_params': user_params, 'run_micro': False,
              'guid': guid}
    runner(**kwargs)

    '''
    ------------------------------------------------------------------------
        Run reform
    ------------------------------------------------------------------------
    '''

    output_base = REFORM_DIR
    kwargs = {'output_base': output_base, 'baseline_dir': BASELINE_DIR,
              'test': True, 'time_path': True, 'baseline': False,
              'reform': reform, 'user_params': user_params,
              'guid': guid, 'run_micro': False}
    runner(**kwargs)
    time.sleep(0.5)
    ans = postprocess.create_diff(baseline_dir=BASELINE_DIR,
                                  policy_dir=REFORM_DIR)
    print("total time was ", (time.time() - start_time))

    return ans
Ejemplo n.º 3
0
def main():
    # Define parameters to use for multiprocessing
    client = Client(processes=False)
    num_workers = min(multiprocessing.cpu_count(), 7)
    print('Number of workers = ', num_workers)
    run_start_time = time.time()

    # Grab a reform JSON file already in Tax-Calculator
    # In this example the 'reform' is a change to 2017 law (the
    # baseline policy is tax law in 2018)
    reform_url = ('https://raw.githubusercontent.com/'
                  'PSLmodels/Tax-Calculator/master/taxcalc/'
                  'reforms/2017_law.json')
    ref = Calculator.read_json_param_objects(reform_url, None)
    iit_reform = ref['policy']

    # Directories to save data
    CUR_DIR = os.path.dirname(os.path.realpath(__file__))
    base_dir = os.path.join(CUR_DIR, BASELINE_DIR, "SS")
    reform_dir = os.path.join(CUR_DIR, REFORM_DIR, "SS")

    # Set some OG model parameters
    # See default_parameters.json for more description of these parameters
    alpha_T = np.zeros(50)  # Adjusting the path of transfer spending
    alpha_T[0:2] = 0.09
    alpha_T[2:10] = 0.09 + 0.01
    alpha_T[10:40] = 0.09 - 0.01
    alpha_T[40:] = 0.09
    alpha_G = np.zeros(7)  # Adjusting the path of non-transfer spending
    alpha_G[0:3] = 0.05 - 0.01
    alpha_G[3:6] = 0.05 - 0.005
    alpha_G[6:] = 0.05
    # Also adjust the Frisch elasticity, the start year, the
    # effective corporate income tax rate, and the SS debt-to-GDP ratio
    og_spec = {
        'frisch': 0.41,
        'start_year': 2018,
        'tau_b': [0.0357],
        'debt_ratio_ss': 1.0,
        'alpha_T': alpha_T.tolist(),
        'alpha_G': alpha_G.tolist()
    }
    '''
    ------------------------------------------------------------------------
    Run baseline policy first
    ------------------------------------------------------------------------
    '''
    output_base = BASELINE_DIR
    kwargs = {
        'output_base': base_dir,
        'baseline_dir': base_dir,
        'test': False,
        'time_path': True,
        'baseline': True,
        'og_spec': og_spec,
        'guid': '_example',
        'run_micro': True,
        'data': 'cps',
        'client': client,
        'num_workers': num_workers
    }

    start_time = time.time()
    runner(**kwargs)
    print('run time = ', time.time() - start_time)
    '''
    ------------------------------------------------------------------------
    Run reform policy
    ------------------------------------------------------------------------
    '''
    # update the effective corporate income tax rate
    og_spec = {
        'frisch': 0.41,
        'start_year': 2018,
        'tau_b': [0.0595],
        'debt_ratio_ss': 1.0,
        'alpha_T': alpha_T.tolist(),
        'alpha_G': alpha_G.tolist()
    }
    output_base = REFORM_DIR
    kwargs = {
        'output_base': reform_dir,
        'baseline_dir': base_dir,
        'test': False,
        'time_path': True,
        'baseline': False,
        'og_spec': og_spec,
        'guid': '_example',
        'iit_reform': iit_reform,
        'run_micro': True,
        'data': 'cps',
        'client': client,
        'num_workers': num_workers
    }

    start_time = time.time()
    runner(**kwargs)
    print('run time = ', time.time() - start_time)

    # return ans - the percentage changes in macro aggregates and prices
    # due to policy changes from the baseline to the reform
    ans = postprocess.create_diff(baseline_dir=base_dir, policy_dir=reform_dir)

    print("total time was ", (time.time() - run_start_time))
    print('Percentage changes in aggregates:', ans)
Ejemplo n.º 4
0
def run_micro_macro(user_params,
                    reform=None,
                    baseline_dir=BASELINE_DIR,
                    reform_dir=REFORM_DIR,
                    guid='',
                    data=PUF_PATH,
                    ok_to_run_baseline=True):

    start_time = time.time()

    T_shifts = np.zeros(50)
    T_shifts[2:10] = 0.01
    T_shifts[10:40] = -0.01
    G_shifts = np.zeros(6)
    G_shifts[0:3] = -0.01
    G_shifts[3:6] = -0.005
    user_params = {
        'frisch': 0.41,
        'start_year': 2017,
        'tau_b': 0.20,
        'debt_ratio_ss': 1.0,
        'delta_tau_annual': 0.05,
        'T_shifts': T_shifts.tolist(),
        'G_shifts': G_shifts.tolist()
    }
    '''
    ------------------------------------------------------------------------
        Run baseline
    ------------------------------------------------------------------------
    '''
    print('path exists', not os.path.exists(baseline_dir), ok_to_run_baseline)
    # if not os.path.exists(baseline_dir) and ok_to_run_baseline:
    if ok_to_run_baseline:
        output_base = baseline_dir
        kwargs = {
            'output_base': baseline_dir,
            'baseline_dir': baseline_dir,
            'test': False,
            'time_path': True,
            'baseline': True,
            'analytical_mtrs': False,
            'age_specific': True,
            'user_params': user_params,
            'guid': '',
            'run_micro': False,
            'small_open': False,
            'budget_balance': False,
            'baseline_spending': False,
            'data': data,
            'client': client,
            'num_workers': 4
        }
        runner(**kwargs)
    '''
    ------------------------------------------------------------------------
        Run reform
    ------------------------------------------------------------------------
    '''
    output_base = reform_dir
    kwargs = {
        'output_base': output_base,
        'baseline_dir': baseline_dir,
        'test': False,
        'time_path': True,
        'baseline': False,
        'analytical_mtrs': False,
        'age_specific': True,
        'user_params': user_params,
        'guid': guid,
        'reform': reform,
        'run_micro': False,
        'small_open': False,
        'budget_balance': False,
        'baseline_spending': False,
        'data': data,
        'client': client,
        'num_workers': 4
    }
    runner(**kwargs)

    ans = postprocess.create_diff(baseline_dir=baseline_dir,
                                  policy_dir=reform_dir)

    print("total time was ", (time.time() - start_time))
    print('Percentage changes in aggregates:', ans)
Ejemplo n.º 5
0
def run_micro_macro(user_params):
    # Grab a reform JSON file already in Tax-Calculator
    # In this example the 'reform' is a change to 2017 law (the
    # baseline policy is tax law in 2018)
    reform_url = ('https://raw.githubusercontent.com/'
                  'PSLmodels/Tax-Calculator/master/taxcalc/'
                  'reforms/2017_law.json')
    #ref = Calculator.read_json_param_objects(reform_url, None) # Modified
    #reform = ref['policy'] # Modified

    # Define parameters to use for multiprocessing
    client = Client(processes=False)
    num_workers = 1  # multiprocessing.cpu_count()
    print('Number of workers = ', num_workers)
    start_time = time.time()

    # Set some model parameters
    # See parameters.py for description of these parameters
    alpha_T = np.ones(50) * 0.1230058215  # Modified
    alpha_G = np.ones(7) * 0.01234569933  # Modified
    small_open = False
    user_params = {
        'frisch': 0.5,
        'start_year': 2018,
        'tau_b': [(0.21 * 0.55) * (0.017 / 0.055),
                  (0.21 * 0.55) * (0.017 / 0.055)],
        'debt_ratio_ss': 2.0,
        'alpha_T': alpha_T.tolist(),
        'alpha_G': alpha_G.tolist(),
        'small_open': small_open
    }  # modified
    '''
    ------------------------------------------------------------------------
    Run baseline policy first
    ------------------------------------------------------------------------
    '''
    output_base = BASELINE_DIR
    kwargs = {
        'output_base': output_base,
        'baseline_dir': BASELINE_DIR,
        'test': False,
        'time_path': False,
        'baseline': True,
        'user_params': user_params,
        'guid': '_example',
        'run_micro': False,
        'data': 'cps',
        'client': client,
        'num_workers': num_workers
    }

    start_time = time.time()
    runner(**kwargs)
    print('run time = ', time.time() - start_time)
    '''
    ------------------------------------------------------------------------
    Run reform policy
    ------------------------------------------------------------------------
    '''
    user_params = {
        'frisch': 0.5,
        'start_year': 2018,
        'tau_b': [(0.35 * 0.55) * (0.017 / 0.055)],
        'debt_ratio_ss': 1.0,
        'alpha_T': alpha_T.tolist(),
        'alpha_G': alpha_G.tolist(),
        'small_open': small_open
    }
    output_base = REFORM_DIR
    kwargs = {
        'output_base': output_base,
        'baseline_dir': BASELINE_DIR,
        'test': False,
        'time_path': True,
        'baseline': False,
        'user_params': user_params,
        'guid': '_example',
        'reform': reform,
        'run_micro': True,
        'data': 'cps',
        'client': client,
        'num_workers': num_workers
    }

    start_time = time.time()
    runner(**kwargs)
    print('run time = ', time.time() - start_time)

    # return ans - the percentage changes in macro aggregates and prices
    # due to policy changes from the baseline to the reform
    ans = postprocess.create_diff(baseline_dir=BASELINE_DIR,
                                  policy_dir=REFORM_DIR)

    print("total time was ", (time.time() - start_time))
    print('Percentage changes in aggregates:', ans)
Ejemplo n.º 6
0
print('run time = ', time.time()-start_time)

'''
------------------------------------------------------------------------
Run reform policy
------------------------------------------------------------------------
'''
# update the effective corporate income tax rate
og_spec = {'frisch': 0.41, 'start_year': 2018,
           'tau_b': [0.0595], 'debt_ratio_ss': 1.0,
           'alpha_T': alpha_T.tolist(),
           'alpha_G': alpha_G.tolist()}
output_base = REFORM_DIR
kwargs = {'output_base': output_base, 'baseline_dir': BASELINE_DIR,
          'test': False, 'time_path': True, 'baseline': False,
          'og_spec': og_spec, 'guid': '_example',
          'iit_reform': iit_reform, 'run_micro': True, 'data': 'cps',
          'client': client, 'num_workers': num_workers}

start_time = time.time()
runner(**kwargs)
print('run time = ', time.time()-start_time)

# return ans - the percentage changes in macro aggregates and prices
# due to policy changes from the baseline to the reform
ans = postprocess.create_diff(
    baseline_dir=BASELINE_DIR, policy_dir=REFORM_DIR)

print("total time was ", (time.time() - run_start_time))
print('Percentage changes in aggregates:', ans)
Ejemplo n.º 7
0
def run_micro_macro(user_params):
    # Grab a reform JSON file already in Tax-Calculator
    # In this example the 'reform' is a change to 2017 law (the
    # baseline policy is tax law in 2018)
    reform_url = ('https://raw.githubusercontent.com/'
                  'PSLmodels/Tax-Calculator/master/taxcalc/'
                  'reforms/2017_law.json')
    ref = Calculator.read_json_param_objects(reform_url, None)
    reform = ref['policy']

    # Define parameters to use for multiprocessing
    client = Client(processes=False)
    num_workers = 1  # multiprocessing.cpu_count()
    print('Number of workers = ', num_workers)
    start_time = time.time()

    # Set some model parameters
    # See parameters.py for description of these parameters
    alpha_T = np.zeros(50)
    alpha_T[0:2] = 0.09
    alpha_T[2:10] = 0.09 + 0.01
    alpha_T[10:40] = 0.09 - 0.01
    alpha_T[40:] = 0.09
    alpha_G = np.zeros(7)
    alpha_G[0:3] = 0.05 - 0.01
    alpha_G[3:6] = 0.05 - 0.005
    alpha_G[6:] = 0.05
    small_open = False
    user_params = {'frisch': 0.41, 'start_year': 2018,
                   'tau_b': [(0.21 * 0.55) * (0.017 / 0.055), (0.21 * 0.55) * (0.017 / 0.055)],
                   'debt_ratio_ss': 1.0, 'alpha_T': alpha_T.tolist(),
                   'alpha_G': alpha_G.tolist(), 'small_open': small_open}

    '''
    ------------------------------------------------------------------------
    Run baseline policy first
    ------------------------------------------------------------------------
    '''
    output_base = BASELINE_DIR
    kwargs = {'output_base': output_base, 'baseline_dir': BASELINE_DIR,
              'test': False, 'time_path': True, 'baseline': True,
              'user_params': user_params, 'guid': '_example',
              'run_micro': True, 'data': 'cps', 'client': client,
              'num_workers': num_workers}

    start_time = time.time()
    runner(**kwargs)
    print('run time = ', time.time()-start_time)

    '''
    ------------------------------------------------------------------------
    Run reform policy
    ------------------------------------------------------------------------
    '''
    user_params = {'frisch': 0.41, 'start_year': 2018,
                   'tau_b': [(0.35 * 0.55) * (0.017 / 0.055)],
                   'debt_ratio_ss': 1.0, 'alpha_T': alpha_T.tolist(),
                   'alpha_G': alpha_G.tolist(), 'small_open': small_open}
    output_base = REFORM_DIR
    kwargs = {'output_base': output_base, 'baseline_dir': BASELINE_DIR,
              'test': False, 'time_path': True, 'baseline': False,
              'user_params': user_params, 'guid': '_example',
              'reform': reform, 'run_micro': True, 'data': 'cps',
              'client': client, 'num_workers': num_workers}

    start_time = time.time()
    runner(**kwargs)
    print('run time = ', time.time()-start_time)

    # return ans - the percentage changes in macro aggregates and prices
    # due to policy changes from the baseline to the reform
    ans = postprocess.create_diff(
        baseline_dir=BASELINE_DIR, policy_dir=REFORM_DIR)

    print("total time was ", (time.time() - start_time))
    print('Percentage changes in aggregates:', ans)