Matlab: подбор по критерию хи-квадрат (chi2gof) для проверки экспоненциального распределения данных

Я думаю, это простой вопрос, но я не могу разобраться. У меня есть вектор, первые элементы которого выглядят так:

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 неправильно позвонить?

1 ответ

Решение

При 36 значениях у вас очень маленький набор выборок. Из второго предложения статьи Википедии о тесте хи-квадрат (выделение добавлено):

Подходит для непарных данных из больших выборок.

Большое в этом случае обычно означает около 100. Подробнее о допущениях этого теста читайте здесь.


альтернативы

Вы можете попробовать kstest в Matlab, который основан на тесте Колмогорова-Смирнова:

[h,p] = kstest(V,'cdf',[V(:) expcdf(V(:),expfit(V))])

Или попробуй lillietest, который основан на тесте Лиллифорса и имеет опцию специально для экспоненциально распределенных данных:

[h,p] = lillietest(V,'Distribution','exp')

Если вы можете увеличить размер выборки, вы делаете одну ошибку с chi2gof, От help для '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)
Другие вопросы по тегам