Вопрос или проблема
Я хочу написать метод для тестирования нескольких гипотез для пары школ (скажем, 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 для статистического тестирования.
Шаги для тестирования гипотез
-
Загрузка и фильтрация данных: Сначала вам нужно загрузить данные и отфильтровать нужные строки и столбцы, чтобы оставить только записи для указанных учебных заведений и слова с ненулевыми значениями.
-
Построение контингентной таблицы: Используйте функцию
pd.crosstab()
для создания контингентной таблицы, которая позволит провести тест хи-квадрат. -
Проведение теста хи-квадрат: Для каждой пары слов выполните тест хи-квадрат и оцените результат, чтобы определить, является ли различие между двумя учебными заведениями статистически значимым по сравнению с заданным уровнем значимости (alpha).
-
Сбор результатов: Подсчитайте общее количество проведенных тестов и количество значимых результатов, чтобы вернуть их в виде кортежа.
Пример реализации
Вот пример кода, который иллюстрирует все вышеперечисленные шаги:
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}")
Объяснение кода
-
Загрузка и фильтрация: Мы загружаем данные из CSV файла и оставляем только строки с двумя указанными колледжами. Затем отфильтровываются столбцы, где все значения равны нулю.
-
Тестирование: Для каждого слова создаётся контингентная таблица, и если сумма значений в таблице больше 0, выполняется тест хи-квадрат.
-
Сбор результатов: Тесты сохраняются в список, и по завершению производится подсчет как общего количества тестов, так и количества значимых результатов.
Заключение
Таким образом, метод позволяет эффективно тестировать различные гипотезы о различиях в количестве упоминаний слов между двумя учебными заведениями, используя статистические методы. Это дает возможность проводить более глубокий анализ данных и понимать, на чем концентрируются исследования в разных колледжах.