確率密度区間を見つける


9

私はベクトルを持っています

x <- c(1,2,3,4,5,5,5,6,6,6,6,
       7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
       7,7,7,7,7,7,7,7,8,8,8,8,9,9,9,10)

(私の実際のベクトルは> 10,000の長さです)、密度の90%が存在する間隔を見つけたいです。あるquantile(x, probs=c(0.05,0.95), type=5)最も適切か、他の方法はありますか?


あなたの質問は、「間隔...」について少し曖昧です-複数の間隔が存在する可能性があります。内側の90%だけに興味がありますか、つまり両側を対称的にトリミングしていますか?結局のところ、最小値から90%ileまで、データの90%がキャプチャされます。10%ileから最大値まで同様です。
イテレータ

最短の間隔、対称的な間隔(両端で等しい確率)などを探していますか?
Glen_b-モニカを復活させる2016

回答:


19

上記で指摘したように、密度の90%を含む間隔を定義するには、さまざまな方法があります。まだ指摘されていないものは、最高[事後]密度間隔wikipedia)であり、「エンドポイントの経験累積密度関数値の差が名目確率である最短間隔」として定義されています。

library(coda)
HPDinterval(as.mcmc(x), prob=0.9)

3

それは確かに最も簡単なアプローチのようです。機能はかなり速いです。私は、使用しているサンプルよりも数百倍大きいサンプルで常に使用しており、推定の安定性はサンプルサイズで良好です。

他のパッケージには、記述統計のより完全なセットを提供する関数があります。私が使用しているのはですがHmisc::describe、他にもdescribe機能を持つパッケージがいくつかあります。


3

あなたのやり方は賢明に思えます、特に例の離散データでは、

quantile(x,probs=c(0.05,0.95), type=5)
 5% 95% 
2.8 9.0

しかし別の方法は、計算密度カーネルを使用することです。

dx <- density(x)
dn <- cumsum(dx$y)/sum(dx$y)
li <- which(dn>=0.05)[1]
ui <- which(dn>=0.95)[1]
dx$x[c(li,ui)]
[1] 2.787912 9.163246

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.