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

在R中基于9年时间窗口获取滚动Lepage检验统计量时间序列

嘿,我来帮你搞定这个滚动Lepage检验统计量的提取任务!结合你给出的1961-2009年的冬季数据,以及9年的滚动窗口要求,我给你准备了一套R语言的实现方案,步骤清晰,直接就能用:

滚动Lepage检验统计量提取方案

首先明确:Lepage检验是用来对比两个样本的位置和尺度分布差异的方法,所以我们需要把每个9年的滚动窗口拆分成两个子样本(你可以根据研究需求调整拆分规则),然后计算对应的统计量。

步骤1:准备数据与加载依赖包

先把你给出的数据结构还原成R的数据框,同时加载需要的工具包(lawstat提供Lepage检验函数,dplyr用于数据整理):

library(lawstat)
library(dplyr)

# 构造你的数据框(替换掉NA部分为你完整的Winter数据)
df <- structure(list(
  Year = 1961:2009,
  Winter = c(11.5714803313, 9.3664362519, 14.3399332592, 14.1548003072, 
             10.0271889401, 16.1278801843, 7.5481110699, 2.6131336406, 
             14.9045698925, 11.9352150538, 19.3715609937, 8.3156298003, 
             20.686328725, 9.9734639017, 18.7517612162, 19.7309907834, 
             4.5365207373, 13.7009600614, 8.3644790508, 8.325, 8.493,
             # 这里替换为你剩下的28个Winter数据值
             10.1, 12.3, 9.8, 15.2, 7.6, 8.9, 11.2, 13.5, 10.7, 9.2,
             14.1, 16.3, 8.5, 7.9, 12.7, 11.8, 13.1, 9.5, 10.3, 12.6,
             8.1, 7.3, 11.4, 14.7, 9.6, 10.8, 12.2, 13.9)
), class = "data.frame", row.names = c(NA, -49L))

步骤2:定义滚动规则并计算统计量

我们设置9年窗口,把每个窗口拆分为前4年和后5年作为两个对比样本(你可以自行调整拆分比例,比如前5后4),然后遍历所有滚动窗口计算Lepage统计量:

# 设置滚动窗口大小
window_size <- 9
# 子样本拆分长度(前n年作为第一个样本)
split_length <- 4

# 初始化结果容器
lepage_stats <- list()

# 遍历每个滚动窗口
for (i in 1:(nrow(df) - window_size + 1)) {
  # 提取当前窗口的9年数据
  current_window <- df[i:(i + window_size - 1), ]
  # 拆分两个子样本
  sample1 <- current_window$Winter[1:split_length]
  sample2 <- current_window$Winter[(split_length + 1):window_size]
  
  # 运行Lepage检验
  test_result <- lepage.test(sample1, sample2)
  
  # 保存结果:窗口结束年份、统计量、p值
  lepage_stats[[i]] <- tibble(
    Window_End_Year = current_window$Year[window_size],
    Lepage_Statistic = test_result$statistic,
    P_Value = test_result$p.value
  )
}

# 合并结果为数据框
lepage_time_series <- bind_rows(lepage_stats)

步骤3:查看与转换结果

现在你就得到了滚动Lepage统计量的时间序列,每个行对应一个9年窗口的结束年份:

# 查看前5条结果
head(lepage_time_series)

# 如果需要转为R的时间序列对象
lepage_ts <- ts(lepage_time_series$Lepage_Statistic, 
                start = lepage_time_series$Window_End_Year[1], 
                end = lepage_time_series$Window_End_Year[nrow(lepage_time_series)])

# 绘制统计量时间序列图
plot(lepage_ts, xlab = "Year", ylab = "Lepage Statistic", main = "Rolling Lepage Test Statistics (9-year window)")

自定义调整说明

  • 子样本拆分规则:如果你不想按前后年份拆分,比如想对比奇数年份和偶数年份,只需要修改sample1和sample2的提取逻辑即可。
  • 基准期对比:如果你的需求是每个滚动窗口与某个固定基准期(比如1961-1969)做Lepage检验,只需要把sample2固定为基准期的数据,sample1换成每个滚动窗口的数据。
  • 缺失值处理:如果数据中有缺失值,建议先通过na.omit(df)或者插值方法(比如zoo包的na.approx)处理后再运行检验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:42:23