如何基于时序行数据的GDP变化特征构建危机变量?
实现经济危机变量的判定逻辑
根据需求,我们需要基于人均GDP增长率构建危机变量:当GDP增长率为负时危机启动,直到GDP水平恢复至危机爆发前的峰值及以上时结束。以下是具体实现步骤:
示例数据
首先使用你提供的可复现数据:
library(dplyr) library(tidyr) library(zoo) # 用于填充峰值数据 data <- data.frame( cntry = c(rep("Hungary", 15)), gdp = c(1, 1, 2, -1, -1, 0, 0.5, 1.9, 2, 0.5, 1, -1, 0, 0.5, 2), year = c(2000:2014) )
核心实现代码
# 计算累计GDP绝对水平(以2000年为基期100) data <- data %>% group_by(cntry) %>% mutate(gdp_level = 100 * cumprod(1 + gdp/100)) %>% ungroup() # 标记危机状态 data <- data %>% group_by(cntry) %>% mutate( # 标记危机起始点:首次出现负增长且未处于危机中 crisis_start = ifelse(gdp < 0 & lag(crisis, default = 0) == 0, 1, 0), # 记录危机爆发前的GDP峰值 peak_gdp = ifelse(crisis_start == 1, lag(gdp_level), NA), # 向前填充峰值数据,确保危机周期内始终引用同一峰值 peak_gdp = zoo::na.locf(peak_gdp, na.rm = FALSE), # 判定危机状态 crisis = case_when( crisis_start == 1 ~ 1, lag(crisis, default = 0) == 1 & gdp_level < peak_gdp ~ 1, TRUE ~ 0 ) ) %>% ungroup() # 查看最终结果 print(data)
代码逻辑说明
- 计算GDP绝对水平:将增长率转换为累计的GDP绝对数值,方便对比危机前后的实际经济规模。
- 标记危机起始点:仅在首次出现负增长且此前未处于危机状态时标记为危机启动。
- 跟踪危机前峰值:记录危机启动前一年的GDP峰值,并通过向前填充确保整个危机周期内都能引用该基准值。
- 判定危机持续状态:若处于危机中且当前GDP水平未恢复至峰值,则维持危机标记;当GDP回到峰值及以上时,标记为非危机状态。
输出结果说明
运行代码后,crisis列即为所需的危机变量:
- 数值
1代表处于经济危机期间 - 数值
0代表非危机期间
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

