質問

平均、SD、スキュー、尖度がわかっているRで分布を生成することは可能ですか?これまでのところ、最良のルートは乱数を作成し、それに応じてそれらを変換することです。適応できる特定の分布を生成するために調整されたパッケージがある場合、まだ発見していません。ありがとう

役に立ちましたか?

解決

SuppdistsパッケージにはJohnson Distributionがあります。ジョンソンは、モーメントまたは分位のいずれかに一致する分布を提供します。他のコメントは、4つの瞬間が分布を作成しないことを正しいです。しかし、ジョンソンは確かに試してみます。

ジョンソンをいくつかのサンプルデータに適合させる例は次のとおりです。

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")

最後のプロットは次のようになります:

enter image description here

他の人が4つの瞬間がどのように分布を完全にキャプチャしないかについて他の人が指摘する問題を少し見ることができます。

幸運を!

編集ハドリーがコメントで指摘したように、ジョンソンフィットは見渡せます。私は簡単なテストを行い、ジョンソンの配布を使用してフィットしました moment="quant" これは、4つの瞬間の代わりに5つのカリナイルを使用してジョンソン分布に適合します。結果はずっと良く見えます:

parms<-JohnsonFit(babyGotKurtosis, moment="quant")
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")

これは次のとおりです。

enter image description here

瞬間を使ってフィットするときにジョンソンが偏見を持っているように見える理由は誰にもありますか?

他のヒント

これは興味深い質問であり、実際には良い解決策はありません。私は、あなたが他の瞬間を知らないとしても、あなたは分布がどのように見えるべきかについての考えを持っていると思います。たとえば、それは単峰性です。

この問題に取り組むいくつかの異なる方法があります:

  1. 基礎となる分布と一致のモーメントを想定します。これを行うための多くの標準Rパッケージがあります。欠点の1つは、多変量の一般化が不明である可能性があることです。

  2. サドルポイント近似。この論文では:

    Gillespie、CSおよびRenshaw、E。 改善されたサドルポイント近似。 数学的生物科学, 2007.

    最初の数瞬間のみが与えられた場合、PDF/PMFの回復を検討します。このアプローチは、歪度がそれほど大きくない場合に機能することがわかりました。

  3. Laguerre拡張:

    Mustapha、H。およびDimitrakopoulosa、R。 モーメントを伴う多変量確率密度の一般化されたラゲール拡張. アプリケーション付きコンピューターと数学, 2010.

    この論文の結果はより有望に見えますが、私はそれらをコーディングしていません。

この質問は3年以上前に尋ねられたので、私の答えが遅すぎないことを願っています。

そこには いくつかの瞬間を知るときに分布を一意に識別する方法。その方法はの方法です 最大エントロピー. 。この方法から生じる分布は、分布の構造に関するあなたの無知を最大化する分布です。 あなたが知っていることを考えると. 。また、指定した瞬間を持っているが、最大分布ではない他の分布は、入力するものよりも多くの構造を暗黙的に仮定しています。最大化する機能は、Shannonの情報エントロピー、$ s [p(x)] = - int p(x)log p(x)dx $です。平均を知って、SD、歪度、尖度は、それぞれ分布の最初、2番目、3番目、および4番目の瞬間に制約として翻訳されます。

問題は、最大化することです s 制約の対象:1)$ int xp(x)dx = "First Moment" $、2)$ int x^2 p(x)dx = "2番目のモーメント" $、3)...など

「Harte、J。、Maximum Entropy and Ecology:A豊富、分布、およびエネルギーの理論(Oxford University Press、New York、2011)をお勧めします。

これをRに実装しようとするリンクがあります。https://stats.stackexchange.com/questions/21173/max-entropy-solver-in-r

分布を複製するには密度の推定が必要であることに同意します。ただし、モンテカルロシミュレーションで典型的なように、数百の変数がある場合は、妥協する必要があります。

提案されたアプローチの1つは次のとおりです。

  1. Fleishman変換を使用して、与えられたスキューと尖度の係数を取得します。 fleishmanはスキューと尖度を取り、係数を与えます
  2. n通常の変数を生成します(平均= 0、std = 1)
  3. Fleishman係数を使用して(2)のデータを変換して、通常のデータを与えられたスキューと尖度に変換します
  4. このステップでは、ステップ(3)のデータを使用し、new_Data =希望平均 +(ステップ3からのデータ)*目的のSTDを使用して、目的の平均および標準偏差(STD)に変換します。

ステップ4の結果のデータは、望ましい平均、STD、歪度、尖度を持ちます。

警告:

  1. fleishmanは、歪度とKurtoisのすべての組み合わせに役立ちません
  2. 上のステップは、相関していない変数を想定しています。相関データを生成したい場合は、Fleishman Transformの前にステップが必要になります

あなたのための1つの解決策は、Pearsondsライブラリかもしれません。最初の4つの瞬間の組み合わせを使用することができます。

その分布から10のランダム値を生成するには、次のことを試してください。

library("PearsonDS")
moments <- c(mean = 0,variance = 1,skewness = 1.5, kurtosis = 4)
rpearson(10, moments = moments)

これらのパラメーターは、実際には分布を完全に定義していません。そのためには、密度または同等に分布関数が必要です。

エントロピー方式は良い考えですが、データサンプルがある場合は、瞬間のみの使用と比較してより多くの情報を使用してください!したがって、瞬間のフィット感はしばしば安定性が低くなります。分布がどのように見えるかについてこれ以上の情報がない場合、エントロピーは良い概念ですが、サポートに関する詳細情報がある場合は、それを使用してください!データが歪んでいて肯定的である場合、対数正規モデルを使用することをお勧めします。また、上部の尾が有限であることがわかっている場合は、対数正規型ではなく、4パラメーターベータ分布を使用しません。サポートやテールの特性について何も知られていない場合、スケーリングされたシフトされた対数正規モデルでは問題ありません。尖度に関してより柔軟性が必要な場合は、スケーリング +シフトを備えたlogtなどが問題ありません。また、フィット感がほぼ正常であるべきであることを知っている場合、これが当てはまる場合は、正規分布を含むモデル(とにかく場合によっては)を使用します。これをすべて行いたい場合は、ある時点でモデルにいくつかの異なるケースがあり、ギャップや悪い移行効果がないことを確認する必要があります。

@davidと@carlが上に書いたように、異なる分布を生成するためのいくつかのパッケージがあります。 CRANの確率分布タスクビュー.

理論に興味がある場合(特定のパラメーターを使用して特定の分布に適合する数値のサンプルを描画する方法)、適切な式を探してください。 ウィキのガンマ分布, 、そして、スケールと形状を計算するための提供されたパラメーターを備えたシンプルな品質システムを構成します。

具体的な例を参照してください ここ, 、平均および標準偏差に基づいて、必要なベータ分布のアルファパラメーターとベータパラメーターを計算しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top