Назад к вопросам

Ответ от нейросети

sobes.tech AI

Тест G (или G-тест, χ²-тест отношения правдоподобия) — это статистический тест, используемый для проверки гипотез о распределении частот в категориальных данных. В контексте QA может применяться для сравнения распределений дефектов по категориям (например, типу, приоритету) в различных сборках продукта, тестовых средах или при сравнении результатов двух различных подходов к тестированию, чтобы определить, существует ли статистически значимое различие. Он является альтернативой тесту хи-квадрат Пирсона, особенно полезен при работе с небольшими выборками.

Основные шаги:

  1. Формулирование нулевой ($H_0$) и альтернативной ($H_1$) гипотез.
    • $H_0$: Нет статистически значимой разницы в распределении частот между анализируемыми группами.
    • $H_1$: Существует статистически значимая разница.
  2. Построение таблицы сопряженности с наблюдаемыми частотами.
  3. Расчет ожидаемых частот для каждой ячейки таблицы при условии справедливости $H_0$.
  4. Расчет G-статистики по формуле: $G = 2 \sum_{i} O_i \ln(O_i/E_i)$ где $O_i$ - наблюдаемая частота, $E_i$ - ожидаемая частота.
  5. Определение числа степеней свободы ($df$). Для таблицы сопряженности $R \times C$ ($R$ строк, $C$ столбцов): $df = (R-1)(C-1)$.
  6. Сравнение рассчитанного значения G с критическим значением из таблицы G-распределения или использование p-значения. Если G > критического значения или p < уровня значимости ($\alpha$), $H_0$ отвергается.

Пример применения в QA:

Сравнение распределения типов дефектов в двух разных тестовых средах.

Тип дефекта Среда А (Наблюдаемое) Среда Б (Наблюдаемое)
Функциональный 50 30
UI/UX 20 15
Производительность 10 5
Итого 80 50

Далее рассчитываются ожидаемые частоты и значение G.

Инструменты для расчета:

  • Python: библиотеки scipy.stats.
  • R: встроенные функции.
  • Статистические пакеты: SPSS, R, SAS.
# Пример использования в Python с scipy
import numpy as np
from scipy.stats import chi2_contingency # G-тест реализован в chi2_contingency в scipy через параметр lambda='log-likelihood'

# Таблица наблюдаемых частот (пример данных)
observed = np.array([[50, 30],
                     [20, 15],
                     [10,  5]])

# Выполнение G-теста
# lambda='log-likelihood' указывает на использование G-теста
g_statistic, p_value, dof, expected = chi2_contingency(observed, lambda_='log-likelihood')

print(f"G-статистика: {g_statistic:.4f}")
print(f"P-значение: {p_value:.4f}")
print(f"Степени свободы (dof): {dof}")
print("Ожидаемые частоты:")
print(expected)

# Проверка гипотезы при уровне значимости 0.05
alpha = 0.05
if p_value < alpha:
    print("Результат: Отвергаем нулевую гипотезу - существует статистически значимая разница.")
else:
    print("Результат: Не отвергаем нулевую гипотезу - нет статистически значимой разницы.")