2012-09-17 65 views
2

我有一個形式模型:y = x + noise。我知道'y'和噪音的分佈,並希望有'x'的分佈。所以我試圖用R去卷積分佈。我發現了2個軟件包(decon和deamer),我認爲這兩種方法應該差不多,但我不明白爲什麼使用DeconPdf解卷積給我提供了一個類似於正態分佈的東西,使用deamerKE去卷積會給我一個均勻的分佈。下面是一個例子代碼:用R解卷積(decon和deamer包)

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) 

編輯(響應Julien Stirnemann):

我不知道如何重新參數化。我的實際問題是: 我有理論上可以描述爲f(RT)= g(鑑別時間)+ h(選擇時間)的反應時間(RT),其中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) 

什麼意思與重新參數化?使用不同的值例如爲比例參數?

回答

1

作爲一個回答你最後的評論:錯誤轉移的觀測值。我想你想去卷積的信號介於0到0.3之間。下面是一些代碼使用迪默:

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) 

這是你會得到什麼用非參數解卷積(不管實現,包等)。只是爲了您的信息,您的信噪比極低......您觀察到的實際上幾乎只是噪音。這會對你感興趣的密度的估計產生很大的影響,特別是在使用非參數方法時,就像試圖在乾草堆中尋找針一樣。你應該重新考慮估計密度,而試圖獲得的利息只有幾個數量...

祝你好運, 朱利安Stirnemann

+0

你說我希望去卷積的信號介於0和〜0.3之間。只使用從0到0.3的邊界不會給我一個與1積分的密度,不是嗎?我在問自己是否應該考慮升級密度呢? – Giuseppe

3

您的帖子中有幾個問題。第一:在非參數反捲積問題中,你通常不知道'y'的分佈。相反,你有一個你假設用加性噪聲觀察到的'y'樣本,'x'是不可見的。 '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")) 

當你從圖中看到的,即使具有位於中心的噪聲(畝在我的例子= 0),估計是與迪默更好:這是因爲自適應估計的。你可能可以用decon來獲得類似的結果,但是你必須使用爲包提供的函數來調整帶寬參數。 關於您提供的參數,傅立葉變換非常「平坦」。這使得任何通用實現都很難選擇合適的帶寬參數(或者像deamer中那樣自適應地使用,或者像decon中一樣使用估計)。 使用deconPdf中的帶寬參數也無濟於事,可能是因爲數字限制。你的問題需要在deamer函數的代碼中進行一些微調,以便探索更大的模型集合。這也會大大增加估計時間。你是否應該考慮以某種方式重新參數化你的問題?

最佳, 朱利安Stirnemann

1

追隨你的第二個職位:我不知道我完全理解你的問題。然而,據我所知,有兩種可能性:

1)不使用任何轉換函數,選擇時間= RT - 區分時間。如果RT和鑑別時間都在數據集的每個個體上都觀察到,則選擇時間是確定性的已知 - 這與解卷積無關。

2)如果RT在一個i.i.d.中被觀察到樣本和選擇時間在另一個獨立樣本,那麼是的,唯一的出路是考慮解卷積密度估計。但是,儘管您已經使用擬合方法做出了一些參數假設,但您確實不知道RT或DT的密度。考慮到DT是噪聲,你的問題是: RT = ST +噪聲,帶有i.i.d的輔助採樣。你的歧視時間樣本給出的噪音。你希望估計未被觀察到的ST的密度。在這種情況下唯一可以執行解卷積的軟件包是deamerSE(據我所知)和deamerSE函數。如果我正確說明了你的問題,你應該看看手冊中的例子。我還建議在不進行轉換的情況下使用原始數據(至少在第一次分析中)。 一個例子:

deamerSE(RT, errors=DT) 

這裏再次不集中的錯誤(這是肯定的),所以你必須從調整和,佔已產生錯誤的轉變......這也是在這個deamer手冊的例子。

最佳, 朱利安Stirnemann

+0

是的,我們可以寫我的問題,因爲RT = ST +噪聲。這也是我的第一個想法。正如你所描述的,我已經試圖用deamerSE來估計ST。但是,這給了我一個奇怪的[發行](http://img6.imagebanana.com/img/w6y0p8ka/Rplot.png)。我有從0.2秒到1.4秒的觀察(使用毫秒而不是秒)不起作用。所以我試圖模擬觀測(並嘗試對這些進行一些變換),以確定我是否總是得到如此奇怪的密度估計。這種奇怪的分佈是使用非中心錯誤的結果嗎?我怎樣才能正確地解決問題? – Giuseppe

+0

我可以檢查是否可以給出未經轉換的ST和噪聲(例如使用R +上的密度)以及樣本大小的準確仿真模型? –

+0

這是一個我認爲最適合的模擬模型:[link](http://pastebin.com/nc2mWF1L)。順便說一下,我發現了一個很好的描述我的問題[這裏](http://stats.stackexchange.com/questions/33703/how-could-i-extract-the-distribution-of-one-rv-when-given -a-設置和數-的兩-R的)。這與我的情況完全相同。 – Giuseppe