У меня есть несколько временных рядов длины 149, и я хотел бы их смягчить, используя вейвлет-преобразования.Длина данных не равна двум/Размер выборки не делится на 2^J (вейвлет-анализ)
Это пример моих данных:
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^х, но я не могу решить эту проблему. Я думал, что функция up.sample()
в wavelim должна была помочь с этим, но это не сделало трюк (например, up.sample(t,2^8)
дает вектор длиной 38144). Итак, как увеличить длину вектора без вставки ошибки? Я знаю, что могу наложить ноль, но я хочу знать, как это сделать.
Кроме того, при взгляде на примере waveslim, это выглядит, как если бы длина Imput серии не выполняет это требование, либо (хотя пример конечно делает работу):
data(ibm)
ibm.returns <- diff(log(ibm))
ibmr.haar <- dwt(ibm.returns, "haar") #works
log2(length(ibm.returns))
[1] 8.523562
Я чувствую как будто я пропустил что-то основное, но я не могу понять это. Спасибо за любую помощь.
Ps: Я знаю, что могу использовать другие методы для этого, но я действительно хочу проверить этот подход.
Я не знаком с R, но есть функция в MATLAB 'nextpow2', которая может использоваться как' 2^nextpow2 (149) = 256' и даст вам номер, который вам нужен. – Rashid