2016-08-08 17 views
1

一部のデータに切り捨て正規分布を合わせようとしています。しかし、私は次のようなエラーに実行されていますfitdistrplusを使用してtruncnormをフィッティングする

<simpleError in optim(par = vstart, fn = fnobj, fix.arg = fix.arg, obs = data,  gr = gradient, ddistnam = ddistname, hessian = TRUE, method = meth,  lower = lower, upper = upper, ...): non-finite finite-difference value [1]> 
Error in fitdist(testData, "truncnorm", start = list(a = 0, mean = 0.8, : 
    the function mle failed to estimate the parameters, 
       with the error code 100 

私が間違って何が起こっているのかわからないんだけど - 私は最初の推測が間違っているかよりも高い場合には、いくつかの例に当てはめ問題があることを読みました実際の値ですが、私はいくつかの異なる開始値を試しましたが、どれもうまくいかないようです。ここで

は私のデータの小さなサンプル、と私はエラーを取得するために使用するコードです:

library(fitdistrplus) 
library(truncnorm) 
testData <- c(3.2725167726, 0.1501345235, 1.5784128343, 1.218953218, 1.1895520932, 
       2.659871271, 2.8200152609, 0.0497193249, 0.0430677458, 1.6035277181, 
       0.2003910167, 0.4982836845, 0.9867184303, 3.4082793339, 1.6083770189, 
       2.9140912221, 0.6486576911, 0.335227878, 0.5088426851, 2.0395797721, 
       1.5216239237, 2.6116576364, 0.1081283479, 0.4791143698, 0.6388625172, 
       0.261194346, 0.2300098384, 0.6421213993, 0.2671907741, 0.1388568942, 
       0.479645736, 0.0726750815, 0.2058983462, 1.0936704833, 0.2874115077, 
       0.1151566887, 0.0129750118, 0.152288794, 0.1508512023, 0.176000366, 
       0.2499423442, 0.8463027325, 0.0456045486, 0.7689214668, 0.9332181529, 
       0.0290242892, 0.0441181842, 0.0759601229, 0.0767983979, 0.1348839304 
) 

fitdist(testData, "truncnorm", start = list(a = 0, mean = 0.8, sd = 0.9)) 

答えて

1

問題はMLE推定器は下限としてパラメータmeanにとってますます負の推定値を提供することであるaゼロになる傾向がある(後者はstartパラメータ内で指定してはならないことに注意が、内fix.arg):

fitdist(testData, "truncnorm", fix.arg=list(a=-.5), 
     start = list(mean = mean(testData), sd = sd(testData))) 
fitdist(testData, "truncnorm", fix.arg=list(a=-.2), 
     start = list(mean = mean(testData), sd = sd(testData))) 
fitdist(testData, "truncnorm", fix.arg=list(a=-.15), 
     start = list(mean = mean(testData), sd = sd(testData))) 

一つの可能​​性に大きな負の値を防ぐためにmeanの最適化のための下限を使用することです:

fitdist(testData, "truncnorm", fix.arg=list(a=0), 
     start = list(mean = mean(testData), sd = sd(testData)), 
     optim.method="L-BFGS-B", lower=c(0, 0)) 

しかし、これは推定手順を変えます。実際にはパラメータに追加の制約を課すことになり、下限の異なるさまざまな回答が得られる可能性があります。

+0

これは私にはいくつかの質問が残されています。私が扱っているデータはゼロより低くはできませんが、私がフィットしようとしているときに平均値が負であるかどうかは必ずしも気にしません私ができる限りデータへの配布。 「a」がゼロになると推定値がマイナスになることを考えれば、非予測を使用する方が良いでしょうか?データそのものが負でない場合、負の値の 'a'を持つことは理にかなっていますか? – mlinegar

+0

これは非常に興味深い質問です。私は少し前に自分自身につまずいたので、それらを理解するためにいくつかの考えがありました。しかし、統計的性質のため、http://stats.stackexchange.com/にもっと適していると思います。あなたの事例と共にそこに投稿すると、私はあなたに拡張された答えを提供してくれることになります(これは私が考えるように、すでにそこで利用可能かもしれません)。 –

+0

ありがとう、私はちょうどここに新しい質問を投稿しました:http://stats.stackexchange.com/questions/229624/fitting-truncated-distributions-using-fitdistrplus-with-a-lower-bound-of-zero – mlinegar

関連する問題