График с кривыми нормального распределения на тёмном фоне.

Аргументы в пользу Т-статистики

И как это соотносится с обычным z-баллом

Делиться

be3e6856a9134f846bcf226d82afbbf2

Введение

Я начал размышлять о параллелях между обнаружением точечных аномалий и обнаружением трендов. Когда дело доходит до точек, это, как правило, интуитивно понятно, и z-оценка решает большинство проблем. Мне потребовалось некоторое время, чтобы понять, как применить какой-либо статистический тест к трендам — отдельные точки теперь представляют собой целые распределения, а стандартное отклонение, которое имело большой смысл, когда я рассматривал одну точку, стало казаться совершенно неверным. Вот что я обнаружил.

Для лучшего понимания я добавил в этот пост несколько результатов проведенных мною симуляций и созданных на их основе диаграмм.

Z-баллы: Когда они перестают работать

Большинство людей обращаются к z-критерию, как только хотят заметить что-то странное. Всё предельно просто:

$$ z = frac{x – mu}{sigma} $$

(x) — это ваше новое наблюдение, ( mu ) — это то, как обычно выглядит «норма», ( sigma ) — это то, насколько обычно изменяются параметры. Полученное число говорит вам: «эта точка находится на таком расстоянии от стандартного отклонения от общей совокупности».

Значение z, равное 3? Это примерно та самая черта, которая вызывает возгласы «вот это да!» — при нормальном распределении такое отклонение наблюдается лишь примерно в 0,27% случаев (двусторонний тест). Ощущается ясно. Ощущается честно.

Почему оно волшебным образом становится стандартной нормой (быстрый вывод)

Начните с любой нормальной переменной X ~ N(( mu ), ( sigma^2 )).

  1. Вычтите среднее значение → (x – mu). Теперь центр равен нулю.
  2. Разделим на стандартное отклонение → ( (x – mu) / sigma ). Теперь разброс (дисперсия) равен ровно 1.

Сделайте и то, и другое, и получите:

$$ Z = frac{X – mu}{sigma} sim N(0, 1) $$

Вот и всё. Любая нормальная переменная, независимо от её исходного среднего значения или масштаба, сжимается и растягивается в ту же скучную колоколообразную кривую, которую мы все запомнили. Вот почему z-баллы кажутся универсальными — они позволяют использовать одни и те же таблицы соответствия повсюду.

Подвох

В реальном мире мы почти никогда не знаем истинных значений ( mu ) и ( sigma ). Мы оцениваем их на основе последних данных — скажем, последних 7 точек.

Вот тут-то и кроется опасность: включать ли текущую точку в это окно или нет?

Если вы это сделаете, огромная аномалия мгновенно завысит ваше значение ( sigma ). Ваш z-балл уменьшится. Аномалия скроется. В итоге вы подумаете: «Ну, в конце концов, не так уж и странно».

Если исключить этот фактор (сдвинуть на 1, использовать только предыдущее окно), получится честный спор: «насколько странна эта новая точка по сравнению с тем, что было нормой до ее появления?»

В большинстве надежных реализаций используется второй подход. Если включить точку, то вы, по сути, выполняете сглаживание, а не обнаружение.

Этот фрагмент кода должен дать вам пример.

