2011-06-26 13 views
5

次のように私たちはどちらかgammaまたはStudent's t分布MASSを使用することができ、1枚の配布と実数値の数字(x)のデータセットにフィットするように:私は信じていたらどうR:大規模なデータセットを複数の分布の組み合わせに適合させる方法は?

fitdistr(x, "gamma") 

または

fitdistr(x2, "t") 

私のデータセットはガンマ分布とt分布の合計に適合するはずですか?

P(X) = Gamma(x) + t(x) 

は私が最尤Rでフィッティングを使用した確率分布の混合物のパラメータをフィットすることはできますか?

+2

(他のポスターも想定してきたように)私はあなたの分布は*混合物であることをあなたが意味すると仮定*とt(すなわち、個々のポイントがあることガンマ分布またはt分布のいずれかから引き出される)。ちょっとややこしいもう1つの選択肢は、個々の値がガンマとt変数の合計である、つまりガン​​マとtの畳込みであるということです(文字通りあなたの質問を読んだと思います)。どうか明らかにしてください。それが後者なら、私は 'distr'パッケージを使って解決策を提案することができます... –

+0

2年以上前のオリジナルのポスターではありませんが、' distr'を使って畳み込みのためのあなたの提案された解決策に非常に興味があります。パッケージ。 – msp

答えて

3

平均値がnormal distributionまたはexponential distributionのようないくつかのパラメータには、解析型maximum-likelihood estimatorsがあります。他のパラメータについては、分析推定値はありませんが、numerical analysisを使用すると、妥当なパラメータ推定値を見つけることができます。

Rのfitdistr()関数は、optim()関数を呼び出すことによってlog-likelihood関数の数値最適化を使用します。データがガンマ分布とt分布の混合であると考えるならば、そのような混合を記述する尤度関数を作るだけです。次に、それらのパラメータ値を最適化のためにoptim()に渡します。 Rでこのプログラムを実行

library(MASS) 

vals = rnorm(n = 10000, mean = 0, sd = 1) 
print(summary(x_vals)) 

ll_func = function(params) { 
    log_probs = log(dnorm(x = vals, mean = params[1], sd = params[2])) 
    tot = sum(log_probs) 
    return(-1 * tot) 
}  

params = c(0.5, 10) 

print(ll_func(params)) 
res = optim(params, ll_func) 
print(res$par) 

この出力生成します:ここで分布を当てはめるには、このアプローチを用いた例である平均値の初期値にかなり近いです

[1] "mean: 0.0223766157516646" 
[1] "sd: 0.991566611447471" 

= 0、SD = 1

2つのディストリビューションが混在している場合は、ディストリビューション間の相対的な重みを指定する追加のパラメータが1つあることを忘れないでください。また、一度にたくさんのパラメータを設定することに注意してください。無料のパラメータがたくさんある場合は、overfittingを心配する必要があります。

関連する問題