2013-07-08 24 views
1

我有點通過在邊緣的情況下將R密度()函數的行爲不解...收斂ř密度()函數來delta函數

假設我添加越來越多的具有x點= 0進入模擬數據集。我期望的是,密度估計值將在x = 0時快速收斂(我對這意味着......的意圖模糊)。在實踐中,配合肯定會越走越窄,但很慢,見下面的序列圖中:

plot(density(c(0,0)), xlim=c(-2,2)) 
plot(density(c(0,0,0,0)), xlim=c(-2,2)) 
plot(density(c(rep(0,10000))), xlim=c(-2,2)) 
plot(density(c(rep(0,10000000))), xlim=c(-2,2)) 

但是,如果你增加噪聲的一點點的模擬數據,行爲要好得多:

plot(density(0.0000001*rnorm(10000000) + c(rep(0,10000000))), xlim=c(-2,2)) 

讓睡狗躺嗎?或者我錯過了密度()的用法?

+0

+1非常有趣的問題。我想自己解釋一下。 – asb

回答

1

?bw.nrd0,爲density默認帶寬選擇:

bw.nrd0實現了選擇高斯核密度估計的帶寬規則的拇指。它默認爲標準偏差的0.9倍,四分位間距除以樣本量的1.34倍至負五分之一功率(= Silverman's'經驗法則',Silverman(1986,page 48,eqn(3.31))除非四分位數當你的數據是恆定的重合時的肯定結果將得到保證。

,則四分位數相一致,所以最後子句保證肯定結果踢英寸這基本上意味着,所選擇的帶寬不是的數據的擴展的連續函數,在零

爲了說明:

> bw.nrd0(rep(0, 1e6)) 
[1] 0.05678616 
> bw.nrd0(rnorm(1e6, s=1e-6)) 
[1] 5.672872e-08 
+0

當你RTFM :-)時會發生什麼。很好的偵探工作。 –

+0

當您FFSME(查找...主題專家)時也會發生什麼:-)謝謝洪! – user2537291

0

其實(......腿之間的尾巴......)我現在意識到我的整個問題都被誤導了。對R來說相當陌生,我立即假定密度()試圖將不同寬度的高斯函數擬合到數據點上,從而優化高斯數的個數和它們各自的寬度。但事實上它正在做更簡單的事情。它只是抹掉每個數據點,並將塗片加起來,以便對數據進行平滑估計。密度()只是一個簡單的平滑算法。所以,是的,RTFM :)

+1

如果你想要正常的混合建模,請查看軟件包mclust:http://cran.r-project.org/web/packages/mclust/ –