Отклонение от набора нормального распределения данных или симметричной колоколообразной кривой называется асимметрией. Термин «перекошенный» относится к кривой, сдвинутой влево или вправо. Степень отклонения конкретного распределения от нормального распределения можно количественно выразить как асимметрию.
В распределениях можно увидеть различную степень правой (положительной) или левой (отрицательной) асимметрии. Нулевая асимметрия показана с помощью нормального распределения (колокольчатая кривая).
Как для положительных, так и для отрицательных асимметрий затрагивается «хвост» или набор точек данных, далеких от медианы. Положительный перекос описывает более длинный или более толстый хвост на правой стороне распределения, тогда как отрицательный перекос описывает более длинный или более толстый хвост на левой стороне распределения. Эти два перекоса описывают вес или направление распределения.
Положительно асимметричные данные будут иметь среднее значение выше медианы. Среднее значение отрицательно искаженных данных будет меньше медианы, что является полной противоположностью того, что происходит при положительно искаженном распределении. Независимо от того, насколько длинными или толстыми являются хвосты, распределение демонстрирует нулевую асимметрию, если данные представлены на графике симметрично.
- Метод skew()
- Объект skewnorm()
- Метод skew()
- Неравномерное распределение статистики
- Метод logcdf()
- Норма отклонения
- Объект skewnorm()
- Ошибка статистики t
Метод skew()
Модуль Python Scipy scipy.stats имеет метод skew(), который рассчитывает асимметрию выборки набора данных.
Асимметрия для регулярно распределяемых данных должна быть близка к нулю. Если значение асимметрии для непрерывного унимодального распределения больше нуля, правый хвост распределения будет иметь больший вес. Чтобы проверить, достаточно ли статистически близко значение асимметрии к нулю, используйте функцию skewtest.
Синтаксис:
scipy.stats.skew(a, axis=1, bias=False, nan_policy='throw')
Где параметры:
- a (array_data): n-мерный массив, по которому можно определить режим(ы).
- axis (логическое значение): если это неверно, статистическая погрешность удаляется из вычислений.
- nan_plociy(): указывает, что делать в случаях, когда входные данные содержат nan.(«Распространение» — значение по умолчанию). Доступны следующие варианты:
- distribute: возвращается nan
- raise: выдает ошибку
- omit: игнорирование значений nan.
- ось(int): направление оси. Значение по умолчанию — 0. Рассмотрим весь массив, если нет.
Метод skew() возвращает асимметрию (когда все значения равны, асимметрия данных по оси возвращает 0) типа ndarray.
Давайте рассмотрим пример, передав массив в метод skew(), используя приведенный ниже код Python.
from scipy import stats stats.skew([2,5,3,7,8,9,4])
Объект skewnorm()
Python Scipy имеет непрерывную случайную величину с асимметричной нормалью или объект skewnorm() в модуле scipy.stats. От него объект skewnorm наследует набор общих методов, которые дополняется информацией, уникальной для этого распределения.
В качестве параметра асимметрии skewnorm принимает вещественное число. Распределение напоминает нормальное распределение, когда a = 0. Параметры loc и Scale можно использовать для масштабирования или смещения распределения.
Синтаксис:
scipy.stats.skewnorm.method_name(x,q,loc,scale,size,moments)
Где параметры:
- x: более высокие и более низкие вероятности хвоста.
- q: для определения квантилей.
- loc: используется для указания среднего значения, по умолчанию оно равно 0.
- scale: используется для расчета таких статистических данных, как стандартное отклонение, эксцесс и среднее значение.
- size: используется для указания стандартного отклонения, по умолчанию оно равно 1.
Давайте рассмотрим пример, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код.
import numpy as np import matplotlib.pyplot as plt from scipy import stats
- Создайте значения данных наблюдения и вычислите функцию плотности вероятности на основе этих значений данных со средним значением = 0 и стандартным отклонением = 1.
a = 3 observatin_x = np.linspace(-4,4,200) pdf_skewnorm = stats.skewnorm.pdf(observatin_x,a,loc=0,scale=1)
- Постройте созданное распределение, используя приведенный ниже код.
plt.plot(observatin_x,pdf_skewnorm) plt.xlabel('x-values') plt.ylabel('pdf_norm_values') plt.title("Skewnorm Probability density function") plt.show()
Метод skew()
Python Scipy skew() принимает ось параметра для вычисления перекоса вдоль определенной оси.
Двумерный массив имеет две соответствующие оси: одна проходит горизонтально по столбцам (ось 1), а другая вертикально по строкам (ось 0).
Давайте возьмем пример и вычислим перекос массива на основе осей, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy.stats import skew import numpy as np
- Создайте двумерный массив и вычислите перекос, используя приведенный ниже код.
array=np.array([[5, 4, 9, 8, 2], [3, 6, 8, 5, 7], [7, 5, 8, 3, 6]]) skew(array)
- В приведенном выше коде перекос вычисляется для всего массива, теперь укажите ось = 1, используя приведенный ниже код.
skew(array, axis = 1)
Неравномерное распределение статистики
Существует два типа распределения: левостороннее и правостороннее.
- Распределение с перекосом влево имеет длинный левый хвост. Распределения с отрицательным перекосом также известны как распределения с перекосом влево. Это связано с тем, что числовая линия имеет значительный отрицательный хвост. Кроме того, пик находится слева от среднего значения.
- В правостороннем распределении имеется длинный правый хвост. Другое их название — распределения с положительной асимметрией или распределениями с правой асимметрией. Это связано с тем, что числовая прямая имеет длинный хвост в положительном направлении. Кроме того, среднее значение находится справа от пика.
Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
import pylab as p from scipy.stats import skew import numpy as np
Сгенерируйте данные x и y, используя приведенный ниже код.
x_data = np.linspace(8, -15, 500 ) y_data = 1./(np.sqrt(2.*np.pi)) * np.exp( -.2*(x1)**2 )
Вычислите и постройте наклон влево, используя приведенный ниже код.
p.plot(x_data, y_data, '.') print( '\n Left Skewness for data : ', skew(y_data))
Снова вычислите и постройте правильный наклон, используя приведенный ниже код.
x_data = np.linspace(-8, 15, 500 ) y_data = 1./(np.sqrt(2.*np.pi)) * np.exp( -.2*(x_data)**2 ) p.plot(x_data, y_data, '.') print( '\n Left Skewness for data : ', skew(y_data))
Неравномерное распределение статистики Python Scipy
Вот как вычислить наклон влево и вправо, используя метод skew() Python Scipy.
Читайте: Тест хи-квадрат Python Scipy
Метод logcdf()
Объект skewnorm() имеет метод logcdf(), который вычисляет журнал совокупного распределения нормы асимметрии.
Синтаксис:
scipy.stats.skewnorm.logcdf(x,a,loc,scale)
Где параметры:
- x: более высокие и более низкие вероятности хвоста.
- а: это параметр асимметрии.
- loc: используется для указания среднего значения, по умолчанию оно равно 0.
- scale: используется для указания стандартного отклонения, по умолчанию оно равно 1.
Давайте рассмотрим пример, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код.
import numpy as np import matplotlib.pyplot as plt from scipy import stats
- Создайте значения данных наблюдения и вычислите журнал кумулятивного распределения на основе этих значений данных со средним значением = 0 и стандартным отклонением = 1.
a = 1 observatin_x = np.linspace(-5,5,300) logcdf_skewnorm = stats.skewnorm.logcdf(observatin_x,a,loc=0,scale=1)
- Постройте созданное распределение, используя приведенный ниже код.
plt.plot(observatin_x,logcdf_skewnorm) plt.xlabel('x-values') plt.ylabel('logcdf_norm_values') plt.title("Skewnorm log of Cumulative distribution function") plt.show()
Норма отклонения
Объект skewnorm() имеет метод CDF(), который вычисляет кумулятивное распределение нормы асимметрии.
Синтаксис:
scipy.stats.skewnorm.cdf(x,a,loc,scale)
Где параметры:
- x: более высокие и более низкие вероятности хвоста.
- а: это параметр асимметрии.
- loc: используется для указания среднего значения, по умолчанию оно равно 0.
- scale: используется для указания стандартного отклонения, по умолчанию оно равно 1.
Давайте рассмотрим пример, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код.
import numpy as np import matplotlib.pyplot as plt from scipy import stats
- Создайте значения данных наблюдения и вычислите кумулятивное распределение на основе этих значений данных со средним значением = 0 и стандартным отклонением = 1.
a = 2 observatin_x = np.linspace(-5,5,300) cdf_skewnorm = stats.skewnorm.cdf(observatin_x,a,loc=0,scale=1)
- Постройте созданное распределение, используя приведенный ниже код.
plt.plot(observatin_x,cdf_skewnorm) plt.xlabel('x-values') plt.ylabel('cdf_norm_values') plt.title("Skewnorm Cumulative distribution function") plt.show()
Объект skewnorm()
Объект skewnorm() Python Scipy имеет метод logpdf(), который вычисляет логарифм плотности вероятности нормы перекоса.
Синтаксис:
scipy.stats.skewnorm.logpdf(x,a,loc,scale)
Где параметры:
- x: более высокие и более низкие вероятности хвоста.
- а: это параметр асимметрии.
- loc: используется для указания среднего значения, по умолчанию оно равно 0.
- scale: используется для указания стандартного отклонения, по умолчанию оно равно 1.
Давайте рассмотрим пример, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код.
import numpy as np import matplotlib.pyplot as plt from scipy import stats
- Создайте значения данных наблюдения и вычислите журнал плотности вероятности из этих значений данных со средним значением = 0 и стандартным отклонением = 1.
a = 5 observatin_x = np.linspace(-3,3,400) logpdf_skewnorm = stats.skewnorm.logpdf(observatin_x,a,loc=0,scale=1)
- Постройте созданное распределение, используя приведенный ниже код.
plt.plot(observatin_x,logpdf_skewnorm) plt.xlabel('x-values') plt.ylabel('logpdf_norm_values') plt.title("Skewnorm Log of the probability density function") plt.show()
Ошибка статистики t
Здесь, в этом разделе, мы сгенерируем выборку t студента, используя метод t.rvs() Python Scipy Stats, затем передадим эти данные в метод skew() Python Scipy для вычисления асимметрии этих данных.
Давайте разберемся на примере, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy.stats import t, skew
- Сгенерируйте случайные числа или выборки из распределения t студентов, используя приведенный ниже код.
degree_of_freedom = 2.74 r = t.rvs(degree_of_freedom, size=1000)
- Теперь вычислите асимметрию сгенерированной выше выборки, используя приведенный ниже код.
skew(r)
Как видно из приведенного выше вывода, перекос выборки t студентов составляет 0,381.