p = NaN的拟合优度matlab

时间:2014-11-17 10:46:19

标签: matlab goodness-of-fit

你有一套观察结果  obs = https://drive.google.com/file/d/0B3vXKJ_zYaCJVlhqd3FJT0xtWFk/view?usp=sharing

我想证明它们来自Gamma发行版。

要做到这一点我:

%estimate parameters gamma distribution    
paramEsts_gamma = gamfit(obs);   
% estimate cdf gamma distribution (objects)
gamma_cdf=makedist('Gamma','a',paramEsts_gamma(1),'b',paramEsts_gamma(2));

% test with kstest if data comes from a gamma distribution
    [h_gamma_ks,p_gamma_ks,kstat_gamma_ks,cv_gamma_ks] = kstest(obs,'CDF',gamma_cdf)

% test with chi2gofif data comes from a gamma distribution
    pd_gamma = fitdist(obs,'Gamma');
    [h_gamma_chi,p_gamma_chi,st_gamma_chi] = chi2gof(obs,'CDF',pd_gamma)

我的问题是我为pvalue p_gamma_chi获得了NaN .... 我在哪里弄错了? 感谢

这里有一些代码可以直观地检查分布

%% Plot cdf
% empirical cdf
[f_emp,x_values] = ecdf(obs);
f_gamma = gamcdf(x_values,paramEsts_gamma(1),paramEsts_gamma(2));

     figure
     hold on;
     F = plot(x_values,f_emp);
     set(F,'LineWidth',2);

     G = plot(x_values,f_gamma,'r-');
     set(G,'LineWidth',2);


     legend([F G],...
        'Empirical CDF','Gamma CDF',...
        'Location','SE');

1 个答案:

答案 0 :(得分:0)

由于代码的输出显示st_gamma_chi.df = 0,表示0自由度(dof)。

dof = N - n - 1

其中:
  N是频率的数量,在您的情况下N = length(st_gamma_chi.edges)-1 = 3;
  n是已安装参数的数量,在您的情况下为n = 2

因此,您可以使用默认选项获得0自由度,您可以通过增加计算频率的区域数量来改善此问题:

[h_gamma_chi,p_gamma_chi,st_gamma_chi] = chi2gof(obs,'CDF',pd_gamma, 'NBins', 20)

但这并不能免除你对卡方检验的理解。