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)