Почему gof-тесты (правильность подгонки) отклоняют «сжатое» U-образное бета-распределение? - PullRequest
0 голосов
/ 13 апреля 2020

Правильным местом для постановки этого вопроса также может быть перекрестная проверка, но я думаю, что это скорее проблема программирования, поэтому я выбрал Stackoverflow.

Настройка

Я сгенерировал 100 тыс. Случайных вариаций из «сжатых» U-образных бета-распределений. Параметры распределения a, b, lo c и масштаб см. https://en.wikipedia.org/wiki/Beta_distribution).

import scipy.stats as stats
from skgof import ks_test, cvm_test, ad_test
from scipy.stats import kstest

gof_tests = [ks_test, cvm_test, ad_test]

params_beta_sqz_u = {'a' : 0.011 , 'b' : 0.040 , 'loc' : 0, 'scale' : 1 }
data_beta_sqz_u = stats.beta.rvs(**params_beta_sqz_u, size=100000)

#from skgof
gofs_beta_sqz_u = [gof_test(data_beta_sqz_u, stats.beta(**params_sqz_u)) 
                   for gof_test in gof_tests]

# additional KS-test from scipy.stats
gof_beta_sqz_u = stats.kstest(data_sqz_u, 'beta', (0.011,0.040),  alternative='two-sided')

Результат

gofs_beta_sqz_u
[GofResult(statistic=0.04734000000000005, pvalue=1.010521662314634e-05),
 GofResult(statistic=3.7501477386841606, pvalue=1.6754093667969983e-09),
 GofResult(statistic=inf, pvalue=0.0)]

gof_beta_sqz_u
KstestResult(statistic=0.04734000000000005, pvalue=4.402269988633488e-195)

Вопрос

Почему gof-тесты отклоняют распределение для U-образных данных выборки, хотя данные сопоставляются с распределением, из которого они были получены?

Исследования уже проведены

Гистограмма образца имеет форму | _ |, я называю ее «сжатой» U-образной. Случайные вариации в основном рисуются близко к 0 или 1. Плюс, гистограмма перекошена и имеет больший вес на левом хвосте.

Я много играл с различными настройками. Для «хорошей» U-образной беты (например, a = 0,5, b = 0,5) тесты принимают. Я предполагаю, что эта проблема возникает из-за крутых границ PDF, соответственно, изгибов в CDF.

Причиной может быть то, что тест gof выбирает разные ячейки для данных выборки и теоретического CDF, на котором различия рассчитаны на. Это может привести к большим расстояниям между значениями ECDF и CDF в статистике gof-теста.

Кроме того, в журналах показано RuntimeWarning в рамках AD-теста

...lib\site-packages\skgof\ecdfgof.py:81: RuntimeWarning: divide by zero 
encountered in log
 return -samples - (factors * log(data * (1 - data[::-1]))).sum() / samples
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...