import numpy as np import pandas as pd import matplotlib.pyplot as plt # Установка начального значения для воспроизводимости np.random.seed(42) # Установка dpi на 250 для графиков высокого разрешения plt.rcParams['figure.dpi'] = 250 # Генерация 30-точечной серии: базовый уровень 10, небольшой восходящий тренд в последних 10 точках, шум, один большой выброс n = 30 t = np.arange(n) base = 10 + 0.1 * t[-10:] # небольшой тренд только в последней части data = np.full(n, 10.0) data[:20] = 10 + np.random.normal(0, 1.5, 20) data[20:] = base + np.random.normal(0, 1.5, 10) data[15] += 8 # большой выброс по индексу 15 df = pd.DataFrame({'value': data}, index=t) # Размер скользящего окна window = 7 # Версия 1: ИСКЛЮЧИТЬ текущую точку (рекомендуется для обнаружения) df['roll_mean_ex'] = df['value'].shift(1).rolling(window).mean() df['roll_std_ex'] = df['value'].shift(1).rolling(window).std() df['z_ex'] = (df['value'] — df['roll_mean_ex']) / df['roll_std_ex'] # Версия 2: ВКЛЮЧИТЬ текущую точку (самозатухание) df['roll_mean_inc'] = df['value'].rolling(window).mean() df['roll_std_inc'] = df['value'].rolling(window).std() df['z_inc'] = (df['value'] — df['roll_mean_inc']) / df['roll_std_inc'] # Добавляем сравнение Z-баллов в качестве третьего подграфика fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(12, 12), sharex=True) # Верхний график: исходные значения + средние ax1.plot(df.index, df['value'], 'o-', label='Наблюдаемые', color='black', alpha=0.7) ax1.plot(df.index, df['roll_mean_ex'], label='Скользящее среднее (исключая текущее)', color='blue') ax1.plot(df.index, ax1.set_title('Временные ряды + Скользящие средние (с учетом текущего значения)') ax1.legend() ax1.grid(True, alpha=0.3) # Средний график: скользящие стандартные отклонения ax2.plot(df.index, df['roll_std_ex'], label='Скользящие стандартные отклонения (с учетом текущего значения)', color='blue') ax2.plot(df.index, df['roll_std_inc'], '—', label='Скользящие стандартные отклонения (с учетом текущего значения)', color='red') ax2.set_title('Скользящие стандартные отклонения') ax2.legend() ax2.grid(True, alpha=0.3) # Нижний график: Сравнение Z-баллов ax3.plot(df.index, df['z_ex'], 'o-', label='Z-балл (исключая текущую точку)', color='blue') ax3.plot(df.index, df['z_inc'], 'x—', label='Z-балл (включая текущую точку)', color='red') ax3.axhline(3, color='gray', linestyle=':', alpha=0.6) ax3.axhline(-3, color='gray', linestyle=':', alpha=0.6) ax3.set_title('Z-баллы: Исключая и включая текущую точку') ax3.set_xlabel('Время') ax3.set_ylabel('Z-балл') ax3.legend() ax3.grid(True, alpha=0.3) plt.tight_layout() plt.show()

afd8c265fb8cfbd0a94a19b656384d52

p-значения

Вы вычисляете z, а затем спрашиваете: при нулевой гипотезе («это получено из того же распределения, что и мое окно»), какова вероятность того, что я увижу нечто настолько экстремальное?

Двустороннее p-значение = 2 × (1 − cdf(|z|)) в стандартном нормальном распределении.

z = 3 → p ≈ 0,0027 → «вероятно, не случайный шум».
z = 1,5 → p ≈ 0,1336 → «ну да, такое может случиться».

Всё просто. До тех пор, пока эти предположения не начнут рушиться.

Предположения

Z-показатель (и его p-значение) предполагает две вещи:

  1. Данные в окне приблизительно соответствуют нормальному распределению (или, по крайней мере, хвосты распределения ведут себя нормально).
  2. Ваше расчетное значение ( sigma ) достаточно близко к истинному значению в популяции.

Например, искаженное окно нарушает пункт № 1. Это означает, что утверждение о том, что что-то находится в пределах 3σ, на самом деле может быть лишь с вероятностью 85%, а не с ожидаемыми 99,7%.

Аналогично, при достаточно малом окне значение ( sigma ) становится зашумленным, что приводит к более сильным колебаниям z-баллов, чем следовало бы.

Основы проверки гипотез: отклонение нулевой гипотезы, а не доказательство альтернативной.

Проверка гипотез обеспечивает формальную основу для принятия решения о том, подтверждают ли наблюдаемые данные интересующее утверждение. Эта структура является единообразной для таких инструментов, как z-оценка и t-статистика.

