gpt4 book ai didi

r - 数据长度不是二的幂/样本大小不能被 2^J 整除(小波分析)

转载 作者:行者123 更新时间:2023-12-04 10:11:06 25 4
gpt4 key购买 nike

我有多个长度为 149 的时间序列,我想通过使用小波变换对它们进行去噪。

这是我的数据示例:

t=ts(rnorm(149,5000,1000),start=1065,end=1213) 

当我尝试使用 wavetresh 和 waveslim 包时,它们都指向同一个问题:

library(wavetresh)
wd(t)
Error in wd(t) : Data length is not power of two
library(waveslim)
dwt(t)
Error in dwt(t) : Sample size is not divisible by 2^J

我知道我的数据长度应该是 2^x,但我无法克服这个问题。我认为 waveslim 中的函数 up.sample() 应该有助于解决这个问题,但它并没有起到作用(例如 up.sample(t,2^8) 给出一个长度为 38144 的向量)。那么如何在不插入错误的情况下增加向量长度呢?我知道我可以用零填充,...但我想知道最好的方法。

此外,在查看 waveslim 的示例时,输入系列的长度似乎也不满足此要求(尽管该示例当然有效):

data(ibm)     
ibm.returns <- diff(log(ibm))
ibmr.haar <- dwt(ibm.returns, "haar") #works
log2(length(ibm.returns))
[1] 8.523562

我觉得我缺少一些基本的东西,但我想不通。感谢您的帮助。

Ps:我知道我可以使用其他技术来做到这一点,但我真的很想测试这种方法。

最佳答案

我查看了 dwt 的代码及其工作的原因,是 dwt 不检查长度是否是 2 的 但长度是否是 2^J 的倍数(实际上这就是错误消息所说的:Error in dwt(t) : Sample size is not divisible by 2^ J).

J=4 时,时间序列的长度必须是 16 的倍数。正如您所假设的,up.sample 可用于解决此问题因为它用 0 填充时间序列。但是您提供的不是最终长度,而是上采样频率

因此

dwt(up.sample(t, 16, 0))

应该可以解决问题。

关于r - 数据长度不是二的幂/样本大小不能被 2^J 整除(小波分析),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26251544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com