Я ищу, чтобы выполнить T-тест на различные части данных в панда DataFrame.Выполнение T-теста на мультииндексе Pandas Dataframe
У меня есть dataframe организованы следующим образом: (. А, б и т.д.)
df = pd.DataFrame({'a': {('0hr', '0.01um', 0): 12,
('0hr', '0.01um', 1): 10,
('0hr', '0.1um', 0): 8,
('0hr', '0.1um', 1): 6,
('0hr', 'Control', 0): 4,
('0hr', 'Control', 1): 2,
('24hr', '0.01um', 0): 18,
('24hr', '0.01um', 1): 15,
('24hr', '0.1um', 0): 12,
('24hr', '0.1um', 1): 9,
('24hr', 'Control', 0): 6,
('24hr', 'Control', 1): 3},
'b': {('0hr', '0.01um', 0): 42,
('0hr', '0.01um', 1): 35,
('0hr', '0.1um', 0): 28,
('0hr', '0.1um', 1): 21,
('0hr', 'Control', 0): 14,
('0hr', 'Control', 1): 7,
('24hr', '0.01um', 0): 30,
('24hr', '0.01um', 1): 25,
('24hr', '0.1um', 0): 20,
('24hr', '0.1um', 1): 15,
('24hr', 'Control', 0): 10,
('24hr', 'Control', 1): 5}})
печати (DF)
a b
0hr 0.01um 0 12 42
1 10 35
0.1um 0 8 28
1 6 21
Control 0 4 14
1 2 7
24hr 0.01um 0 18 30
1 15 25
0.1um 0 12 20
1 9 15
Control 0 6 10
1 3 5
Для каждого столбца Я хотел бы, чтобы вычислить выполнить т -тест, сравнивающий элемент управления для заданного временного интервала с другими тестами в этот период времени.
Например:
[t, prob] = stats.ttest_ind(df.loc['0hr'].loc['Control'] , df.loc['0hr'].loc['Control'], 1, equal_var=True)
[t, prob] = stats.ttest_ind(df.loc['0hr'].loc['Control'] , df.loc['0hr'].loc['0.01um'], 1, equal_var=True)
[t, prob] = stats.ttest_ind(df.loc['0hr'].loc['Control'] , df.loc['0hr'].loc['0.1um'], 1, equal_var=True)
[t, prob] = stats.ttest_ind(df.loc['24hr'].loc['Control'] , df.loc['24hr'].loc['Control'], 1, equal_var=True)
[t, prob] = stats.ttest_ind(df.loc['24hr'].loc['Control'] , df.loc['24hr'].loc['0.01um'], 1, equal_var=True)
[t, prob] = stats.ttest_ind(df.loc['24hr'].loc['Control'] , df.loc['24hr'].loc['0.1um'], 1, equal_var=True)
Я пытался сделать это с df.apply, но я не уверен, что правильный синтаксис. Я хотел бы вернуть результаты в новый dataframe структурированного как:
results = pd.DataFrame({'a': {('0hr', '0.01um', 't'): '-',
('0hr', '0.01um', 'prob'): '-',
('0hr', '0.1um', 't'): '-',
('0hr', '0.1um', 'prob'): '-',
('0hr', 'Control', 't'): '-',
('0hr', 'Control', 'prob'): '-',
('24hr', '0.01um', 't'): '-',
('24hr', '0.01um', 'prob'): '-',
('24hr', '0.1um', 't'): '-',
('24hr', '0.1um', 'prob'): '-',
('24hr', 'Control', 't'): '-',
('24hr', 'Control', 'prob'): '-'},
'b': {('0hr', '0.01um', 't'): '-',
('0hr', '0.01um', 'prob'): '-',
('0hr', '0.1um', 't'): '-',
('0hr', '0.1um', 'prob'): '-',
('0hr', 'Control', 't'): '-',
('0hr', 'Control', 'prob'): '-',
('24hr', '0.01um', 't'): '-',
('24hr', '0.01um', 'prob'): '-',
('24hr', '0.1um', 't'): '-',
('24hr', '0.1um', 'prob'): '-',
('24hr', 'Control', 't'): '-',
('24hr', 'Control', 'prob'): '-'}})
Считаете ли вы использование теста anova? Это точно t-тест для нескольких образцов (легко найти, например, в wikipedia). Я запустил его для набора данных, который вы предоставляете, и результат состоит в том, что по крайней мере один образец отличается. Затем вы запускаете HSD tukey, чтобы узнать, какой из них (один или более одного). Это я также пробовал, но, честно говоря, я не смог правильно обработать ваш мультииндекс. Это даст вам хороший список, образцы которого разные, а какие нет. Вам действительно нужны результаты в формате, который вы предлагаете в своем вопросе? – lrnzcig
Я открыт для формата результатов, но я считаю, что мне нужен t-тест. Это не мои экспериментальные данные, поэтому я предоставляю то, о чем просили ... двухсторонний независимый t-тест. Мне нужно сообщить значение p. Это казалось мне полезным, поскольку в любой момент времени сравниваются только два набора данных (например, 0.01um против Control или 0.1um vs. Control). Насколько я понимаю, ANOVA - это сравнение нескольких наборов данных. – agf1997
Дело в том, что я не думаю, что понял это, извините. Хорошо, нет ANOVA. Но тогда вы будете запускать 24x2 t-тестов ?? Может быть, я до сих пор не понял ... Во всяком случае, если вы хотите применить значение к мультииндексу, это будет нечто вроде 'df.loc ['0hr']. Loc ['0.01um'] ['t'] = xxx', считая, что 't' - столбец. Для вашего фрейма данных я пробовал его прямо в ipython как 'df.loc ['0hr']. Loc ['0.01um']. Loc [0] ['a'] = 3'. Но если я еще не понял, просто скажи! – lrnzcig