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

lme模型残差时间自相关性检验:变异函数方法的疑问求助

时间序列残差的时间自相关性检验:操作修正与结果解读

问题背景

我需要检查LME模型残差的时间自相关性。数据包含采样日期、分组信息和模型残差(E1),属于不规则间隔时间序列,同一采样日期存在多个观测值。我尝试用gstat::variogram来检验,将采样日期转为儒略日作为x坐标,用残差均值作为y坐标,按分组处理,但不确定操作是否正确,也不知道怎么解读结果。

现有代码分析

原代码存在几个关键问题:

  • 分组变量笔误:代码中用group_by(age_class),但实际分组列是group
  • 变异函数公式错误:时间自相关分析不需要将jday和ones作为协变量,正确公式应聚焦残差本身的自相关
  • 二维坐标冗余:时间序列的自相关只需一维时间坐标,无需构造无意义的y轴

原代码:

df_vario <- df %>%  
  mutate(jday = julian(.$date, origin = min(.$date)) + 1,
         jday = as.numeric(jday)) %>% 
  select(E1, jday, group) %>% 
  group_by(age_class) %>% 
  mutate(ones = mean(E1))

sp::coordinates(df_vario) <- c("jday", "ones")

v1 <- gstat::variogram(E1 ~ jday + ones,
                       data = df_vario[df_vario$group == "r1",]) %>% 
                       mutate(group = "r1")
v2 <- gstat::variogram(E1 ~ jday + ones,
                       data = df_vario[df_vario$group == "r2",]) %>% 
                       mutate(group = "r2")
v3 <- gstat::variogram(E1 ~ jday + ones,
                       data = df_vario[df_vario$group == "r3",]) %>% 
                       mutate(group = "r3")
mrg <- rbind(v1, v2, v3)

mrg %>% 
  ggplot() +
    geom_point(aes(x = dist, y = gamma)) +
    geom_smooth(aes(x = dist, y = gamma),
                se = FALSE,
                method = "loess") +
    facet_wrap(~group, scales = "free_y") +
    labs(x = "Julian Day", y = "Semi-variogram")

修正后的代码

library(tidyverse)
library(gstat)
library(sp)

# 数据预处理:转换儒略日,保留关键列
df_vario <- df %>%  
  mutate(jday = as.numeric(julian(date, origin = min(date))) + 1) %>% 
  select(E1, jday, group)

# 设置一维时间坐标(仅需儒略日即可)
sp::coordinates(df_vario) <- ~jday

# 批量计算各组变异函数,公式E1~1表示分析残差的自相关
vario_list <- map(unique(df_vario$group), function(g) {
  gstat::variogram(E1 ~ 1, data = df_vario[df_vario$group == g,]) %>% 
    mutate(group = g)
})
mrg <- bind_rows(vario_list)

# 可视化结果
mrg %>% 
  ggplot(aes(x = dist, y = gamma)) +
  geom_point() +
  geom_smooth(method = "loess", se = FALSE) +
  facet_wrap(~group, scales = "free_y") +
  labs(x = "时间间隔(儒略日差值)", y = "半变异函数值")

结果解读

半变异函数(gamma)与时间间隔(dist)的关系是判断时间自相关的核心:

  • 显著自相关:gamma随时间间隔增大快速上升,之后趋于平稳。说明间隔近的残差相似度高,超过「变程」(上升阶段的长度)后相关性消失,平稳时的gamma值为「基台值」。
  • 无自相关:gamma始终在0附近波动,无明显上升趋势,说明残差之间没有时间维度的关联。
  • 结合你的结果图:
    • r1组:gamma先升后稳,存在显著时间自相关
    • r2组:gamma波动小,无明显上升,时间自相关性弱
    • r3组:gamma缓慢上升,存在一定程度的时间自相关

注意事项

  • 同一日期多观测值:可以先按日期计算残差均值,再分析,避免同一时间点的重复值干扰距离计算
  • 模型修正:如果存在显著时间自相关,建议在LME模型中加入时间相关结构(如nlme::corAR1)来优化模型

内容的提问来源于stack exchange,提问作者M.Teich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:00:39