Обратная функция сглаживания R Pracma Whittaker?

Я использую функцию Whittaker от Pracma здесь

whittaker <- function(y, lambda = 1600, d = 2){
    #   Smoothing with a finite difference penalty
    #   y:      signal to be smoothed
    #   lambda: smoothing parameter (rough 50..1e4 smooth)
    #   d:      order of differences in penalty (generally 2)

    m <- length(y)
    E <- eye(m)
    D <- diff(E, lag = 1, differences = d)
    B <- E + (lambda * t(D) %*% D)
    z <- solve(B, y)

    return(z)
}

для которого мне нужно найти обратную функцию сглаживания Уиттекера, существует ли какой-либо алгоритм обратного сглаживания Уиттекера? Даже приближение может быть полезным.

Предварительная попытка

y = B*z            //solve(B,z)
z = B^{-1} y       // *B
y = B*z

так что я должен выяснить B что это

E <- eye(length(y))
D <- diff(E, lag = 1 , differences 2)
B <- E + (lambda * t(D) %*% D)

so

y<- B * z

что я понимаю, так что сглаживание происходит без потерь (информация не теряется при преобразовании), поэтому инверсия должна содержать ту же информацию, что и исходные данные.


Как показано, не кажется невозможным создать функцию, обратную сглаживанию Уиттекера, но я ожидаю, что такая функция уже существует в R.

Существует ли в R функция, обратная сглаживанию Уиттекера?


person hhh    schedule 12.09.2018    source источник
comment
Сглаживание Уиттакера — это не функция, она возвращает набор точек/временной ряд. Чтобы сделать его функцией, потребуется линейная или, например, сплайновая интерполяция. И, очевидно, исходные точки данных не могут быть восстановлены из сглаженных точек (сглаживание всегда связано с потерями).   -  person Hans W.    schedule 15.09.2018
comment
@ХансВ. существует ли приближенная обратная функция сглаживания Уиттекера? Если у вас есть шумовой сигнал, часто гораздо проще предсказать его версию, сглаженную Уиттекером, но тогда я хотел бы получить исходный сигнал или некоторые приблизительные значения?   -  person hhh    schedule 17.09.2018
comment
Нет. Подумайте о линейной регрессии: совершенно разные наборы точек данных будут генерировать одну и ту же линию регрессии; тут то же самое. Я думаю, вам следует пересмотреть, какую проблему вы действительно хотите решить - или описание задачи, которую вы хотите решить, все еще неясно для меня.   -  person Hans W.    schedule 19.09.2018


Ответы (1)


Похоже, вы были абсолютно правы, и есть обратное сглаживание Уиттекера (за исключением, возможно, конечных точек). Действительно, довольно легко отменить процедуру сглаживания, предполагая, что параметры lambda и d одинаковы, и вы были на правильном пути.

library(pracma)
inv_whittaker <- function(z, lambda = 1600, d = 2) {
    m = length(z); E = eye(m)
    D = diff(E, lag = 1, differences = d)
    B = E + (lambda * t(D) %*% D)
    y = B %*% z
    return(y)
}

Давайте применим это к примеру на странице справки, начав с функции синуса с «передержкой».

xx = linspace(0, 10*pi, 1000)
t1 = sin(xx) + rnorm(1000)/10
t3 = whittaker(t1, lambda = 1600)

Теперь пытаемся вернуть t1 от t3.

t2 = inv_whittaker(t3, lambda = 1600)
max(abs(t1-t2))
## [1] 3.527845e-12

Я нашел это довольно удивительным, и я не совсем уверен, что это работает так хорошо для всех угловых случаев и конечных точек, например, когда вы берете для t1 точную синусоиду.

person Hans W.    schedule 19.09.2018