Непрерывное вейвлет-преобразование

Этот вопрос довольно расплывчатый, но кто-нибудь использовал пакет biwavelet в R и был успешным? У меня есть следующий код:

require(biwavelet)
t1 <- cbind(DecTime,Temp)    
## continuous wavelet transform
wt1 <- wt(t1)
plot(wt1)

и он возвращает ошибку:

Ошибка в image.default(x$t, yvals, t(zvals), zlim = zlims, ylim = rev(range(yvals)),: значения 'x' и 'y' должны быть конечными и отсутствовать

Я не понимаю эту ошибку, потому что мои данные не содержат пропущенных значений, и все они являются конечными.

При попытке воспроизвести пример:

require(biwavelet)
Date = seq(from=as.POSIXct("2011-01-01 00:00"), 
           to=as.POSIXct("2011-12-31 23:00"), length=8760)
DecTime = julian(Date, Date[1])

data=cbind(as.numeric(DecTime), rnorm(8760))
## Continuous wavelet transform
wt.t1=wt(data)
plot(wt.t1)

Это раздражающе работает, поэтому я не знаю, почему мои данные терпят неудачу в этом пакете. Данные в приведенном выше примере - это тот же класс, что и мои данные, то есть "матрица". Любая помощь или совет будут оценены.

Измененный:

require(biwavelet)
Date = seq(from=as.POSIXct("2011-01-01 00:00"), 
           to=as.POSIXct("2011-12-31 23:00"), length=8760)
DecTime = julian(Date, Date[1])
D <- c(4.0267, 4.0211, 4.0005,4.0042,4.0042,4.0191)
data=cbind(as.numeric(DecTime[1:6]),as.numeric(D))
## Continuous wavelet transform
wt.t1=wt(data)
plot(wt.t1)


> data
           [,1]   [,2]
[1,] 0.00000000 4.0267
[2,] 0.04166667 4.0211
[3,] 0.08333333 4.0005
[4,] 0.12500000 4.0042
[5,] 0.16666667 4.0042
[6,] 0.20833333 4.0191
> class(data)
[1] "matrix"
> class(data[,1])
[1] "numeric"
> class(data[,2])
[1] "numeric"
> wt.t1=wt(data)
> plot(wt.t1)
Error in image.default(x$t, yvals, t(zvals), zlim = zlims, ylim = rev(range(yvals)),  : 
  invalid z limits

2 ответа

Если вы пропустили мой ответ на другой пост, вы обнаружили ошибку в функции wt.R (ошибочные скобки). Ошибка была исправлена ​​в версии 0.12 пакета biwavelet, поэтому ваш код теперь будет работать.

Спасибо за обнаружение ошибки!

Вот частичный ответ, который, я надеюсь, пролил немного света. Если вы берете первый N ряды data из примера, который работает, то он терпит неудачу, когда N < 2762, Работает когда N >= 2762 (возможно, этот порог зависит от фактических случайных значений в data?):

> wt.t1=wt(data[1:2762,])
> plot(wt.t1, plot.cb=T)
> wt.t1=wt(data[1:2761,])
> plot(wt.t1, plot.cb=T)
Error in image.default(x$t, yvals, t(zvals), zlim = zlims, ylim = rev(range(yvals)),  : 
  invalid z limits

Важным моментом является то, что все wt.t1$power значения меньше 1, что портит способ вычисления zlims переменная. Я понятия не имею что wt.t1$power все о, хотя.

Другие вопросы по тегам