在 36 个值时,您的样本集非常小。来自维基百科关于卡方检验的文章的第二句话(强调添加):
它适用于大样本的未配对数据。
在这种情况下,大通常意味着至少 100 左右。在此处阅读有关此测试的更多假设。
备择方案
您可以kstest
在基于Kolmogorov-Smirnov 测试的 Matlab 中尝试:
[h,p] = kstest(V,'cdf',[V(:) expcdf(V(:),expfit(V))])
或者 try lillietest
,它基于Lilliefors 测试,并且有一个专门用于指数分布数据的选项:
[h,p] = lillietest(V,'Distribution','exp')
如果您可以增加样本量,那么您做错了一件事chi2gof
。从help
for'cdf'
选项:
完全指定的累积分布函数。这可以是 ProbabilityDistribution 对象、函数句柄或函数。姓名。该函数必须将 X 值作为其唯一参数。或者,您可以提供一个元胞数组,其第一个元素是函数名称或句柄,其后面的元素是参数值,每个元胞一个。该函数必须将 X 值作为其第一个参数,并将其他参数作为后面的参数。
您没有提供任何其他参数,因此expcdf
使用mu = 1
. 您的数据值非常大,并且与该平均值完全不对应指数分布。您还需要估计参数。你的expfit
函数,它基于最大似然期望,你可以尝试这样的事情:
[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)