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

如何在R中构建银行并购事件前后3年的时间序列用于回归分析

处理银行并购事件前后时间序列并用于回归分析的R实现

1. 数据准备与预处理

假设你的数据集存储为数据框bank_data,包含bank_name(银行名称)、t(年份)、Operation(并购虚拟变量)、asset_tot(总资产)字段。先加载常用工具包:

library(dplyr)
library(ggplot2)
library(fixest) # 用于固定效应回归,可选

处理多并购场景(按需选择)

如果部分银行存在多次并购,需先明确分析目标:

  • 仅分析首次并购:
# 提取每家银行的首次并购年份
first_merger <- bank_data %>%
  filter(Operation == 1) %>%
  group_by(bank_name) %>%
  summarise(merger_year = min(t)) %>%
  ungroup()

# 合并回原数据集
bank_data <- bank_data %>% left_join(first_merger, by = "bank_name")
  • 分析所有并购事件(每个事件单独拆分):
# 为每个并购事件生成唯一标识
bank_data <- bank_data %>%
  filter(Operation == 1) %>%
  group_by(bank_name) %>%
  mutate(event_id = row_number()) %>%
  ungroup() %>%
  right_join(bank_data, by = c("bank_name", "t", "Operation", "asset_tot")) %>%
  tidyr::fill(event_id, .direction = "downup")

2. 构建事件时间变量

计算每个观测值相对于并购年份的时间点:并购当年标记为0,并购前1-3年依次为-1/-2/-3,并购后1-3年依次为1/2/3,同时筛选事件前后3年的有效样本:

# 针对首次并购的场景
bank_data <- bank_data %>%
  mutate(event_time = t - merger_year) %>%
  filter(event_time >= -3 & event_time <= 3)

# 针对多事件场景
bank_data <- bank_data %>%
  group_by(bank_name, event_id) %>%
  mutate(event_time = t - t[Operation == 1]) %>%
  filter(event_time >= -3 & event_time <= 3) %>%
  ungroup()

3. 可视化并购前后总资产变化

用折线图直观展示趋势:

# 单银行个体趋势图
ggplot(bank_data, aes(x = event_time, y = asset_tot, group = bank_name)) +
  geom_line(alpha = 0.6) +
  geom_vline(xintercept = 0, linetype = "dashed", color = "red") +
  labs(x = "事件时间(并购当年=0)", y = "总资产", title = "银行并购前后3年总资产变化") +
  theme_minimal()

# 整体平均趋势图(带95%置信区间)
bank_data %>%
  group_by(event_time) %>%
  summarise(mean_asset = mean(asset_tot, na.rm = TRUE),
            se_asset = sd(asset_tot, na.rm = TRUE)/sqrt(n())) %>%
  ggplot(aes(x = event_time, y = mean_asset)) +
  geom_line(color = "blue") +
  geom_ribbon(aes(ymin = mean_asset - 1.96*se_asset, ymax = mean_asset + 1.96*se_asset), alpha = 0.2) +
  geom_vline(xintercept = 0, linetype = "dashed", color = "red") +
  labs(x = "事件时间(并购当年=0)", y = "平均总资产", title = "并购前后3年总资产平均变化趋势") +
  theme_minimal()

4. 回归分析实现

处理后的asset_tot可直接作为因变量,核心自变量可选择连续型event_time或分组虚拟变量:

示例1:线性固定效应回归

# 控制银行和年份固定效应,分析总资产随事件时间的线性变化
model <- feols(asset_tot ~ event_time | bank_name + t, data = bank_data)
summary(model)

示例2:分组虚拟变量回归(捕捉非线性趋势)

先生成事件前后的分组虚拟变量(以并购当年为基准组):

bank_data <- bank_data %>%
  mutate(
    pre3 = ifelse(event_time == -3, 1, 0),
    pre2 = ifelse(event_time == -2, 1, 0),
    pre1 = ifelse(event_time == -1, 1, 0),
    post1 = ifelse(event_time == 1, 1, 0),
    post2 = ifelse(event_time == 2, 1, 0),
    post3 = ifelse(event_time == 3, 1, 0)
  )

# 回归分析各时间点与并购当年的总资产差异
model <- feols(asset_tot ~ pre3 + pre2 + pre1 + post1 + post2 + post3 | bank_name + t, data = bank_data)
summary(model)

注意事项

  • 若部分银行并购前后不足3年,filter步骤会自动剔除超出范围的观测;若需保留,可移除filter但需注意样本偏差。
  • 存在缺失值时,可通过na.omit(bank_data)或dplyr::drop_na()处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:46:01