Множественные гипотезы в Python

Вопрос или проблема

Я хочу написать метод для тестирования нескольких гипотез для пары школ (скажем, TAMU и UT Austin). Я хочу рассмотреть все возможные пары слов (Исследование, Тезис, Предложение, ИИ, Аналитика) и протестировать гипотезу о том, что количество слов существенно различается между двумя школами, используя заданный уровень значимости (0.05).

Необходимо проводить тесты только для слов, которые имеют ненулевые значения для обеих школ. То есть каждая строка и столбец в таблице сопряженности должны суммироваться >0.

В конечном итоге хочу вернуть кортеж с

  • Общим количеством проведенных тестов и
  • Количество значимых тестов.

Пример датафрейма:

Названия Исследование Тезис Предложение ИИ Данные аналитики
TAMU 54 0 0 6 5
uiuc 33 43 5 0 76
USC 4 1 0 7 21
UT Austin 22 31 0 0 55
UCLA 55 6 7 9 11
from scipy.stats import chi2_contingency
def school_term_hypotheses(filename,college1, college2, alpha):
   
   df=pd.read_csv(filename)
   df=df[(df['Name'] == college1) | (df['Name'] == college2)]
   df=df.loc[:, df.ne(0).all()]
   df=df.set_index('Unnamed: 0')
   #chi,p=chi2_contingency(df)[:2]
   #return(p)

school_term_hypotheses("test.csv", 'TAMU','UT Austin', 0.05)

У меня нет представления, что делать после получения датафрейма с ненулевыми значениями. Мне нужно помочь разобраться, как тестировать несколько гипотез.

Попробуйте следующий код

from scipy import stats
def chi_squared_test(df,college1,college2,alpha):
    contingency_table = pd.crosstab(df.loc[college1,:],df.loc[college2,:])
    try:
        stat,p,dof,expected = stats.chi2_contingency(contingency_table)
    except:
        return None
    return p 

Ответ или решение

Для тестирования нескольких гипотез по сравнениям между двумя учебными заведениями, такими как TAMU и UT Austin, с использованием распределения хи-квадрат в Python, вам потребуется учитывать определенные шаги и методы для реализации данной задачи. Мы будем использовать библиотеку Pandas для обработки данных и SciPy для статистического тестирования.

Шаги для тестирования гипотез

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

  2. Построение контингентной таблицы: Используйте функцию pd.crosstab() для создания контингентной таблицы, которая позволит провести тест хи-квадрат.

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

  4. Сбор результатов: Подсчитайте общее количество проведенных тестов и количество значимых результатов, чтобы вернуть их в виде кортежа.

Пример реализации

Вот пример кода, который иллюстрирует все вышеперечисленные шаги:

import pandas as pd
from scipy.stats import chi2_contingency

def school_term_hypotheses(filename, college1, college2, alpha):
    # Загрузка данных
    df = pd.read_csv(filename)

    # Фильтрация данных для двух колледжей
    df = df[(df['Names'] == college1) | (df['Names'] == college2)]

    # Удаление столбцов, где суммы равны 0
    df = df.loc[:, (df != 0).any(axis=0)]

    # Условия для тестирования: строки для студентов
    results = []
    for term in df.columns[1:]:  # Пропускаем колонку с именами
        # Формируем контингентную таблицу
        contingency_table = [[df.loc[df['Names'] == college1, term].values[0], 
                               df.loc[df['Names'] == college2, term].values[0]]]

        # Если оба значения больше 0, проводим тест
        if sum(contingency_table[0]) > 0: 
            chi2, p, dof, expected = chi2_contingency(contingency_table)
            results.append((term, p < alpha))

    # Подсчёт значимых и общих тестов
    total_tests = len(results)
    significant_tests = sum(1 for term, is_significant in results if is_significant)

    return total_tests, significant_tests

# Пример вызова функции
total, significant = school_term_hypotheses("test.csv", 'TAMU', 'UT Austin', 0.05)
print(f"Total tests conducted: {total}, Significant tests: {significant}")

Объяснение кода

  1. Загрузка и фильтрация: Мы загружаем данные из CSV файла и оставляем только строки с двумя указанными колледжами. Затем отфильтровываются столбцы, где все значения равны нулю.

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

  3. Сбор результатов: Тесты сохраняются в список, и по завершению производится подсчет как общего количества тестов, так и количества значимых результатов.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...