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

R中adf.test报错‘wrong embedding dimension’的原因及解决方法

解决ADF检验报错:wrong embedding dimension的问题

我来帮你拆解这个问题,一步步解决:

错误含义

这个错误是tseries包的adf.test()函数抛出的,直白来说就是:你输入的时间序列样本量太小,根本没法做ADF检验。函数内部有个硬检查,如果样本量小于3,就会直接抛出这个错误。

产生原因

看你的timeseries数据,分组后存在样本量严重不足的组:比如client=11683且stuff="00564СМР- Магнит ТС"的分组,只有1条Sales记录。当dplyr遍历到这个分组时,调用adf.test()就触发了样本量不足的检查,直接报错终止了整个操作。

另外还有个小优化点:你在summarise里两次调用adf.test(Sales),这会对同一个组重复运行检验,完全没必要,既浪费算力也不优雅。

修正方案

我们需要先过滤掉样本量不够的分组,再对有效分组执行一次ADF检验并提取结果:

完整修正代码

library("tseries")
library(dplyr)
library(purrr) # 用pluck函数更方便提取结果

# 先过滤样本量≥10的分组(10是经验值,保证ADF结果可靠,至少要≥3)
timeseries %>%
  group_by(client, stuff) %>%
  filter(n() >= 10) %>% # 过滤小样本
  summarise(
    adf_result = list(adf.test(Sales)), # 每个组只跑一次检验
    adf_statistic = pluck(adf_result, 1, "statistic"),
    adf_p_value = pluck(adf_result, 1, "p.value")
  )

代码说明

  1. 过滤小样本:用filter(n() >= 10)筛选出至少有10个观测值的分组,如果你只是想满足函数的最低要求,可以改成n() >=3,但小样本的ADF检验结果参考价值很低,建议用10作为阈值。
  2. 单次检验调用:用list(adf.test(Sales))把每个组的检验结果存成列表,然后用purrr::pluck()从结果对象里提取统计量和p值,避免重复运行检验。
  3. 结果解读:如果adf_p_value小于显著性水平(比如0.05),就可以拒绝原假设,认为该时间序列是平稳的;反之则无法拒绝原假设,序列可能存在单位根(非平稳)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:14:23