Процесс начинается с двух конкурирующих гипотез:

  • Нулевая гипотеза (H₀) представляет собой предположение по умолчанию: отсутствие эффекта, отсутствие различий или отсутствие тренда. При обнаружении аномалий H₀ утверждает, что наблюдение принадлежит тому же распределению, что и базовые данные. При анализе тренда H₀ обычно утверждает, что наклон равен нулю.
  • Альтернативная гипотеза (H₁) представляет собой проверяемое утверждение: существует эффект, различие или тенденция.

Статистический критерий (z-критерий или t-критерий) количественно определяет, насколько данные отклоняются от ожидаемых значений при нулевой гипотезе H₀.

Значение p — это вероятность получения тестовой статистики, по меньшей мере столь же экстремальной, как наблюдаемая, при условии, что нулевая гипотеза H₀ верна. Малое значение p указывает на то, что такой экстремальный результат маловероятен при нулевой гипотезе.

Правило принятия решения простое:

  • Если значение p ниже заранее установленного уровня значимости (обычно 0,05), следует отклонить нулевую гипотезу H₀.
  • Если значение p превышает пороговое значение, то не следует отклонять нулевую гипотезу H₀.

Ключевой момент заключается в том, что неспособность отклонить H₀ не доказывает истинность H₀. Это лишь указывает на то, что данные не предоставляют достаточных доказательств против неё. Отсутствие доказательств не является доказательством отсутствия.

Двусторонний тест является стандартным методом для выявления аномалий и многих тестов на наличие трендов, поскольку отклонения могут происходить в любом направлении. Поэтому p-значение рассчитывается как удвоенная односторонняя вероятность.

Для z-критерия используется стандартное нормальное распределение при нулевой гипотезе. Для небольших выборок или когда дисперсия оценивается на основе данных, вместо него используется t-распределение, как обсуждается в последующих разделах.

Данная методика применяется единообразно: тестовая статистика измеряет отклонение от нулевой гипотезы, распределение служит ориентиром для оценки необычности этого отклонения, а p-значение преобразует эту необычность в правило принятия решения.

Для корректной интерпретации p-значения необходимо соблюдение предположений, лежащих в основе распределения (нормальность ошибок, независимость). При нарушении этих предположений сообщаемые вероятности теряют надежность, что становится серьезной проблемой при расширении подхода за пределы точечных аномалий.

Принцип отношения сигнала к шуму: связь между Z-показателями и t-статистикой

Z-критерий и t-статистика являются примерами отношения.

$$ frac{text{сигнал}}{text{шум}}. $$

Сигналом является отклонение от нулевого значения: (x – mu) для точечных аномалий и (hat{beta}_1 – 0) для наклона в линейной регрессии.

Шумовой член — это мера изменчивости при нулевой гипотезе. Для z-показателя шум равен (sigma) (стандартное отклонение базовых наблюдений). Для t-статистики шум равен стандартной ошибке (text{SE}(hat{beta}_1)).

Стандартная ошибка против стандартного отклонения

Стандартное отклонение измеряет разброс отдельных наблюдений относительно их среднего значения. Для выборки оно представляет собой квадратный корень из выборочной дисперсии, обычно обозначаемый как s:

$$ s = sqrt{ frac{1}{n-1} sum (x_i – bar{x})^2 }. $$

Стандартная ошибка количественно определяет изменчивость сводной статистической величины (такой как выборочное среднее или коэффициент регрессии) при повторных выборках из одной и той же популяции. Она всегда меньше стандартного отклонения, поскольку усреднение или оценка уменьшают изменчивость.

Для выборочного среднего стандартная ошибка равна

$$ text{SE}(bar{x}) = frac{s}{sqrt{n}}, $$

где s — стандартное отклонение выборки, а n — размер выборки. Деление на (sqrt{n}) отражает тот факт, что среднее значение n независимых наблюдений имеет дисперсию, равную дисперсии генеральной совокупности, деленной на n.

