-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathget_cpi.r
106 lines (85 loc) · 4.57 KB
/
get_cpi.r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#' Calculate inflation rate and increment rates
#'
#' Data taken from ONS
#' Data from 1988 to 2020 are CPI
#' Data from 1947 to 1988 are RPI-0.7pp
#' RPI https://www.ons.gov.uk/economy/inflationandpriceindices/timeseries/czbh/mm23
inflation_incr <- function()
{
rpi<-read.csv('https://www.ons.gov.uk/generator?format=csv&uri=/economy/inflationandpriceindices/timeseries/czbh/mm23')
rpi<-rpi[8:79,]
colnames(rpi)<-c("year","rpi")
#' Adjustment to allow for RPI being higher than CPI
rpi$rpi<-(as.numeric(rpi$rpi)-0.7)*0.01
#' CPI https://www.ons.gov.uk/economy/inflationandpriceindices/timeseries/l55o/mm23
cpi<-read.csv('https://www.ons.gov.uk/generator?format=csv&uri=/economy/inflationandpriceindices/timeseries/d7g7/mm23')
cpi<-cpi[8:39,]
colnames(cpi)<-c("year","cpi")
cpi$cpi<-((as.numeric(cpi$cpi)))*0.01
#' Combine to create imputed CPI for each year.
colnames(rpi)<-c("year","cpi")
cpi_imputed=rbind(rpi[1:40,],cpi)
#Get mean and SD of inflation
# Mean and SD of inflation for whole series are:
inf_sum<-0
inf_sum$mean_all<-mean(cpi_imputed$cpi)
# 0.04527778
inf_sum$sd_all<-sd(cpi_imputed$cpi)
# 0.04449283
# Mean and SD of inflation for post-1997 Bank of England inflation targeting are:
inf_sum$mean_post96<-mean(cpi_imputed$cpi[cpi_imputed$year>1996])
# 0.019375
inf_sum$sd_post96<-sd(cpi_imputed$cpi[cpi_imputed$year>1996])
# 0.01014595
#Create random variables for inflation
cpi_imputed$sim_all<-rnorm(72, mean=inf_sum$mean_all, sd=inf_sum$sd_all)
cpi_imputed$sim_post96<-rnorm(72, mean=inf_sum$mean_post96, sd=inf_sum$sd_post96)
#' Create capped inflation changes:
#' 2.5% cap
#' Actual data
cpi_imputed$cpi_cap2.5<-as.numeric(cpi_imputed$cpi)-0.025
cpi_imputed$cpi_cap2.5[cpi_imputed$cpi_cap2.5<=0]<-0
#' Simulated inflation data
cpi_imputed$sim_all_cap2.5<-as.numeric(cpi_imputed$sim_all)-0.025
cpi_imputed$sim_all_cap2.5[cpi_imputed$sim_all_cap2.5<=0]<-0
cpi_imputed$sim_post96_cap2.5<-as.numeric(cpi_imputed$sim_post96)-0.025
cpi_imputed$sim_post96_cap2.5[cpi_imputed$sim_post96_cap2.5<=0]<-0
#' 5.0% cap, +50% between 5% and 15%
#' Actual data
cpi_imputed$cpi_cap5<-as.numeric(cpi_imputed$cpi)-0.05
cpi_imputed$cpi_cap5[cpi_imputed$cpi_cap5<=0]<-0
cpi_imputed$cpi_cap5[cpi_imputed$cpi_cap5>0&cpi_imputed$cpi_cap5<0.1]<-cpi_imputed$cpi_cap5[cpi_imputed$cpi_cap5>0&cpi_imputed$cpi_cap5<0.1]*0.5
cpi_imputed$cpi_cap5[cpi_imputed$cpi_cap5>=0.1]<-cpi_imputed$cpi_cap5[cpi_imputed$cpi_cap5>=0.1]-0.05
#' Simulated
cpi_imputed$sim_all_cap5<-as.numeric(cpi_imputed$sim_all)-0.05
cpi_imputed$sim_all_cap5[cpi_imputed$sim_all_cap5<=0]<-0
cpi_imputed$sim_all_cap5[cpi_imputed$sim_all_cap5>0&cpi_imputed$sim_all_cap5<0.1]<-cpi_imputed$sim_all_cap5[cpi_imputed$sim_all_cap5>0&cpi_imputed$sim_all_cap5<0.1]*0.5
cpi_imputed$sim_all_cap5[cpi_imputed$sim_all_cap5>=0.1]<-cpi_imputed$sim_all_cap5[cpi_imputed$sim_all_cap5>=0.1]-0.05
cpi_imputed$sim_post96_cap5<-as.numeric(cpi_imputed$sim_post96)-0.05
cpi_imputed$sim_post96_cap5[cpi_imputed$sim_post96_cap5<=0]<-0
cpi_imputed$sim_post96_cap5[cpi_imputed$sim_post96_cap5>0&cpi_imputed$sim_post96_cap5<0.1]<-cpi_imputed$sim_post96_cap5[cpi_imputed$sim_post96_cap5>0&cpi_imputed$sim_post96_cap5<0.1]*0.5
cpi_imputed$sim_post96_cap5[cpi_imputed$sim_post96_cap5>=0.1]<-cpi_imputed$sim_post96_cap5[cpi_imputed$sim_post96_cap5>=0.1]-0.05
#' This gives us the inflation above each of the caps for each year.
#' Randomize order
set.seed(12345)
cpi_imputed$rand<-runif(72)
cpi_imputed_new<-cpi_imputed[order(cpi_imputed$rand),]
cpi_imputed_new$year<-as.numeric(cpi_imputed$year)+73
rm(cpi_imputed,cpi,rpi)
#' This gives us the inflation above each of the caps for each year from 2022 to 2093
#' Recode inflation so that it's from 2018
cpi_imputed_new$year=cpi_imputed_new$year-4
#Limit inflation figures up 2067 to be consistent with the rest of the model.
cpi_imputed_new<-cpi_imputed_new[1:50,]
#Next generate the increment for each year. This is one currently, but would be 1-cpi above the cap in a inflation adjusted model:
cpi_imputed_new$incr_2.5<-1-cpi_imputed_new$cpi_cap2.5
cpi_imputed_new$incr_5<-1-cpi_imputed_new$cpi_cap5
cpi_imputed_new$incr_sim_all_2.5<-1-cpi_imputed_new$sim_all_cap2.5
cpi_imputed_new$incr_sim_all_5<-1-cpi_imputed_new$sim_all_cap5
cpi_imputed_new$incr_sim_post96_2.5<-1-cpi_imputed_new$sim_post96_cap2.5
cpi_imputed_new$incr_sim_post96_5<-1-cpi_imputed_new$sim_post96_cap5
return(subset(cpi_imputed_new,select=c(year, incr_2.5, incr_5, incr_sim_all_2.5, incr_sim_all_5,incr_sim_post96_2.5, incr_sim_post96_5)))
}
a <- inflation_incr()
dir.create("../data")
saveRDS(a, file="../data/inflation.rds")