Rでゼロに膨らんだパラメーターの密度をどのように推定できますか?


10

次のようなゼロの多いデータセットがあります。

set.seed(1)
x <- c(rlnorm(100),rep(0,50))
hist(x,probability=TRUE,breaks = 25)

密度の線を描きたいのですが、density()関数はxの負の値を計算する移動ウィンドウを使用します。

lines(density(x), col = 'grey')

density(... from, to)引数はありますが、次のプロットでわかるように、これらは計算を切り捨てるだけで、ウィンドウを変更せず、0での密度がデータと一致するように見えます。

lines(density(x, from = 0), col = 'black')

(補間が変更された場合、黒い線は灰色の線よりも0の方が密度が高いと予想されます)

ゼロでの密度のより良い計算を提供するこの関数の代替はありますか?

ここに画像の説明を入力してください

回答:


14

離散スパイクが含まれているため、密度はゼロで無限です。ゼロの比率を使用してスパイクを推定し、それが滑らかであると仮定して密度の正の部分を推定する必要があります。KDEは負の値にある程度の重みを付けるため、左側で問題が発生します。有用なアプローチの1つは、ログに変換し、KDEを使用して密度を推定してから、元に戻すことです。参考として、Wand、Marron&Ruppert(JASA 1991)を参照してください。

次のR関数は、変換された密度を実行します。

logdensity <- function (x, bw = "SJ") 
{
    y <- log(x)
    g <- density(y, bw = bw, n = 1001)
    xgrid <- exp(g$x)
    g$y <- c(0, g$y/xgrid)
    g$x <- c(0, xgrid)
    return(g)
}

次に、必要なプロットを以下に示します。

set.seed(1)
x <- c(rlnorm(100),rep(0,50))
hist(x,probability=TRUE,breaks = 25)
fit <- logdensity(x[x>0]) # Only take density of positive part
lines(fit$x,fit$y*mean(x>0),col="red") # Scale density by proportion positive
abline(v=0,col="blue") # Add spike at zero.

ここに画像の説明を入力してください


P(X=0)

P(X=0)

これは便利です。fyi:bw = "SJ"は変換されていない空間の密度に影響を与えるようですが、logSensityは "SJ"とデフォルトの "nrd0"を使用しても同じです... SJリファレンスを参照しようとしています: "Sheather andジョーンズ(1991)カーネル密度推定のための信頼できるデータベースの帯域幅選択方法。jstor.org/stable/2345597
安倍

4

ゼロを個別に処理する必要があるということは、ロブハインドマンに同意します。「リフレクション」、「正規化」、「線形結合」など、制限付きサポートのある変数のカーネル密度推定を処理する方法はいくつかあります。これらはRのdensity関数には実装されていないようですが、ベンヤンのkdensStata用パッケージで利用できます。


1

論理的な下限(0など、ただし他の値である可能性があります)を持つデータがある場合のもう1つのオプションは、データが下に行かず、通常のカーネル密度推定がその下限より下の値を配置する(または上限がある場合) 、またはその両方)は、ログスプライン推定を使用します。Rのlogsplineパッケージはこれらを実装し、関数は境界を指定するための引数を持っているので、推定は境界に行きますが、それを超えずに1にスケーリングします。

oldlogspline間隔の打ち切りを考慮に入れるメソッド(関数)もあるので、これらの0が正確な0ではないが、0と他の数値(たとえば、検出限界)の間の値を表すことがわかるように丸められる場合、その情報をフィット関数に与えることができます。

余分な0が真の0である(丸められていない)場合は、スパイクまたは点の質量を推定する方法がより適切ですが、ログスプライン推定と組み合わせることもできます。


0

帯域幅を下げてみてください(青い線はの場合adjust=0.5)、 ここに画像の説明を入力してください

しかし、おそらくKDEはそのようなデータを処理するための最良の方法ではありません。


あなたがお勧めする別の方法はありますか?
安倍首相

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