2017-07-15 11 views
0

ポアソン分布に従うと思われるヒストグラムデータに適合させようとしています。関数を次のように宣言し、最小二乗法を使ってフィットさせようとします。MATLABで曲線フィッティングを使用したポアソンPDFパラメータの推定

xdata; ydata; % Arrays in which I have stored the data. 
%Ydata tell us how many times the xdata is repeated in the set. 

fun= @(x,xdata) (exp(-x(1))*(x(1).^(xdata)))./(factorial(xdata)) %Function I 
% want to use in the fit. It is a poisson distribution. 

x0=[60]; %Approximated value of the parameter lambda to help the fit 

p=lsqcurvefit(fun,x0,xdata,ydata); % Fit in the least square sense 

しかし私はそれが時々例えば、ゼロによる除算としなければならなかったことを、オンラインで、私が見てきた次の問題

Error using snls (line 48) 
Objective function is returning undefined values at initial point. 
lsqcurvefit cannot continue. 

が発生しました。これは分母に少量を加えることで解決できます。そのため、その不確定が決して起こらないようにします。しかし、それは私の場合ではありません。その後、問題は何ですか?

答えて

0

両方の方法(最大尤度とPDF曲線適合)を実装しました。

私のStack Overflow Q45118312 Github Repositoryのコードを見ることができます。

結果:

enter image description here

あなたが見ることができるように、最尤(MSEワイズ)単純で優れています。
したがって、PDF曲線適合法を使用する理由はありません。重い物を持ち上げるを行うコードの

一部は次のとおりです。

%% Simulation Parameters 

numTests   = 50; 
numSamples   = 1000; 
paramLambdaBound = 10; 
epsVal    = 1e-6; 

hPoissonPmf = @(paramLambda, vParamK) ((paramLambda .^ vParamK) * exp(-paramLambda)) ./ factorial(vParamK); 


for ii = 1:ceil(1000 * paramLambdaBound) 
    if(hPoissonPmf(paramLambdaBound, ii) <= epsVal) 
     break; 
    end 
end 

vValGrid = [0:ii]; 
vValGrid = vValGrid(:); 

vParamLambda = zeros([numTests, 1]); 
vParamLambdaMl = zeros([numTests, 1]); %<! Maximum Likelihood 
vParamLambdaCf = zeros([numTests, 1]); %<! Curve Fitting 


%% Generate Data and Samples 

for ii = 1:numTests 

    paramLambda = paramLambdaBound * rand([1, 1]); 

    vDataSamples = poissrnd(paramLambda, [numSamples, 1]); 
    vDataHist  = histcounts(vDataSamples, [vValGrid - 0.5; vValGrid(end) + 0.5])/numSamples; 
    vDataHist  = vDataHist(:); 

    vParamLambda(ii) = paramLambda; 
    vParamLambdaMl(ii) = mean(vDataSamples); %<! Maximum Likelihood 
    vParamLambdaCf(ii) = lsqcurvefit(hPoissonPmf, 2, vValGrid, vDataHist, 0, inf); %<! Curve Fitting 
end 
0

これは間違った方法です。
あなたは、Poisson Distributionに従って行動すると思われるデータがあります。
Poisson Distributionは単一パラメータ(Lambda)でパラメータ化されているため、パラメータ推定を適用するだけです。

古典的な方法は、Maximum Likelihood Estimationです。

この場合、Poisson Distributionの場合は、MLE of Poisson Distributionに従う必要があります。
つまり、poissfit()のようにデータのサンプル平均を計算するだけです。

+0

私はそれを行うには、適切な方法ではありませんでした知りませんでした。コメントありがとうございます!とにかく、lsqcurvefitは私にパラメータの結果を与えることができます。私は既知のpoisson pdfで試してみました。その後、問題は何ですか? –

+0

私はあなたのコメントを理解していません。なぜ私が提案したものを使用しないのですか? – Royi

+0

私は今MLEの方が良い方法を参照してください。しかし、私はまだ最小二乗法がなぜ機能しなかったのかと疑問に思った。 –

関連する問題