Когда p-value меньше заданного уровень значимости (по умолчанию 5% или 0,05), это означает, что нулевые гипотезы отклонены (что в вашем случае означает, что образец не взят из Распространение Weibull).
Функция chi2gof
первая выходная переменная h
обозначает результат теста, где h=1
означает, что тест отклоняет нулевую гипотезу на указанном уровне значимости.
Пример:
sample = rand(1000,1); % sample from Uniform distribution
pd = fitdist(sample, 'weibull');
[h,p,st] = chi2gof(sample, 'CDF',pd, 'Alpha',0.05)
Тест явно отвергает H0 и заключает, что данные не получены из распределения Вейбулла:
h =
1 % 1: H1 (alternate hypo), 0: H0 (null hypo)
p =
2.8597e-27 % note that p << 0.05
st =
chi2stat: 141.1922
df: 7
edges: [0.0041 0.1035 0.2029 0.3023 0.4017 0.5011 0.6005 0.6999 0.7993 0.8987 0.9981]
O: [95 92 92 97 107 110 102 95 116 94]
E: [53.4103 105.6778 130.7911 136.7777 129.1428 113.1017 93.1844 72.8444 54.3360 110.7338]
Затем давайте попробуем это снова с соответствующим образцом:
>> sample = wblrnd(0.5, 2, [1000,1]); % sample from a Weibull distribution
>> pd = fitdist(sample, 'weibull')
pd =
WeibullDistribution
Weibull distribution
A = 0.496413 [0.481027, 0.512292]
B = 2.07314 [1.97524, 2.17589]
>> [h,p] = chi2gof(sample, 'CDF',pd, 'Alpha',0.05)
h =
0
p =
0.7340
тест теперь явно проходит с высоким p-значением.
РЕДАКТИРОВАТЬ:
Глядя на гистограмму, которую вы показали, похоже, что данные соответствуют распределению Вейбулла, хотя могут быть случаи выбросов (посмотрите на правую часть гистограммы), что может объяснить, почему вы получают плохие p-значения. Рассмотрите возможность предварительной обработки ваших данных для обработки экстремальных выбросов.
Вот пример, где я имитирую значения выбросов:
% 5000 samples from a Weibull distribution
pd = makedist('Weibull', 'a',4.0420, 'b',2.0853);
sample = random(pd, [5000 1]);
%sample = wblrnd(4.0420, 2.0853, [5000 1]);
% add 20 outlier instances
sample(1:20) = [rand(10,1)+15; rand(10,1)+25];
% hypothesis tests using original distribution
[h,p,st] = chi2gof(sample, 'CDF',pd, 'Alpha',0.05)
[h,p,ad,cv] = adtest(sample, 'Distribution',pd)
% hypothesis tests using empirical distribution
[h,p,st] = chi2gof(sample, 'CDF',fitdist(sample,'Weibull'))
[h,p,ad,cv] = adtest(sample, 'Distribution', 'Weibull')
% show histogram
histfit(sample, 20, 'Weibull')
![histfit](https://i.stack.imgur.com/8dE3O.png)
% chi-squared test
h =
1
p =
0.0382
st =
chi2stat: 8.4162
df: 3
edges: [0.1010 2.6835 5.2659 7.8483 25.9252]
O: [1741 2376 764 119]
E: [1.7332e+03 2.3857e+03 788.6020 92.5274]
% AD test
h =
1
p =
1.2000e-07
ad =
Inf
cv =
2.4924
Выбросы приводят к сбою тестов распределения (нулевая гипотеза отвергается). Тем не менее, я не смог воспроизвести получение p-значения NaN (вы можете проверить этот связанный вопрос на Stats.SE о получении p-значений NaN).
person
Amro
schedule
05.07.2014