Перейти к содержанию

Тесты для сравнения нескольких групп

Тесты для одновременного сравнения более чем двух групп.

F-тесты

FIndependentTest

Исходный код

Независимый F-тест для сравнения дисперсий

Выполняет F-тест (в стиле ANOVA) для сравнения дисперсий между несколькими независимыми группами. Определяет, есть ли статистически значимые различия в дисперсиях между группами.

Инициализация

def __init__(self, value_column="target")

Параметры:

  • value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию "target".

Методы

test

def test(self, groups: List[pd.DataFrame]) -> TestResult

Выполняет независимый F-тест на предоставленных группах.

Параметры:

  • groups (List[pd.DataFrame]): Список DataFrame, представляющих группы для сравнения.

Возвращает:

  • TestResult: Объект, содержащий p-value.

Примеры использования

import pandas as pd
import numpy as np
from aboba.tests.multiple.f_test import FIndependentTest

# Создаем тестовые данные
np.random.seed(42)
group1 = pd.DataFrame({'target': np.random.normal(10, 1, 50)})
group2 = pd.DataFrame({'target': np.random.normal(10, 2, 50)})
group3 = pd.DataFrame({'target': np.random.normal(10, 1.5, 50)})

# Выполняем тест
test = FIndependentTest(value_column='target')
result = test.test([group1, group2, group3])
print(f"P-value: {result.pvalue:.4f}")

FRelatedTest

Исходный код

Связанный F-тест для повторных измерений

Выполняет F-тест для сравнения нескольких связанных (парных) групп, аналогично дисперсионному анализу с повторными измерениями (repeated-measures ANOVA).

Инициализация

def __init__(self, value_column="target")

Параметры:

  • value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию "target".

Методы

test

def test(self, groups: List[pd.DataFrame], artefacts) -> TestResult

Выполняет F-тест для связанных групп.

Параметры:

  • groups (List[pd.DataFrame]): Список DataFrame одинакового размера, представляющих связанные группы.
  • artefacts (dict): Словарь для хранения дополнительных результатов.

Возвращает:

  • TestResult: Объект, содержащий p-value.

Примеры использования

import pandas as pd
import numpy as np
from aboba.tests.multiple.f_test import FRelatedTest

# Создаем парные данные
np.random.seed(42)
subjects = 30
treatments = 3
data = []
for i in range(subjects):
    base = np.random.normal(10, 2)
    for j in range(treatments):
        data.append({
            'subject': i,
            'treatment': j,
            'target': base + np.random.normal(0, 0.5) + j * 0.5
        })
df = pd.DataFrame(data)

# Разделяем на группы
groups = [df[df['treatment'] == i][['target']] for i in range(treatments)]

# Выполняем тест
test = FRelatedTest(value_column='target')
result = test.test(groups, {})
print(f"P-value: {result.pvalue:.4f}")

FOneWayIndependentTest

Исходный код

Односторонний ANOVA тест

Выполняет односторонний дисперсионный анализ (one-way ANOVA) с использованием встроенной функции SciPy f_oneway для сравнения нескольких независимых групп.

Инициализация

def __init__(self, value_column="target")

Параметры:

  • value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию "target".

Методы

test

def test(self, groups: List[pd.DataFrame]) -> TestResult

Выполняет односторонний ANOVA на предоставленных группах.

Параметры:

  • groups (List[pd.DataFrame]): Список DataFrame, представляющих группы для сравнения.
  • artefacts (dict): Словарь для хранения дополнительных результатов.

Возвращает:

  • TestResult: Объект, содержащий p-value из ANOVA.

Тесты на равенство дисперсий

BartletIndependentTest

Исходный код

Тест Бартлетта на равенство дисперсий

Выполняет тест Бартлетта для проверки гипотезы о равенстве дисперсий в нескольких группах. Обычно используется перед проведением ANOVA для проверки предположения о гомоскедастичности (равенстве дисперсий).

Инициализация

def __init__(self, value_column="target")

Параметры:

  • value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию "target".

Методы

test

def test(self, groups: List[pd.DataFrame]) -> TestResult

Выполняет тест Бартлетта на равенство дисперсий.

Параметры:

  • groups (List[pd.DataFrame]): Список DataFrame, представляющих группы для сравнения.

Возвращает:

  • TestResult: Объект, содержащий p-value.

Примеры использования

import pandas as pd
import numpy as np
from aboba.tests.multiple.bartlet import BartletIndependentTest

