平均、SD、スキュー、尖度が既知のRの分布を生成することは可能ですか?これまでのところ、最適なルートは乱数を作成し、それに応じて変換することです。適応できる特定のディストリビューションを生成するように調整されたパッケージがある場合、私はまだそれを見つけていません。ありがとう
SuppDistsパッケージにはJohnsonディストリビューションが含まれています。ジョンソンは、モーメントまたは変位値のいずれかに一致する分布を提供します。その他のコメントは、4モーメントが配布を行わないということは正しいです。しかし、ジョンソンは確かにしようとします。
次に、Johnsonをいくつかのサンプルデータに適合させる例を示します。
require(SuppDists)
## make a weird dist with Kurtosis and Skew
a <- rnorm( 5000, 0, 2 )
b <- rnorm( 1000, -2, 4 )
c <- rnorm( 3000, 4, 4 )
babyGotKurtosis <- c( a, b, c )
hist( babyGotKurtosis , freq=FALSE)
## Fit a Johnson distribution to the data
## TODO: Insert Johnson joke here
parms<-JohnsonFit(babyGotKurtosis, moment="find")
## Print out the parameters
sJohnson(parms)
## add the Johnson function to the histogram
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")
最終的なプロットは次のようになります。
4つの瞬間が分布を完全にキャプチャしない方法について他の人が指摘する問題の少しを見ることができます。
幸運を!
[〜#〜] edit [〜#〜]ハドリーがコメントで指摘したように、ジョンソンの適合は見落としている。簡単なテストを行い、moment="quant"
を使用してJohnson分布を近似しました。結果はずっと良く見えます:
parms<-JohnsonFit(babyGotKurtosis, moment="quant")
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")
次のものが生成されます。
モーメントを使用してフィットするときにジョンソンが偏っているように見える理由はありますか?
これは興味深い質問ですが、実際には良い解決策はありません。あなたは他の瞬間を知らなくても、分布がどのように見えるべきかを知っていると思います。たとえば、ユニモーダルです。
この問題に取り組む方法はいくつかあります。
基礎となる分布を想定し、モーメントを一致させます。これを行うための多くの標準Rパッケージがあります。 1つの欠点は、多変量一般化が不明確になる可能性があることです。
サドルポイント近似。この論文では:
Gillespie、C.S.およびRenshaw、E. 改善された点近似。Mathematical Biosciences、2007年。
最初のいくつかの瞬間だけが与えられたときのpdf/pmfの回復を検討します。この手法は、歪度が大きすぎないときに機能することがわかりました。
ラゲール展開:
Mustapha、H.およびDimitrakopoulosa、R. モーメントを伴う多変量確率密度の一般化ラゲール展開 。 アプリケーションとコンピューターと数学、2010年。
この論文の結果はより有望に思えますが、コーディングしていません。
この質問は3年以上前に尋ねられたので、私の答えが手遅れにならないことを願っています。
ある瞬間を知っているときに分布を一意に識別する方法がisです。その方法は、Maximum Entropyの方法です。この方法から生じる分布は、分布の構造についての無知を最大化する分布です、あなたが知っていることを与えます。指定したモーメントを持っているがMaxEnt分布ではない他の分布は、入力したものよりも多くの構造を暗黙的に想定しています。最大化する関数は、シャノンの情報エントロピー、$ S [p(x)] =-\ int p(x)log p(x) dx $。平均、sd、歪度、尖度は、それぞれ分布の1番目、2番目、3番目、4番目のモーメントの制約として変換されます。
問題は、最大化することです[〜#〜] s [〜#〜]制約に従います:1)$\int x p(x) dx = "first moment" $、2)$\int x ^ 2 p(x) dx = "second moment" $、3)...など
「Harte、J.、Maximum Entropy and Ecology:A Theory of Aundance、Distribution、Energetics(Oxford University Press、New York、2011)」という本をお勧めします。
Rでこれを実装しようとするリンクを次に示します。 https://stats.stackexchange.com/questions/21173/max-entropy-solver-in-r
分布を複製するには密度推定が必要であることに同意します。ただし、モンテカルロシミュレーションで一般的なように、数百の変数がある場合は、妥協する必要があります。
推奨されるアプローチの1つは次のとおりです。
ステップ4の結果データには、目的の平均、標準、歪度、尖度が含まれます。
警告:
あなたのための1つのソリューションは、PearsonDSライブラリかもしれません。これにより、尖度>歪度^ 2 + 1という制限のある最初の4つのモーメントの組み合わせを使用できます。
その分布から10個のランダムな値を生成するには、次を試してください。
library("PearsonDS")
moments <- c(mean = 0,variance = 1,skewness = 1.5, kurtosis = 4)
rpearson(10, moments = moments)
これらのパラメーターは、実際には分布を完全には定義していません。そのためには、密度または同等の分布関数が必要です。
エントロピー法は良い考えですが、データサンプルがある場合は、瞬間のみの使用と比較してより多くの情報を使用します!そのため、モーメントフィットの安定性が低下することがよくあります。分布がどのように見えるかについての情報がもうない場合、エントロピーは良い概念ですが、より多くの情報がある場合、例えばサポートについては、それを使用してください!データが歪んでいて正の場合、対数正規モデルを使用することをお勧めします。上限も有限であることがわかっている場合は、対数正規分布を使用せずに、4パラメーターのベータ分布を使用してください。サポートまたはテールの特性について何もわかっていない場合は、スケーリングおよびシフトされた対数正規モデルで十分かもしれません。尖度に関してより柔軟性が必要な場合は、たとえば多くの場合、スケーリング+シフトを使用したlogTで十分です。また、近似が正規に近いはずであることがわかっている場合、これが当てはまる場合は、正規分布を含むモデルを使用します(とにかく多くの場合)、そうでない場合は、たとえば一般化された割線双曲線分布を使用します。このすべてを実行する場合、ある時点でモデルにいくつかの異なるケースがあります。ギャップや悪い遷移効果がないことを確認する必要があります。
@Davidと@Carlが上で書いたように、異なるディストリビューションを生成するための専用のパッケージがいくつかあります。 CRANの確率分布タスクビュー 。
理論(特定のパラメーターを使用して特定の分布に適合する数値のサンプルを描画する方法)に興味がある場合は、適切な式を探してください。 Wikiのガンマ分布 を参照して、スケールと形状を計算するために提供されたパラメーターを使用して、簡単な品質システムを構成します。
具体例 here を参照してください。ここでは、平均と標準偏差に基づいて、必要なベータ分布のアルファとベータのパラメーターを計算しました。