В регрессионном анализе стандартная ошибка наклона (text{SE}(hat{beta}_1)) зависит от дисперсии остатков s², разброса переменной-предиктора и размера выборки, как показано в предыдущем разделе. В отличие от стандартного отклонения зависимой переменной, которое включает в себя как сигнал, так и шум, стандартная ошибка изолирует неопределенность в самой оценке параметра.

Различие имеет важное значение: стандартное отклонение описывает разброс исходных данных, а стандартная ошибка описывает точность оцениваемой величины. Использование стандартного отклонения вместо стандартной ошибки для производной статистической величины (например, наклона) смешивает сигнал с шумом, что приводит к неверным выводам.

Это отношение количественно оценивает наблюдаемый эффект относительно изменчивости, ожидаемой в случае, если бы нулевая гипотеза была верна. Большое значение указывает на то, что эффект маловероятен при одних лишь случайных колебаниях.

При обнаружении точечных аномалий (sigma) — это стандартное отклонение отдельных наблюдений вокруг (mu). При обнаружении тренда интересующей величиной является (hat{beta}_1) из модели (y_i = beta_0 + beta_1 x_i + epsilon_i). Стандартная ошибка равна

$$ text{SE}(hat{beta}_1) = sqrt{ frac{s^2}{sum (x_i – bar{x})^2} }, $$

где (s^2) — остаточная среднеквадратная ошибка после аппроксимации прямой.

Использование исходного стандартного отклонения (y_i) в качестве знаменателя даст следующий результат:

$$ frac{hat{beta}_1}{sqrt{text{Var}(y)}} $$

и включают как систематический тренд, так и случайные флуктуации в знаменателе, что завышает шумовой член и недооценивает силу тренда.

t-статистика использует

$$ t = frac{hat{beta}_1}{text{SE}(hat{beta}_1)} $$

и подчиняется t-распределению с (n-2) степенями свободы, поскольку (s^2) оценивается по остаткам. Эта оценка дисперсии вносит дополнительную неопределенность, которая отражается в более широких хвостах t-распределения по сравнению со стандартным нормальным распределением.

Аналогичная структура «сигнал-шум» наблюдается в большинстве статистических критериев. F-статистика сравнивает объясненную дисперсию с остаточной дисперсией:

$$ F = frac{text{объясненная MS}}{text{остаточная MS}}. $$

Критерий хи-квадрат сравнивает наблюдаемые частоты с ожидаемыми, масштабированными относительно ожидаемых значений:

$$ chi^2 = sum frac{(O_i – E_i)^2}{E_i}. $$

В каждом случае статистический показатель представляет собой отношение наблюдаемого отклонения к ожидаемой вариации при нулевой гипотезе. Z-критерий и t-критерий являются конкретными реализациями этого принципа, адаптированными для проверки средних значений или коэффициентов регрессии.

Когда Z-показатели выходят из строя: проблема тренда

Z-показатель демонстрирует надежную работу при применении к отдельным наблюдениям относительно стабильного базового уровня. Однако его расширение для выявления тенденций вносит фундаментальные проблемы, которые подрывают его достоверность.

Рассмотрим временной ряд, цель которого — проверить наличие линейного тренда. Можно вычислить наклон метода наименьших квадратов (hat{beta}_1) и попытаться стандартизировать его, используя z-критерий, разделив на стандартное отклонение зависимой переменной:

$$ z = frac{hat{beta}_1}{sqrt{text{Var}(y)}}. $$

Этот подход неверен. Стандартное отклонение (sqrt{text{Var}(y)}) измеряет общий разброс зависимой переменной, который включает как систематический тренд (сигнал), так и случайные флуктуации (шум). При наличии тренда дисперсия y увеличивается за счет самого тренда. Включение этой увеличенной дисперсии в знаменатель уменьшает величину тестовой статистики, что приводит к недооценке значимости тренда.

