mordwin
Апрель 8, 2018 19:26:22
Нужно узнать, является ли распределение нормальным. Написал такой код
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
from scipy.stats import chisquare
from scipy.stats import normaltest
mn =
with open('data.txt') as out_cos:
for line in out_cos:
mn.append(float(line))
print(len(mn))
data = np.array(mn)
mean = np.mean(data)
std = np.std(data)
x = np.linspace(mean - 3*std, mean + 3*std, 100)
#p_data = np.random.normal(mean, std, length)
print(mean, std)
plt.plot(x, mlab.normpdf(x, mean, std))
print(normaltest(data))
plt.hist(mn, bins=100, density=True) # bins - количество бункеров
plt.show()
но выводит NormaltestResult(statistic=643.8778670051769, pvalue=1.526503027640472e-140).
Если смотреть по картинке, то нормальность должна быть.
Не подскажете как еще можно проверить?
scidam
Апрель 9, 2018 03:09:03
Можно использовать тест Шапиро-Уилка; а также построить qqplot (stats.probplot), если точки будут лежать на прямой,
то данные нормальны, если нет – то в данных имеется уклонение от нормального закона распределения
import matplotlib.pyplot as plt
import scipy.stats as stats
data = np.random.uniform(size=100)
stats.probplot(data, dist="norm", plot=plt)
print("Shapiro-Wilk test for normality:", stats.shapiro(data))
plt.show()
mordwin
Апрель 9, 2018 14:24:05
scidam
Можно использовать тест Шапиро-Уилка; а также построить qqplot (stats.probplot), если точки будут лежать на прямой, то данные нормальны, если нет – то в данных имеется уклонение от нормального закона распределения
А для большого количества значений? Как я понял этот тест можно использовать для N<5000.
passant
Апрель 9, 2018 21:53:11
Помимо тестов Шапиро-Уилка, хи-квадрат и QQ-диаграмм существуют еще минимум почти десятка полтора тестов на нормальность. На
любой вкус любые условия и требования.
Ну, например:
1.
http://webspace.ship.edu/pgmarr/Geo441/ … esting.pdf
2. А. В. Субботина, М. Гржибовский “Описательная статистика и проверка нормальности распределения данных”
3.
http://journals.sbmu.ac.ir/jps/article/view/3974/35514. Б.Ю. Лемешко, А.П. Рогожников “ИССЛЕДОВАНИЕ ОСОБЕННОСТЕЙ И МОЩНОСТИ НЕКОТОРЫХ КРИТЕРИЕВ НОРМАЛЬНОСТИ”
Или просто загляните в справочник Кобзаря - там этих тестов точно больше десятка.
scidam
Апрель 10, 2018 01:50:05
mordwin
А для большого количества значений? Как я понял этот тест можно использовать для N<5000.
Да, реализация в scipy предполагает выполнение этого условия.
У вас очень большое число измерений; в этом случае вам можно еще порекомендовать тест Колмогорова-Смирнова (stats.kstest).