The goal of
CoRe is to ease the calculation of the costs of reoffending for any given group of reoffences.
CoRe is based on the methodology used in the Economic and Social Costs of Reoffending publication. The costs of reoffending calculated in this package can be used to support business cases and impact assessments/evaluations in government and wider.
You can install the released version of CoRe from github with:
The costs of reoffending (
CoRe) package exposes 5 functions as its API. These are:
rebase_reoffences is used to change from a
index_offence_group basis to a
reoffence_group basis. The latter basis is the basis used in the calculation of the costs of reoffending.
estimate_multipliers is a convenience function used to estimate multipliers from the numbers of crimes as recorded by police to an estimate of wider crime for a given 12-month-period, as defined in the Home Office economic and social costs of crime report. It is already called in
target_date as input to estimate the number of wider (re)offences for a given cohort in a 12-month-follow-up-period. User data should have the columns
number_offences, at the least. It will
group_by all non-numeric columns, so ensure that you are using only columns you wish to use.
target_fy to estimate the unit costs for a crime/reoffence inflated to the relevant financial year using GDP deflators. This is a convenience function which is already called in
estimate_total_costs and so needn’t be called to use that function.
target_fy to estimate the total costs of crime/reoffences for a given cohort in a 12-month-follow-up-period inflated to a specified financial year’s prices. User data should have the columns
number_offences, at the least.
If we wanted to calculate the cost of reoffending for the 2016 offender cohort, as in the official statistics, we can use the
reoffending_stats provided in the package.
library(CoRe) library(magrittr) estimate_total_costs(reoffending_stats, "2016-12-31") #> # A tibble: 3,250 x 14 #> offence_group proven_offences wider_offences number_offences #> <chr> <dbl> <dbl> <dbl> #> 1 Criminal dam… 31930 921189. 579254 #> 2 Criminal dam… 31930 921189. 579254 #> 3 Criminal dam… 31930 921189. 579254 #> 4 Criminal dam… 31930 921189. 579254 #> 5 Criminal dam… 31930 921189. 579254 #> 6 Criminal dam… 31930 921189. 579254 #> 7 Criminal dam… 31930 921189. 579254 #> 8 Criminal dam… 31930 921189. 579254 #> 9 Criminal dam… 31930 921189. 579254 #> 10 Criminal dam… 31930 921189. 579254 #> # … with 3,240 more rows, and 10 more variables: year_ending <dttm>, #> # index_offence_group <chr>, number_offenders <chr>, age <chr>, #> # number_reoffences <dbl>, reoffence_ratio <dbl>, #> # wider_reoffences <dbl>, expenditure_group <chr>, cost <dbl>, #> # total_cost <dbl>
These arguments are the defaults and they give a data frame with 14 columns. We can then estimate the total cost using
names(estimate_total_costs()) #>  "offence_group" "proven_offences" "wider_offences" #>  "number_offences" "year_ending" "index_offence_group" #>  "number_offenders" "age" "number_reoffences" #>  "reoffence_ratio" "wider_reoffences" "expenditure_group" #>  "cost" "total_cost" estimate_total_costs() %>% dplyr::summarise(total_cost = sum(total_cost, na.rm = TRUE)) #> # A tibble: 1 x 1 #> total_cost #> <dbl> #> 1 19773459964.
We can see the multipliers that were used to obtain the number of wider reoffences…
estimate_multipliers("2016-12-31") #> # A tibble: 196 x 2 #> offence multiplier #> <chr> <dbl> #> 1 Abandoning a child under the age of two years 1.11 #> 2 Abduction of female 12.3 #> 3 Abuse of children through sexual exploitation 12.3 #> 4 Abuse of position of trust of a sexual nature 12.3 #> 5 Actual bodily harm (ABH) and other injury 1.92 #> 6 Aggravated burglary - business and community 0.831 #> 7 Aggravated burglary -Residential 2.99 #> 8 Aggravated burglary in a building other than a dwelling 0.831 #> 9 Aggravated burglary in a dwelling 2.99 #> 10 Aggravated vehicle taking 0.831 #> # … with 186 more rows
…and the number of wider (re)offences.
estimate_wider_offences() %>% dplyr::group_by(c(offence_group)) %>% dplyr::summarise(wider_offences = sum(wider_offences, na.rm = TRUE), wider_reoffences = sum(wider_reoffences, na.rm = TRUE)) #> Warning in validate_reoffending_data(user_data): You have multiple #> 'year_endings' in your input data, only the closest to the 'target_date' #> will be used. #> # A tibble: 13 x 3 #> `c(offence_group)` wider_offences wider_reoffences #> <chr> <dbl> <dbl> #> 1 Criminal damage and arson 23950909. 60759. #> 2 Drug offences 3476538 37312. #> 3 Fraud offences 86290057. 1004066. #> 4 Miscellaneous crimes against society 2116374 34249. #> 5 Other 0 0 #> 6 Possession of weapons offences 860444 15774. #> 7 Public order offences 8191352 200632. #> 8 Robbery 4834006. 123989. #> 9 Sexual offences 30294448. 70228. #> 10 Summary motoring 0 50100 #> 11 Summary non-motoring 0 146292 #> 12 Theft offences 73862997. 2603282. #> 13 Violence against the person 45708852. 430356.
reoffending_stats also includes
index_offence_group and we can experiment with trying to replicate our earlier result after destroying the reoffence data here using the
reoff <- reoffending_stats %>% dplyr::group_by(year_ending, index_offence_group) %>% dplyr::summarise(number_reoffences_by_index = sum(number_reoffences, na.rm = TRUE)) reoff <- rebase_reoffences(reoff, "2016-12-31") estimate_total_costs(reoff, "2016-12-31") %>% dplyr::summarise(total_cost = sum(total_cost, na.rm = TRUE)) #> # A tibble: 1 x 1 #> total_cost #> <dbl> #> 1 19773459964.