Распространенной альтернативой является использование стандартного отклонения, оцененного по данным до начала предполагаемого тренда, например, по наблюдениям до некоторого момента времени t = 10. Это кажется логичным, но не работает по той же причине, что и раньше: процесс может быть нестационарным.

Краткое напоминание о стационарности

Стационарность временного ряда означает, что статистические свойства процесса (среднее значение, дисперсия и автоковариационная структура) остаются постоянными во времени.

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

Если основные свойства нашего распределения (в данном случае, нашего окна) изменяются, то значение (sigma), предшествующее тренду, перестает отражать изменчивость в течение трендового периода. В этом случае тестовая статистика отражает несущественный уровень шума, что приводит либо к ложноположительным, либо к ложноотрицательным результатам в зависимости от того, как изменилась дисперсия.

Основная проблема заключается в том, что проверяемая величина — наклон — является производной сводной статистикой, вычисляемой на основе тех же данных, которые использовались для оценки шума. В отличие от точечных аномалий, где тестовое наблюдение не зависит от базового окна, параметр тренда тесно связан с данными. Любая попытка использовать исходную дисперсию y смешивает сигнал с оценкой шума, нарушая требование, согласно которому знаменатель должен представлять изменчивость при нулевой гипотезе об отсутствии тренда.

Это искажение не является незначительной технической деталью. Оно систематически смещает тест в сторону консервативности при наличии тенденции, поскольку знаменатель растет с силой этой тенденции. В результате истинные тенденции сложнее обнаружить, а сообщаемые значения p оказываются больше, чем должны быть.

Эти ограничения объясняют, почему z-оценка, несмотря на свою простоту и интуитивно понятную привлекательность, не может быть напрямую применена для выявления тренда без модификации. t-статистика решает именно эту проблему, создавая меру шума, которая исключает подобранный тренд, как объясняется в следующем разделе.

Быстрая симуляция для сравнения результатов t-статистики с «неправильным»/наивным результатом z-оценки:

Импорт кода: import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import stats # ─────────────────────────────────────────────── # Генерация данных (как и раньше) np.random.seed(42) n = 30 t = np.arange(n) data = np.full(n, 10.0) data[:20] = 10 + np.random.normal(0, 1.5, 20) data[20:] = 10 + 0.1 * t[20:] + np.random.normal(0, 1.5, 10) data[15] += 8 # выброс по индексу 15 df = pd.DataFrame({'time': t, 'value': data}) # ────────────────────────────────────────────── # Построение регрессии только на последних 10 точках (индексы с 20 по 29) last10 = df.iloc[18:].copy() slope, intercept, r_value, p_value, std_err = stats.linregress( last10['time'], last10['value'] ) last10['fitted'] = intercept + slope * last10['time'] t_stat = slope / std_err # Наивная «z-статистика» — использование std(y) / sqrt(n) в качестве знаменателя (неправильно для тренда) z_std_err = np.std(last10['value']) / np.sqrt(len(last10)) z_stat = slope / z_std_err # Вывод сравнения print(«Правильная t-статистика (с использованием правильной стандартной ошибки наклона):») print(f» Наклон: {slope:.4f}») print(f» Стандартная ошибка наклона: {std_err:.4f}») print(f» t-статистика: {t_stat:.4f}») print(f» p-значение (t-расстояние): {p_value:.6f}n») print(«Наивная 'z-статистика' (с использованием std(y)/sqrt(n) — неправильно):») print(f» Наклон: {slope:.4f}») print(f» Неверная стандартная ошибка: {z_std_err:.4f}») print(f» z-статистика: {z_stat:.4f}») # ───────────────────────────────────────────────── # График с двумя подграфиками fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10), sharex=True) # Вверху: Правильный график t-статистики ax1.plot(df['time'], df['value'], 'o-', color='black', alpha=0.7, linewidth=1.5, label='Полный временной ряд') ax1.plot(last10['time'], last10['fitted'], color='red', linewidth=2.5, label=f'Линейная аппроксимация (последние 10 точек): наклон = {slope:.3f}') ax1.axvspan(20, 29, color='red', alpha=0.08, label='Подогнанное окно') ax1.text(22, 11.5, f'Правильная t-статистика = {t_stat:.3f}np-значение = {p_value:.4f}', fontsize=12, bbox=dict(facecolor='white', alpha=0.9, edgecolor='gray')) ax1.set_title('Правильный t-тест: линейная аппроксимация последних 10 точек') ax1.set_ylabel('Значение') ax1.legend(loc='upper left') ax1.grid(True, alpha=0.3) # Внизу: Наивный график z-статистики (показывающий ошибку) ax2.plot(df['time'], df['value'], 'o-', color='black', alpha=0.7, linewidth=1.5, label='Полный временной ряд') ax2.plot(last10['time'], last10['fitted'], color='red', linewidth=2.5, label=f'Линейная аппроксимация (последние 10 точек): наклон = {slope:.3f}') ax2.axvspan(20, 29, color='red', alpha=0.08, label='Подогнанное окно') ax2.text(22, 11.5, f'Наивная z-статистика = {z_stat:.3f}n(использует std(y)/√n — неправильный знаменатель)', fontsize=12, bbox=dict(facecolor='white', alpha=0.9, edgecolor='gray')) ax2.set_title('Наивный «Z-тест»: Использование std(y)/√n вместо стандартной ошибки наклона') ax2.set_xlabel('Время') ax2.set_ylabel('Значение') ax2.legend(loc='верхний левый угол') ax2.grid(True, alpha=0.3) plt.tight_layout() plt.show() Правильно t-статистика (с использованием правильной стандартной ошибки наклона): Наклон: 0,2439 Стандартная ошибка наклона: 0,1412 t-статистика: 1,7276 p-значение (t-расстояние): 0,114756 Наивная 'z-статистика' (с использованием std(y)/sqrt(n) — неверно): Наклон: 0,2439 Неверная стандартная ошибка: 0,5070 z-статистика: 0,4811

