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

如何使用tidyverse计算横截面相关性的时间序列均值

面板数据横截面相关系数时间均值计算方案

现有代码问题

  • 分组字段错误:你提供的数据集仅包含year时间标识,不存在Month列,原代码直接分组会报错
  • 未对分组返回的相关矩阵做结构化整理:group_map默认返回不带分组标识的列表,无法后续按变量对聚合时间维度均值
  • select_if(is.numeric)属于dplyr已弃用语法,建议替换为select(where(is.numeric))

完整实现代码

library(tidyverse)
library(corrr)

# 构造示例面板数据
data <- tribble(
  ~year, ~V1, ~V2, ~V3, ~misc_var,
  2018,   5,   6,   5,       "a",
  2018,   4,   6,   4,       "b",
  2018,   3,   2,   3,        NA,
  2013,   5,   8,   2,       "4",
  2013,   6,   3,   8,       "8",
  2013,   4,   7,   5,        NA
)

# 第一步:按年分组计算每年横截面皮尔逊相关,同时保留年份标识
yearly_corr <- data %>%
  select(where(is.numeric)) %>% 
  group_by(year) %>%
  group_modify(~ correlate(.x, quiet = TRUE) %>% stretch()) # stretch将相关矩阵转为变量对长表

# 第二步:按变量对分组,计算时间维度的相关系数均值
mean_corr <- yearly_corr %>%
  group_by(x, y) %>%
  summarise(
    time_mean_corr = mean(r, na.rm = TRUE),
    .groups = "drop"
  )

# 查看最终结果
print(mean_corr)

代码逻辑说明

  • 按时间维度分组计算每一期横截面相关系数时,通过stretch()将宽格式相关矩阵转为「变量对-相关系数」的长表结构,保留时间分组标识
  • 按变量对分组后对所有时间点的相关系数求均值,即可得到最终的时间序列平均相关结果
  • 若你的实际数据时间粒度为月度,仅需将group_by(year)替换为group_by(Month)即可适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 18:27:03