LINUX.ORG.RU

Хи-квадрат и все-все-все


0

1

Нужно проверить экспериментальный набор значений на предмет соответствия нормальному распределению. Наваял програмку на жаве, в качестве генератора случайных значений взял Random.nextGaussian(), построил в gnuplot графики экспериментального распределения и теоретического нормального. Почти совпадают. Но нужно ещё сделать оценку по критерию хи-квадрат.

Кто шарит — просветите поэтапно, как это делается.

Я бы тупо заюзал для этого R или даже Calc. Ну и что что вызов стороннего приложения - зато мутить ничего не надо да и инструменты заточены под это.

Suntechnic ★★★★★
()

Выборка размера K сортируется, получаем массив v, интервал [v[0], v[K]] разбивается на N равных подынтервалов длиной h каждый. Хи квадрат вычисляется по этой формуле: http://rghost.ru/5193994 (там сумма от 1 до N)

Pemp = сколько элементов выборки попало в i-интервал

Pth = norm(v[0] + h*(i+1)) - norm(v[0] + h*i))*K

norm — функция нормального распределения, матожидание и дисперсия находятся из исходной выборки. Нужно только не перепутать с функцией плотности (они похожи)

Если получившийся x2 меньше чем табличный x2 то гипотеза о нормальности выборки принимается. Табличный x2 зависит от квантиля alpha и количества степеней свободы (кажется N-1). Таблица на википедии: http://ru.wikipedia.org/wiki/Квантили_распределения_хи-квадрат

elverion
()
Ответ на: комментарий от elverion

А вот как в Java считать функцию нормального распределения, я не знаю, мне её OpenOffice Calc считал.

elverion
()

Используйте критерий Колмогорова-Смирнова.

Для этого:

  • исходные данные сортируются x1 = x.sort(),
  • вычисляются значения экспериментальной функции распределения F(x[j]) = float(j)/len(x),
  • вычисляются эмпирическое среднее и дисперсия: mn = mean(x); vr = var(x)
  • вычисляются значения псевдо-теориетической функции распределения: например, с помощью scipy.special.erf()
  • вычисляется максимальный модуль отклонения экспериментальной функции от теоретической: D = max(abs(F-Ph)), его поправленное значение Ds = D*(sqrt(len(x)) - 0.01 + 0.85/sqrt(len(x)))
  • Ds сравнивается по табличке из ссылки выше и делается вывод о значимости на соответствующем уровне.
Vudod ★★★★★
()

Ещё есть тест Шапиро-Уилка (Shapiro-Wilk).

Smacker ★★★★
()

Всё, справился. Всем спасибо.

post-factum ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.