У меня есть эмпирическое распределение, и я пытаюсь установить его T
, используя numpy
и строя его с помощью matplotlib
.Странное поведение распределения T
Вот что-то я не могу понять:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import t
arr = np.array([140, 36, 44, 24, 15, 48, 19, 2, 84, 6, 70, 3, 20, 6, 133, 23, 30, 7, 37, 165])
params = t.fit(arr)
mean = arr.mean()
std = arr.std()
r = np.arange(mean - 3 * std, mean + 3 * std, 0.01)
pdf_fitted = t.pdf(r, *params[0:-2], loc=params[-2], scale=params[-1])
plt.plot(r, pdf_fitted)
plt.plot([mean, mean], [0, max(pdf_fitted)])
plt.show()
Строит:
Зеленая линия представляет собой среднее из emprical данных, а синяя линия установлена T
распределение к тем же данным.
Проблема заключается в эмпирическом значении и пике распределения не совпадают. Когда я подгоняю дистрибутив normal
к тем же данным, я получаю идеальное соответствие с зеленой линией и пиком распределения, как и ожидалось.
Теперь, глядя на Wikipedia T distribution:
Трет-распределение симметрично и колокольчатые, как нормального распределения, но имеет более тяжелые хвосты ...
Поскольку он говорит это симметричный Я ожидаю, что мои средние и пики идеально подходят, но это не так.
Мой вопрос: Есть ли что-то не так с моим кодом на Python или это ожидаемое поведение дистрибутива T
? Если да, то почему? Если нет, что я делаю неправильно с моим кодом?
быстрый ответ: акцент делается на более тяжелых хвостах ** в цитате. установка распределения t уменьшает вес на хвостах, чем нормальное распределение. Обрезка трех верхних наблюдений, поскольку «выбросы» делают нормальную оценку ближе к t оценкам 'stats.norm.fit (np.sort (arr) [: - 3]) -> (27.882352941176471, 22.712738983018465)'. Другое указание: медиана намного ниже среднего в данных. – user333700
да, обратите внимание, что у вас 'arr.mean() == 45.6',' np.median (arr) == 27.0'. так . , , это не вопрос Питона; это математический вопрос. – dbliss