knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

This brief vignette demonstrates how the pagglomR package can be used to calculate scheme agglomeration impacts.

Suppose we have a national roads scheme and, as part of the project appraisal process, a transport model has been developed. We have AM, Inter-peak and PM peak models with Cars and HGVs defined as separate user classes. For each future year model, we have a Do Minimum (without scheme) and a Do Something (with scheme) scenario.

Using the strategic transport modelling software (e.g. VISUM, SATURN) we can output text files and/or csv files listing the generalised cost and number of modelled trips for each origin destination pair. This can be output for each scenario and for each time period, user class and journey purpose depending on the structure of the transport model.

For each scenario, mode of travel (i.e. highway and/or public transport) and each forecast year, a weighted average generalised cost is required across each time period, journey purpose, and user class. This can be calculated as follows:

$$ \begin{aligned} GC_{i, j} ^ {S, m, f} &= \frac{\sum_{p} \ GC_{i, j} ^ {S, m, p, f} \ T_{i, j} ^ {S, m, p, f}} {\sum_{p} \ T_{i, j} ^ {S, m, p, f}} \end{aligned} $$ where:

In order for the generalised cost files to be read into R and used in the pagglomR package, they should be in comma separated value (csv) format with the column headings o_zone, d_zone and gen_cost.

In the case of outputs from a multi-modal transport model, separate generalised cost skim matrices should be produced for private and public transport modes e.g. road and rail.

Weighted average generalised cost matrices should produced for commuting and business purposes only as productivity benefits are only associated with these journey purposes. Also, the modelled time periods to be included should be based on AM peak, Inter-Peak and PM peak. Off peak periods should not be considered as these periods are not active from the perspective of commuting and business use.

A number of sample generalised cost outputs are included with the pagglomR package for the purposes of this example and for reference.

library(pagglomR)

dm_2024

A sample jobs file is also included with with the pagglomR package.

head(sample_jobs)

In this example we have 3 modelled years - 2024, 2039 & 2054. We have 2 scenarios for each modelled year - "Do Minimum" and "Do Something". For each year we first calculate the effective densities for each sector for both scenarios using the generalised costs from the transport model and the jobs data. This is undertaken using the calc_eff_dens() function which applies the following formula:

$$ \begin{aligned} d_i^{S, k, f} &= \sum_{j} \sum_{m} \frac{E_j^{S,f}}{(GC_{i,j}^{S,m,f})a^k} \end{aligned} $$ where:

# 2024
eff_dens_dm_2024 <- calc_eff_dens(dm_2024, sample_jobs, 2024)
eff_dens_ds_2024 <- calc_eff_dens(ds_2024, sample_jobs, 2024)

# 2039
eff_dens_dm_2039 <- calc_eff_dens(dm_2039, sample_jobs, 2039)
eff_dens_ds_2039 <- calc_eff_dens(ds_2039, sample_jobs, 2039)

# 2054
eff_dens_dm_2054 <- calc_eff_dens(dm_2054, sample_jobs, 2054)
eff_dens_ds_2054 <- calc_eff_dens(ds_2054, sample_jobs, 2054)

In the case of a multi-modal assessment, separate effective density calculations should be run using the generalised costs from the private and public transport modes. These matrices should then be summed for each forecast year and scenario to form the effective density matrices to be then used for the calculation of productivity impacts.

We can then calculate the productivity impacts for each modelled year using the effective density calculations for the "Do Minimum" and "Do Something" scenarios and the jobs data. The productivity impacts are calculated by applying the following formula:

$$ \begin{aligned} WEI_i^{k, f} &= \left[ \left( \frac{d_i^{DS, k, f}}{d_i^{DM, k, f}} \right)^{\rho^k} - 1\right] GVA_i^{DM,k,f} E_i^{DM,k,f} \end{aligned} $$ where:

The calc_prod_impacts() function sums the above sectoral agglomeration impacts into an overall productivity impact in Euro (€, in 201X prices).

# 2024
prod_2024 <- calc_prod_impacts(eff_dens_dm_2024, eff_dens_ds_2024, sample_jobs)

# 2039
prod_2039 <- calc_prod_impacts(eff_dens_dm_2039, eff_dens_ds_2039, sample_jobs)

# 2054
prod_2054 <- calc_prod_impacts(eff_dens_dm_2054, eff_dens_ds_2054, sample_jobs)

The discounted_prod() function reads in the productivity benefits calculated for each modelled year and interpolates values for years in between the modelled years.

It also calculates nominal productivity benefits per annum by applying GVA growth based on the rates in Table 4 of PAG Unit 6.11. Discounted benefits are then calculated by applying the test discount rate to the nominal benefits. This is undertaken for the 30 year appraisal period plus a 30 year residual value period.

# discounted table of benefits
discounted_benefits <- discounted_prod(appraisal_year = 2020,
                                       prod_2024, 
                                       prod_2039,
                                       prod_2054)

discounted_benefits

The discounted benefits can be summarised into a total present value benefit over the 30 year appraisal period, and a separate total for the residual value period using the prod_summary() function.

summary_benefits <- prod_summary(discounted_benefits)

summary_benefits

The total productivity impacts in present value terms can be calculated using:

sum(summary_benefits$pv_benefits)

This can be added to the transport user benefits to produce an updated benefit cost ratio (BCR) as part of a sensitivity test around the central case in the scheme appraisal.



TII-STP/pagglomR documentation built on Jan. 12, 2022, 4:04 p.m.