4ff0cb2022a9834b9845849fc014d477

Вводим t-статистику: разработана для оценки шума.

t-статистика устраняет ограничения z-критерия, явно учитывая неопределенность в оценке дисперсии. Это подходящий инструмент при проверке параметра, такого как наклон регрессионной кривой, где уровень шума необходимо оценить на основе тех же данных, которые использовались для вычисления параметра.

Рассмотрим модель линейной регрессии.

$$ y_i = beta_0 + beta_1 x_i + epsilon_i, $$

где предполагается, что ошибки (epsilon_i) независимы и имеют нормальное распределение со средним значением 0 и постоянной дисперсией (sigma^2).

Оценка наклона методом наименьших квадратов выглядит следующим образом:

$$ hat{beta}_1 = frac{sum (x_i – bar{x})(y_i – bar{y})}{sum (x_i – bar{x})^2}. $$

При нулевой гипотезе H₀: (beta_1 = 0), математическое ожидание (hat{beta}_1) равно нулю.

Стандартная ошибка (hat{beta}_1) равна

$$ text{SE}(hat{beta}_1) = sqrt{ frac{s^2}{sum (x_i – bar{x})^2} }, $$

где (s^2) — несмещенная оценка (sigma^2), вычисленная как остаточная среднеквадратная ошибка:

$$ s^2 = frac{1}{n-2} sum (y_i – hat{y}_i)^2. $$

Затем t-статистика определяется следующим образом:

$$ t = frac{hat{beta}_1}{text{SE}(hat{beta}_1)} = frac{hat{beta}_1}{sqrt{ frac{s^2}{sum (x_i – bar{x})^2} }}. $$

При нулевой гипотезе и допущениях модели эта статистика подчиняется t-распределению с n−2 степенями свободы.

Краткое напоминание о степенях свободы.

Степени свободы представляют собой количество независимых значений, которые остаются доступными для оценки параметра после того, как данные или модель наложили определенные ограничения.

