在R语言中实现同比(YoY)增长率转环比(QoQ)增长率
从通胀同比(YoY)数据计算环比(QoQ)增长率的解决方案
要从同比数据推导环比,核心是先通过同比反推出连续的物价指数(CPI)序列,再计算相邻季度的物价变化率。以下是具体步骤和R代码实现:
原理说明
同比增长率(YoY)的公式是:
YoY_t = (CPI_t / CPI_{t-4} - 1) × 100%
其中CPI_t是第t季度的物价指数,CPI_{t-4}是去年同期的物价指数。我们可以通过这个公式递推得到完整的CPI序列,再用环比公式计算:
QoQ_t = (CPI_t / CPI_{t-1} - 1) × 100%
可以任意设定一个基期的CPI值(比如设2020Q4的CPI为100),这个选择不会影响环比结果,因为环比是相对变化。
R代码实现
# 确保数据按时间顺序排列 df_sorted <- df[order(df$Date), ] # 初始化CPI向量,长度与数据行数一致 cpi <- numeric(nrow(df_sorted)) # 设定基期:2020Q4的CPI为100(对应数据框第4行) cpi[4] <- 100 # 递推计算2021Q1及之后的CPI:当前CPI=去年同期CPI×(1+同比/100) for(t in 5:nrow(df_sorted)) { cpi[t] <- cpi[t-4] * (1 + df_sorted$value[t]/100) } # 反推2020Q1-Q3的CPI:去年同期CPI=当前CPI/(1+同比/100) for(t in 3:1) { cpi[t] <- cpi[t+4] / (1 + df_sorted$value[t+4]/100) } # 计算环比增长率:当前CPI/上一季度CPI -1,再转为百分比 qoq <- c(NA, (cpi[2:nrow(df_sorted)] / cpi[1:(nrow(df_sorted)-1)] - 1) * 100) # 将结果合并到原数据框,保留两位小数 df_sorted$CPI <- round(cpi, 2) df_sorted$QoQ_growth <- round(qoq, 2) # 查看关键列结果 print(df_sorted[, c("Date", "value", "CPI", "QoQ_growth")])
结果解释
CPI列:反推出的相对物价指数,基期为2020Q4=100,保留两位小数。QoQ_growth列:环比增长率(百分比),保留两位小数,2020Q1无环比数据,显示NA。
内容的提问来源于stack exchange,提问作者Erazijus
相关产品推荐
相关产品推荐

