You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于时序行数据的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)

代码逻辑说明

  1. 计算GDP绝对水平:将增长率转换为累计的GDP绝对数值,方便对比危机前后的实际经济规模。
  2. 标记危机起始点:仅在首次出现负增长且此前未处于危机状态时标记为危机启动。
  3. 跟踪危机前峰值:记录危机启动前一年的GDP峰值,并通过向前填充确保整个危机周期内都能引用该基准值。
  4. 判定危机持续状态:若处于危机中且当前GDP水平未恢复至峰值,则维持危机标记;当GDP回到峰值及以上时,标记为非危机状态。

输出结果说明

运行代码后,crisis列即为所需的危机变量:

  • 数值1代表处于经济危机期间
  • 数值0代表非危机期间

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:38:16