В простейшем случае при оценке дисперсии выборки теряется одна степень свободы, поскольку сначала необходимо вычислить выборочное среднее. Отклонения от этого среднего значения ограничены суммой, равной нулю, поэтому свободно могут изменяться только n-1 значений. Деление суммы квадратов отклонений на n-1 (а не на n) корректирует эту потерю и дает несмещенную оценку дисперсии генеральной совокупности:

$$ s^2 = frac{1}{n-1} sum_{i=1}^n (x_i – bar{x})^2. $$

Эта корректировка, известная как поправка Бесселя, гарантирует, что выборочная дисперсия не будет систематически занижать дисперсию генеральной совокупности. Тот же принцип применяется и в регрессии: для построения прямой с точкой пересечения и наклоном используются две степени свободы, оставляя n−2 для оценки остаточной дисперсии.

В общем случае число степеней свободы равно размеру выборки за вычетом количества параметров, оцененных на основе данных. t-распределение использует эти степени свободы для корректировки своей формы: меньшее число степеней свободы приводит к более тяжелым хвостам (большей неопределенности), в то время как большие значения заставляют распределение приближаться к стандартному нормальному распределению.

Ключевое отличие от z-критерия заключается в использовании (s^2), а не фиксированного (sigma^2). Поскольку дисперсия оценивается по остаткам, знаменатель включает в оценку дисперсии неопределенность выборки. Эта неопределенность расширяет распределение тестовой статистики, поэтому t-распределение имеет более «тяжелые» хвосты, чем стандартное нормальное распределение для малых степеней свободы.

По мере увеличения размера выборки оценка (s^2) становится более точной, t-распределение сходится к стандартному нормальному распределению, а различие между t и z уменьшается.

Таким образом, t-статистика обеспечивает более точную оценку значимости, когда уровень шума неизвестен и должен быть оценен на основе данных. Основанная на показателе шума после удаления подобранного тренда, она позволяет избежать смешивания сигнала с шумовым знаменателем, что является основным недостатком наивного применения z-оценки к трендам.

Вот симуляция, демонстрирующая, как выборка из различных t-распределений приводит к различным значениям p:

  1. Выборка из нулевого распределения приводит к равномерному распределению p-значений: вероятность получения любого p-значения при выборке из нулевого распределения практически одинакова.
  2. Допустим, вы немного смещаете значение — увеличиваете среднее значение на 4: теперь вы практически уверены, что оно получено из другого распределения, поэтому асимметрия p-значения смещена влево.
  3. Интересно, что, если ваш тест не является крайне консервативным (то есть, маловероятно, что он отвергнет нулевую гипотезу), то асимметрия в сторону 1 маловероятна. Третий набор графиков показывает мою неудачную попытку, где я многократно выбирал значения из крайне узкого распределения вокруг среднего значения нулевого распределения, надеясь, что это максимизирует мое p-значение.