# Создаем данные с равными дисперсиями
np.random.seed(42)
group1 = pd.DataFrame({'target': np.random.normal(10, 2, 50)})
group2 = pd.DataFrame({'target': np.random.normal(12, 2, 50)})
group3 = pd.DataFrame({'target': np.random.normal(11, 2, 50)})

# Выполняем тест
test = BartletIndependentTest(value_column='target')
result = test.test([group1, group2, group3])
print(f"P-value: {result.pvalue:.4f}")

# Создаем данные с неравными дисперсиями
group1_unequal = pd.DataFrame({'target': np.random.normal(10, 1, 50)})
group2_unequal = pd.DataFrame({'target': np.random.normal(12, 3, 50)})
group3_unequal = pd.DataFrame({'target': np.random.normal(11, 2, 50)})

result_unequal = test.test([group1_unequal, group2_unequal, group3_unequal])
print(f"P-value (неравные дисперсии): {result_unequal.pvalue:.4f}")

Post-Hoc тесты

HSDTukeyTest

Исходный код

Тест Тьюки HSD (честно значимая разница)

В текущей версии библиотеки конструктор HSDTukeyTest помечен как NotImplementedError, поэтому класс нельзя использовать напрямую — попытка создать объект приведёт к исключению. Интерфейс и реализация могут измениться в будущих версиях.

Для post-hoc анализа после ANOVA сейчас рекомендовано использовать внешние библиотеки (например, statsmodels или scikit-posthocs) или дождаться стабильной реализации этого теста в aboba.


PostHocDunnTest

Исходный код

Post-hoc тест Данна

Выполняет post-hoc тест Данна для множественных попарных сравнений после теста Краскела-Уоллиса. Это непараметрический тест, используемый для определения, какие группы значительно отличаются друг от друга.

Инициализация

def __init__(self, value_column="target")

Параметры:

  • value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию "target".

Методы

test

def test(self, groups: List[pd.DataFrame], artefacts) -> TestResult

Выполняет post-hoc тест Данна.

Параметры:

  • groups (List[pd.DataFrame]): Список DataFrame, представляющих группы для сравнения.
  • artefacts (dict): Словарь для хранения дополнительных результатов.

Возвращает:

  • TestResult: Объект, содержащий минимальное p-value из всех попарных сравнений.

Примеры использования

import pandas as pd
import numpy as np
from aboba.tests.multiple.dunn import PostHocDunnTest

# Создаем непараметрические данные
np.random.seed(42)
group1 = pd.DataFrame({'target': np.random.exponential(2, 50)})
group2 = pd.DataFrame({'target': np.random.exponential(3, 50)})
group3 = pd.DataFrame({'target': np.random.exponential(2.5, 50)})

# Выполняем тест
test = PostHocDunnTest(value_column='target')
result = test.test([group1, group2, group3], {})
print(f"Минимальное p-value: {result.pvalue:.4f}")

Непараметрические тесты

KruskalIndependentTest

Исходный код

Тест Краскела-Уоллиса

Выполняет непараметрический тест Краскела-Уоллиса для сравнения нескольких независимых групп. Это непараметрическая альтернатива одностороннему ANOVA, которая не требует предположения о нормальности распределения данных.

Инициализация

def __init__(self, value_column="target")

Параметры:

  • value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию "target".

Методы

test

def test(self, groups: List[pd.DataFrame], artefacts) -> TestResult

Выполняет тест Краскела-Уоллиса.

Параметры:

  • groups (List[pd.DataFrame]): Список DataFrame, представляющих группы для сравнения.
  • artefacts (dict): Словарь для хранения дополнительных результатов.

Возвращает:

  • TestResult: Объект, содержащий p-value.

Примеры использования

import pandas as pd
import numpy as np
from aboba.tests.multiple.kruskal import KruskalIndependentTest

# Создаем данные с ненормальным распределением
np.random.seed(42)
group1 = pd.DataFrame({'target': np.random.exponential(2, 50)})
group2 = pd.DataFrame({'target': np.random.exponential(3, 50)})
group3 = pd.DataFrame({'target': np.random.exponential(2.5, 50)})

# Выполняем тест
test = KruskalIndependentTest(value_column='target')
result = test.test([group1, group2, group3])
print(f"P-value: {result.pvalue:.4f}")

Когда использовать

Тест Краскела-Уоллиса следует использовать когда: - Данные не соответствуют нормальному распределению - Размеры выборок малы - Дисперсии групп неравны - Нужна робастная альтернатива ANOVA