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

基于R语言的多人群二元时间序列synchrony分析方法问询

针对群体二元时间序列的滚动同步性分析方案(R实现)

核心思路

针对你拥有的秒级二元人群时间序列,采用滚动窗口+高效聚合统计量的方案,既支持数百人群的大规模数据,又能生成每秒的量化同步性得分,避免固定离散窗口的局限性。核心是用O(n)复杂度的统计量(避开成对关联的O(n²)冗余计算),结合滚动窗口实现时间维度的连续分析。

实现步骤

1. 环境准备与数据构造

先安装并加载所需工具包,同时构造符合场景的示例数据(30秒、100人群):

set.seed(123)
# 安装依赖包
install.packages(c("slider", "ggplot2", "irr"))
library(slider)
library(ggplot2)
library(irr)

# 构造示例数据:30行=30秒,100列=100人,二元值(1=事件发生,0=未发生)
df <- data.frame(matrix(rbinom(30*100, 1, 0.1), nrow=30, ncol=100))
colnames(df) <- paste0("person_", 1:100)

# 手动模拟高同步(红框)、中等同步(蓝框)段
df[10:15, 1:80] <- 1  # 第10-15秒:80%人群同时触发事件
df[20:25, 1:50] <- 1  # 第20-25秒:50%人群同时触发事件

2. 滚动同步性得分计算

提供3种量化指标,可根据需求选择,所有指标均基于7秒中心滚动窗口(可灵活调整为5-10秒):

指标1:归一化方差得分(直观同步性指标)

通过窗口内群体事件比例的方差反向量化同步性:方差越小,人群响应越集中(同步性越高),归一化后得分范围0-1,越接近1同步性越强。

window_size <- 7  # 可改为5、10等

# 计算每秒的群体事件发生比例
event_prop <- rowMeans(df)

# 滚动计算归一化方差得分
sync_var <- slide_dbl(event_prop, function(x) {
  prop_var <- var(x)
  1 - (prop_var / 0.25)  # 二元比例的最大方差为0.25,归一化到0-1
}, .window = window_size, .align = "center")
指标2:滚动同步事件占比

统计窗口内,群体事件比例超过阈值(如高同步>0.7、中等同步>0.5)的时间点占比,直接反映窗口内高/中等同步的持续程度:

# 高同步占比(窗口内≥70%人群触发事件的时间占比)
sync_high <- slide_dbl(event_prop, function(x) mean(x > 0.7), 
                       .window = window_size, .align = "center")

# 中等同步占比(窗口内≥50%人群触发事件的时间占比)
sync_medium <- slide_dbl(event_prop, function(x) mean(x > 0.5), 
                         .window = window_size, .align = "center")
指标3:滚动Fleiss' Kappa(专业群体一致性指标)

Fleiss' Kappa是专门用于多评判者(多人群)一致性的统计量,取值范围-1到1,越接近1说明群体同步性越强:

# 滚动计算Fleiss' Kappa(需转置数据适配irr包格式)
sync_kappa <- slide_dfr(df, function(window_data) {
  t_data <- t(window_data)
  kappa_res <- kappam.fleiss(t_data)
  data.frame(kappa = kappa_res$value)
}, .window = window_size, .align = "center")$kappa

3. 结果整合与可视化

将所有得分整合为数据框,并用可视化展示同步性随时间的变化趋势:

# 整合结果
result_df <- data.frame(
  second = 1:nrow(df),
  event_prop = event_prop,
  sync_var = sync_var,
  sync_high = sync_high,
  sync_medium = sync_medium,
  sync_kappa = sync_kappa
)

# 可视化同步性趋势
ggplot(result_df, aes(x = second)) +
  geom_line(aes(y = sync_var, color = "归一化方差得分"), linewidth = 1) +
  geom_line(aes(y = sync_kappa, color = "Fleiss' Kappa"), linewidth = 1) +
  geom_line(aes(y = sync_high, color = "高同步占比"), linewidth = 1) +
  # 标注示例中的高/中等同步段
  annotate("rect", xmin = 9.5, xmax = 15.5, ymin = 0, ymax = 1, alpha = 0.2, fill = "red") +
  annotate("rect", xmin = 19.5, xmax = 25.5, ymin = 0, ymax = 1, alpha = 0.2, fill = "blue") +
  labs(x = "时间(秒)", y = "同步性得分", color = "指标类型") +
  theme_minimal()

方案符合要求验证

  1. R语言实现:所有代码基于R标准包,可直接运行;
  2. 支持数百列:rowMeans、slider均为向量/矩阵级操作,即使1000列也能高效处理;
  3. 无需预定义固定块:滚动窗口是连续的,每个时间点的得分基于周边动态窗口,而非离散块;
  4. 滚动窗口模式:可灵活设置窗口大小(5-10秒),为每秒生成同步得分,清晰展现时间趋势;
  5. 量化数值输出:所有指标均为可解释的数值(0-1或-1到1),而非仅依赖颜色编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:50:24