在36个值处,您有一个非常小的样本集。从(强调)维基百科上关于该chi-squared test文章的第二句话:
它适用于从大样本不成对的数据。
在这种情况下通常意味着至少在100左右。阅读更多关于assumptions of this test here。
替代
您可以尝试kstest
在Matlab,这是基于Kolmogorov-Smirnov test:
[h,p] = kstest(V,'cdf',[V(:) expcdf(V(:),expfit(V))])
或者尝试lillietest
,这是基于Lilliefors test并有一个选项专为指数分布数据:
[h,p] = lillietest(V,'Distribution','exp')
如果你可以增加你的样本量,你正在做一件错误的事情chi2gof
。 help
为'cdf'
选项:
完全指定的累积分布函数。此 可以是ProbabilityDistribution对象,函数 句柄或函数。名称。该函数必须以X 值作为唯一参数。或者,您可以提供一个单元阵列,其第一个元素是函数名称或 句柄,其后面元素是参数值,每个单元格有一个参数值,每个单元格为 。该函数必须以X值作为其第一个参数,其他参数作为后面的参数。
您不提供任何附加参数,因此expcdf
使用的默认平均参数为mu = 1
。您的数据值非常大,并且完全不符合exponential distribution的平均值。您还需要估计参数。您的expfit
功能,这是在maximum likelihood expectation痛打,你可以尝试这样的事:
[h,p] = chi2gof(V,'cdf',@(x)expcdf(x,expfit(x)),'nparams',1)
然而,只有36个样品,你可能不会得到像这样的分布很好的估计,仍然可能无法得到预期即使是从已知的分布抽样数据,如结果:
V = exprnd(10,1,36);
[h,p] = chi2gof(V,'cdf',@(x)expcdf(x,expfit(x)),'nparams',1)
只是一个猜测:也许是数据向量太小 – 2014-12-02 22:03:25
对不起忘了,更不用说是一个示例。原来是36个元素。应该没问题...... thx! – 2014-12-02 22:05:44