3

我想这是一个简单的问题,但我无法解决。我有一个向量,它的第一个元素看起来像:

V = [31 52 38 29 29 34 29 24 25 25 32 28 24 28 29 ...];

我想chi2gof在 Matlab 中进行测试以测试是否V呈指数分布。我做了:

[h,p] = chi2gof(V,'cdf',@expcdf);

但我收到一条警告消息:

Warning: After pooling, some bins still have low expected counts.
The chi-square approximation may not be accurate

我是否chi2gof错误地定义了呼叫?

4

1 回答 1

3

在 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。从helpfor'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)
于 2014-12-02T23:10:15.937 回答