import numpy as np import matplotlib.pyplot as plt from scipy import stats from tqdm import trange n_simulations = 10_000 n_samples = 30 baseline_mu = 50 sigma = 10 df = n_samples — 1 def run_sim(true_mu, sigma_val): t_stats, p_vals = [], [] for _ in trange(n_simulations): # Генерация выборки sample = np.random.normal(true_mu, sigma_val, n_samples) t, p = stats.ttest_1samp(sample, baseline_mu) t_stats.append(t) p_vals.append(p) return np.array(t_stats), np.array(p_vals) # 1. Null is True (Идеально) t_null, p_null = run_sim(baseline_mu, sigma) # 2. Эффект существует (сдвинут) t_effect, p_effect = run_sim(baseline_mu + 4, sigma) # 3. Слишком идеально (дисперсия подавлена, среднее значение принудительно приведено к базовому уровню) # Мы используем очень маленькое значение сигмы, чтобы выборочное среднее всегда было практически базовым. Даже в этом случае мы все равно получаем равномерное распределение p-значений. t_perfect, p_perfect = run_sim(baseline_mu, 0.1) # Построение графика fig, axes = plt.subplots(3, 2, figsize=(12, 13)) x = np.linspace(-5, 8, 200) t_pdf = stats.t.pdf(x, df) scenarios = [ (t_null, p_null, «Null is True (Ideal)», «skyblue», «salmon»), (t_effect, p_effect, «Effect Exists (Shifted)», «lightgreen», «gold»), (t_perfect, p_perfect, «Too Perfect (Still Uniform)», «plum», «lightgrey») ] for i, (t_data, p_data, title, t_col, p_col) in enumerate(scenarios): # Построение T-статистики axes[i, 0].hist(t_data, bins=50, density=True, color=t_col, alpha=0.6, label=»Simulated») axes[i, 0].plot(x, t_pdf, 'r—', lw=2, label=»Theoretical T-dist») axes[i, 0].set_title(f»{title}: T-Statistics») axes[i, 0].legend() # Графики P-значений axes[i, 1].hist(p_data, bins=20, density=True, color=p_col, alpha=0.7, edgecolor='black') axes[i, 1].set_title(f»{title}: P-Values») axes[i, 1].set_xlim(0, 1) if i == 0: axes[i, 1].axhline(1, color='red', linestyle='—', label='Uniform Reference') axes[i, 1].legend() plt.tight_layout() plt.show()

efc2e1091dbcab3375da63beecb57644

Альтернативы и расширения: когда t-статистики недостаточно.

t-статистика представляет собой надежный параметрический подход для выявления трендов при условии нормального распределения. Существует несколько альтернативных вариантов, когда эти предположения несостоятельны или когда требуется большая надежность.

Критерий Манна-Кендалла — это непараметрический метод, оценивающий монотонные тренды без требования нормального распределения. Он подсчитывает количество согласованных и несогласованных пар в данных: для каждой пары наблюдений ((x_i), (x_j)) с (i < j) проверяется, является ли тренд возрастающим ((x_j > x_i)), убывающим ((x_j < x_i)) или совпадающим. Статистика критерия (S) — это разница между количеством возрастаний и убываний:

$$ S = sum_{i

где sgn — функция знака (1 для положительного, −1 для отрицательного, 0 для совпадающих значений). При нулевой гипотезе об отсутствии тренда (S) приблизительно нормально распределено для больших (n), что позволяет вычислить z-оценку и p-значение. Тест основан на рангах и нечувствителен к выбросам или ненормальным распределениям.

Метод оценки наклона Сена дополняет тест Манна-Кендалла, предоставляя меру величины тренда. Он вычисляет медиану всех попарных значений наклона:

$$ Q = text{медиана} left( frac{x_j – x_i}{j – i} right) quad text{для всех } i < j. $$

Данный метод оценки устойчив к выбросам и не предполагает линейности.

Метод бутстрапа предлагает гибкую альтернативу, не зависящую от распределения. Для проверки тренда линейную модель подгоняют к исходным данным, чтобы получить (hat{beta}_1). Затем данные многократно перевыбирают с замещением (обычно 1000–10 000 итераций), каждый раз заново подгоняют модель и собирают распределение бутстрапных наклонов. Значение p — это доля бутстрапных наклонов, которые более экстремальны, чем ноль (или исходная оценка, в зависимости от нулевой гипотезы). Доверительные интервалы можно построить из процентилей бутстрапного распределения. Этот подход не делает никаких параметрических предположений об ошибках и хорошо работает для небольших или нерегулярных выборок.

Каждый из вариантов имеет свои преимущества и недостатки. Методы Манна-Кендалла и наклон Сена просты в вычислительном отношении и надежны, но предполагают монотонность, а не строгую линейность. Методы бутстрапа очень гибки и могут включать сложные модели, хотя и требуют больших вычислительных затрат. Выбор зависит от характеристик данных и конкретного вопроса: параметрическая мощность при выполнении предположений, непараметрическая надежность при их невыполнении.

Источник: towardsdatascience.com

✅ Найденные теги: Аргументы, новости, Т-статистика

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых