Деконволюция с помощью R (пакет decon и deamer)

У меня есть модель вида: у = х + шум. Я знаю распределение «y» и шума и хотел бы получить распределение «x». Итак, я попытался выполнить деконволюцию дистрибутивов с помощью R. Я нашел 2 пакета (decon и deamer), и я подумал, что оба метода должны сделать более или менее одинаковыми, но я не понимаю, почему деконволюция с помощью DeconPdf дает мне что-то вроде нормального дистрибутива и деконволюция с помощью deamerKE дает мне равномерное распределение. Вот пример кода:

library(fitdistrplus) # for rweibull
library(decon) # for DeconPdf
library(deamer) # for deamerKE

set.seed(12345)
y <- rweibull(10000, shape=5.780094, scale=0.00204918)
noise <- rnorm(10000, mean=0.002385342, sd=0.0004784688)
sdnoise <- sd(noise)

est <- deamerKE(y, noise.type="Gaussian", 
                mean(noise), sigma=sdnoise)
plot(est)

estDecon <- DeconPdf(y, sdnoise, error="normal", fft=TRUE)
plot(estDecon)

Изменить (в ответ на Жюльена Штирнемана):

Я не уверен в повторной параметризации. Моя реальная проблема такова: у меня есть время реакции (RT), которое теоретически можно описать как f(RT) = g(время различения) + h(время выбора), где f,g и h могут быть преобразованиями этих временных значений. У меня есть значения «RT» и «время дискриминации» в моем наборе данных. И меня интересует время выбора или, может быть, h (время выбора). С оценкой плотности ядра я обнаружил, что распределение Вейбулла лучше всего соответствует значениям 1/RT, в то время как нормальное распределение лучше всего соответствует 1/(время дискриминации). Вот почему я могу записать свою проблему как 1/RT = 1/(время различения) + h(время выбора) или y = x + шум (где я считал шум равным 1/(время различения)). Моделирование этих времен реакции дало мне следующее распределение со следующими параметрами:

y <- rweibull(10000, shape=5.780094, scale=0.00204918)
noise <- rnorm(10000, mean=0.002385342, sd=0.0004784688)

Что вы имеете в виду под повторной параметризацией? Использование разных значений, например. для параметра шкалы?


person Giuseppe    schedule 17.09.2012    source источник


Ответы (3)


В ответ на ваш последний комментарий: ошибка сдвигает наблюдаемые значения. Сигнал, который вы хотите развернуть, находится где-то между 0 и ~ 0,3, я думаю. Вот некоторый код, использующий deamer:

library(actuar) # for rinvweibull
library(deamer)
set.seed(123)
RT <- rinvweibull(30000, shape=5.53861156, scale=488)/1000
RT <- RT[RT<1.5]
noise <- 1/rnorm(30000, mean=0.0023853421, sd=0.0004784688)/1000
noise <- noise[noise<1.5]

ST <- deamerSE(RT, errors=noise, from=0, to=0.3)
plot(ST)

Это то, что вы получите, используя непараметрическую деконволюцию (независимо от реализации, пакетов и т. д.). К вашему сведению, ваше отношение сигнал/шум чрезвычайно низкое... то, что вы наблюдаете, на самом деле почти просто шум. Это сильно влияет на оценку интересующей вас плотности, особенно при использовании непараметрических методов, таких как попытка найти иголку в стоге сена. Вам следует пересмотреть оценку плотности и попытаться получить только несколько интересующих величин...

Удачи, Жюльен Штирнеманн

person julien stirnemann    schedule 18.09.2012
comment
Вы сказали, что сигнал, который я хочу развернуть, находится где-то между 0 и ~ 0,3. Использование только границ от 0 до 0,3 не дает мне плотности, которая интегрируется до 1, не так ли? Я спрашиваю себя, должен ли я тогда подумать об увеличении плотности? - person Giuseppe; 25.09.2012

В вашем сообщении есть несколько проблем. Во-первых: в задачах непараметрической деконволюции вы обычно не «знаете» распределение «у». Скорее у вас есть образец «y», который, как вы предполагаете, наблюдается с аддитивным шумом, «x» не наблюдается. Не делается никаких предположений относительно «у» или «х», а только «шум». Ваша презентация, кажется, подразумевает, что вы рассматриваете параметрическую проблему (для которой ни deamer, ни decon не помогают). Во-вторых: будьте осторожны, вы рассматриваете нецентрированный шум... с которым может справиться деамер, но не декон. Вот пример кода:

library(decon) # for DeconPdf
library(deamer) # for deamerKE

set.seed(12345)
shape=5; scale=1; mu=0; sd=0.2

x <- rweibull(5000, shape=shape, scale=scale)
noise <- rnorm(5000, mean=mu, sd=sd)
y=x+noise
curve(dweibull(x,shape,scale),lwd=2, from = 0, to = 2)

est <- deamerKE(y, noise.type="Gaussian", mu=mu, sigma=sd, from=0, to=2)
lines(est)

estDecon <- DeconPdf(y, sd, error="normal", fft=TRUE)
lines(estDecon, lty=2)

legend('topright', lty=c(1,1,2), lwd=c(2,1,1), 
    legend=c("true", "deamerKE", "DeconPdf"))

Как видно из графика, даже при центрированном шуме (в моем примере mu=0) оценка лучше с деамером: это из-за адаптивной оценки. Вы, вероятно, могли бы получить аналогичные результаты с помощью decon, но вам пришлось бы настроить параметр пропускной способности, используя функции, предусмотренные для этого в пакете. Что касается параметров, которые вы указали, преобразования Фурье чрезвычайно «плоские». Это очень затрудняет для любой универсальной реализации выбор подходящего параметра полосы пропускания (либо адаптивно, как в deamer, либо с использованием оценки, как в decon). Игра с параметром пропускной способности в deconPdf тоже не помогает, вероятно, из-за числовых ограничений. Ваша проблема потребует тонкой настройки кода функций deamer, чтобы можно было исследовать более крупные наборы моделей. Это также значительно увеличило бы время оценки. Не могли бы вы лучше рассмотреть возможность какой-либо перепараметризации вашей проблемы?

Бест, Жюльен Штирнеманн

person julien stirnemann    schedule 17.09.2012

После вашего второго сообщения: я не уверен, что полностью понимаю вашу проблему. Однако, насколько я понимаю, 2 варианта:

1) без использования какой-либо функции преобразования, время выбора = RT - время различения. Если RT и время дискриминации наблюдаются для каждого человека в вашем наборе данных, время выборки известно детерминистически, и это не имеет ничего общего с деконволюцией.

2) Если РТ наблюдается в одном и.и.д. время выборки и выборки в другой независимой выборке, тогда да, единственный выход — рассмотреть оценку плотности деконволюции. Однако, несмотря на то, что вы сделали некоторые параметрические предположения, используя методы подгонки, вы действительно не знаете плотности RT или DT. Рассматривая DT как шум, ваша проблема такова: RT = ST + шум со вспомогательной выборкой i.i.d. шум, заданный вашим образцом времени дискриминации. Вы хотите оценить плотность ST, которая не наблюдается. Единственный пакет, который может выполнять деконволюцию в этой ситуации, это deamer (насколько мне известно) с функцией deamerSE. Если я правильно изложил вашу проблему, вы должны посмотреть примеры в руководстве. Я бы также рекомендовал использовать необработанные данные без преобразований (по крайней мере, при первом анализе). Пример:

deamerSE(RT, errors=DT)

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

Бест, Жюльен Штирнеманн

person julien stirnemann    schedule 17.09.2012
comment
Да, мы можем записать мою проблему как RT = ST + шум. Это тоже была моя первая идея. Я уже пытался оценить ST с помощью deamerSE, как вы описали. Но это дало мне странный дистрибутив. У меня есть наблюдения от 0,2 секунды до 1,4 секунды (использование миллисекунд вместо секунд не сработало). Поэтому я попытался смоделировать наблюдения (а также попробовал некоторые их преобразования), чтобы выяснить, всегда ли я получаю такую ​​странную оценку плотности. Является ли это странное распределение результатом использования нецентрированных ошибок? И как правильно выбрать от и до? - person Giuseppe; 18.09.2012
comment
Я мог бы проверить, можете ли вы дать точную имитационную модель для непреобразованного ST и шума (скажем, с использованием плотностей на R+) вместе с размерами выборки? - person julien stirnemann; 18.09.2012
comment
Вот имитационная модель, которая, на мой взгляд, подходит лучше всего: ссылка. Кстати, я нашел хорошее описание моей проблемы здесь. Точно такая же ситуация у меня. - person Giuseppe; 18.09.2012
comment
Кстати, я нашел хорошее описание моей проблемы здесь. Точно такая же ситуация у меня. - person Giuseppe; 18.09.2012