#python #statistics #data-science #statsmodels #anova
#питон #Статистика #наука о данных #статс-модели #anova
Вопрос:
У меня есть фрейм данных со столбцами: Время, идентификатор, Лекарство, Значение
Вот мой код о том, как я выполняю двухсторонние anova и мультиплетесты
#libraries import pandas as pd import statsmodels.formula.api as sm from statsmodels.stats.anova import anova_lm from statsmodels.stats.multitest import multipletests import os df= pd.read_excel(r"C:path.xlsm", sheet_name="test") #dataframe order = [18,19,20,21,22,23,0] #sort 24 hour time starting at time 18hr df['Drug']=pd.Categorical(df['Drug']) df['Time'] = pd.Categorical(df['Time'], categories=order) #TWO-WAY ANOVA mod = sm.ols('Value~Drug Time Time*Drug', data = df).fit() aov = anova_lm(mod, type=2) #Multi-test (mt) mt = pd.concat([mod.params,mod.pvalues],axis=1) mt.columns=['coefficient','pvalues'] mt = mt[mt.index.str.contains('Drug')] mt['corrected_p'] = multipletests(mt['pvalues'],alpha=0.05,method="sidak",is_sorted=True)[1]
Я получаю следующие нескорректированные[‘pvalues’ и исправленные значения pvalues[‘corrected_p’] из выходных данных multi-test (mt):
Index pvalues correct_p Drug[T.B] 0.0159475 0.106432 Time[T.19]:Drug[T.B] 0.0738362 0.41546 Time[T.20]:Drug[T.B] 0.0778909 0.43314 Time[T.21]:Drug[T.B] 0.0699678 0.398153
Когда я использую один и тот же набор данных в graphpad prism, вместо этого я получаю эти значения (используя двустороннее anova и многопараметрическое сравнение sidak:
Drug A-B Individual P value Adjusted P Value 18 0.0159 0.1064 19 0.9689 gt;0.999 20 gt;0.9999 gt;0.999 21 0.9379 gt;0.999
Особенно для времени 19,20 и 21 скорректированное значение P существенно отличается, и я не уверен, почему. Я обеспокоен, если я неправильно закодировал свою статистику, вызвав разницу.
Будем рады предоставить дополнительную информацию по мере необходимости
Комментарии:
1. Каковы неисправленные значения pbalues
mt['pvalues']
?2. неверные значения pval из mt[«значения pval»] равны 0,0159475, 0,0738362, 0,0778909, 0,0699678 в том же порядке Препарат[Т. Б],Время[Т. 19]:Препарат[Т. Б], Время[Т. 20]:Препарат[Т. Б], Время[Т. 21]:Препарат[Т. Б]. Я добавлю это к вопросу
3. в стороне is_sorted следует оставить значение False, если значения pvalues еще не отсортированы.
4. Являются ли нескорректированные значения одинаковыми в graphpad prism? Сидак-это просто одновременная настройка значений p, таких как бонферрони, не должно быть скачка в p-значениях, таких как
gt;0.999
. Я предполагаю, что graphpad интерпретирует взаимодействие иначе, чем то, что у вас есть в версии statsmodels. (Я ничего не знаю о призме graphpad.)5. Одно возможное различие: возможно, graphpad prism использует количество всех возможных взаимодействий в качестве соответствующего количества тестов, в то время как statsmodels использует только количество значений в списке.