🧪 Как проверить распределение на нормальность с использованием Python

Для проверки распределения на нормальность в Python можно воспользоваться различными методами. Вот несколько вариантов:

1. Использование библиотеки scipy:

import scipy.stats as stats

def check_normality(data):
    p_value = stats.normaltest(data).pvalue
    if p_value < 0.05:
        return "Распределение не является нормальным"
    else:
        return "Распределение является нормальным"

2. Использование библиотеки statsmodels:

import statsmodels.api as sm

def check_normality(data):
    _, p_value = statsmodels.stats.stattools.jarque_bera(data)
    if p_value < 0.05:
        return "Распределение не является нормальным"
    else:
        return "Распределение является нормальным"

3. Использование графических методов:

import seaborn as sns

def check_normality(data):
    sns.distplot(data, fit=stats.norm)
    if sns.distplot(data, fit=stats.norm):
        return "Распределение не является нормальным"
    else:
        return "Распределение является нормальным"

Детальный ответ

Как проверить распределение на нормальность в Python

В статистике существует множество методов для проверки распределения на нормальность. В этой статье мы рассмотрим несколько из них и покажем примеры кода на языке Python.

1. Тест Шапиро-Уилка

Тест Шапиро-Уилка является одним из самых популярных тестов на нормальность. Он основан на сравнении эмпирической функции распределения (ЭФР) с теоретической функцией распределения для нормального распределения. Если принимается нулевая гипотеза о нормальности, то p-value будет больше 0.05.


    from scipy.stats import shapiro
    
    def check_normality(data):
        stat, p_value = shapiro(data)
        
        if p_value > 0.05:
            print("Распределение является нормальным.")
        else:
            print("Распределение не является нормальным.")
    

2. Тест Д'Агостино-Пирсона

Тест Д'Агостино-Пирсона основан на сравнении значения коэффициента асимметрии и эксцесса с их ожидаемыми значениями для нормального распределения.


    from scipy.stats import normaltest
    
    def check_normality(data):
        stat, p_value = normaltest(data)
        
        if p_value > 0.05:
            print("Распределение является нормальным.")
        else:
            print("Распределение не является нормальным.")
    

3. QQ-график

QQ-график (квантиль-квантиль график) - это график, который позволяет визуально сравнить квантили наблюдаемого распределения с квантилями теоретического распределения (нормального распределения в данном случае).


    import numpy as np
    import matplotlib.pyplot as plt
    
    def plot_qq(data):
        mean, std = np.mean(data), np.std(data)
        z_scores = (data - mean) / std
        sorted_z_scores = np.sort(z_scores)
        theoretical_quantiles = norm.ppf(np.linspace(0.01, 0.99, len(data)))
        
        plt.scatter(theoretical_quantiles, sorted_z_scores)
        plt.plot([np.min(theoretical_quantiles), np.max(theoretical_quantiles)], [np.min(theoretical_quantiles), np.max(theoretical_quantiles)], color='red')
        plt.xlabel("Теоретические квантили")
        plt.ylabel("Наблюдаемые квантили")
        plt.title("QQ-график")
        plt.show()
    

4. Тест Колмогорова-Смирнова

Тест Колмогорова-Смирнова используется для проверки согласия эмпирической функции распределения с теоретической функцией распределения.


    from scipy.stats import kstest
    
    def check_normality(data):
        stat, p_value = kstest(data, 'norm')
        
        if p_value > 0.05:
            print("Распределение является нормальным.")
        else:
            print("Распределение не является нормальным.")
    

5. Гистограмма и ядерная оценка плотности

Еще один способ визуально оценить нормальность распределения - построить гистограмму и ядерную оценку плотности.


    import numpy as np
    import seaborn as sns
    
    def plot_histogram(data):
        sns.histplot(data, kde=True)
        plt.xlabel("Значения")
        plt.ylabel("Частота")
        plt.title("Гистограмма и оценка плотности")
        plt.show()
    

Вывод

В этой статье были рассмотрены несколько методов для проверки распределения на нормальность в Python. Тесты Шапиро-Уилка и Д'Агостино-Пирсона позволяют численно оценить нормальность распределения, QQ-график позволяет визуально оценить согласие с теоретическим распределением, а тест Колмогорова-Смирнова позволяет проверить согласие эмпирической функции распределения с теоретической функцией распределения. Также был показан способ построения гистограммы и ядерной оценки плотности для визуальной оценки нормальности распределения.

Видео по теме

01-10 Эмпирическое распределение в python

Лекция 6. Проверка статистических гипотез (процедуры Python)

Проверка выборок на нормальность распределения

Похожие статьи:

🔗 Как объединить списки в Питоне | Простое руководство

Кто придумал язык питон? 🐍 История создания популярного языка программирования

Сколько заглавных букв в строке Python? 🔎🐍

🧪 Как проверить распределение на нормальность с использованием Python

Как сделать перенос строки в питоне в коде? 🐍

🔍 Как написать процедуру в Питоне: пошаговое руководство с примерами и объяснениями

Как работать с циклом for в Python: объяснение значения range в питоне