Тесты для сравнения нескольких групп
Тесты для одновременного сравнения более чем двух групп.
F-тесты
FIndependentTest
Независимый F-тест для сравнения дисперсий
Выполняет F-тест (в стиле ANOVA) для сравнения дисперсий между несколькими независимыми группами. Определяет, есть ли статистически значимые различия в дисперсиях между группами.
Инициализация
Параметры:
- value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию
"target".
Методы
test
Выполняет независимый 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).
Инициализация
Параметры:
- value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию
"target".
Методы
test
Выполняет 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 для сравнения нескольких независимых групп.
Инициализация
Параметры:
- value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию
"target".
Методы
test
Выполняет односторонний ANOVA на предоставленных группах.
Параметры:
- groups (List[pd.DataFrame]): Список DataFrame, представляющих группы для сравнения.
- artefacts (dict): Словарь для хранения дополнительных результатов.
Возвращает:
- TestResult: Объект, содержащий p-value из ANOVA.
Тесты на равенство дисперсий
BartletIndependentTest
Тест Бартлетта на равенство дисперсий
Выполняет тест Бартлетта для проверки гипотезы о равенстве дисперсий в нескольких группах. Обычно используется перед проведением ANOVA для проверки предположения о гомоскедастичности (равенстве дисперсий).
Инициализация
Параметры:
- value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию
"target".
Методы
test
Выполняет тест Бартлетта на равенство дисперсий.
Параметры:
- 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 тест Данна для множественных попарных сравнений после теста Краскела-Уоллиса. Это непараметрический тест, используемый для определения, какие группы значительно отличаются друг от друга.
Инициализация
Параметры:
- value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию
"target".
Методы
test
Выполняет 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, которая не требует предположения о нормальности распределения данных.
Инициализация
Параметры:
- value_column (str): Название колонки, содержащей значения для тестирования. По умолчанию
"target".
Методы
test
Выполняет тест Краскела-Уоллиса.
Параметры:
- 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