Код для выполнения ANOVA на разных таймфреймах, где группы могут меняться - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть следующий Dataframe. Однако это может быть любой фрейм данных в этом формате.

df = pd.DataFrame({'Weight': [4.17,5.58,5.18,6.11,4.5,4.61,5.17,4.53,5.33,5.14,4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69,6.31,5.12,5.54,5.5,5.37,5.29,4.92,6.15,5.8,5.26],
                   'Group': ['A','A','A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B','B','B','C','C','C','C','C','C','C','C','C','C'] 
                   })

Как я могу выполнить ANOVA, чтобы дать мне значения F и p для этого без явного указания групп по тексту? Другими словами, существует ли код, который будет автоматически обнаруживать группы и запускать ANOVA, чтобы он работал на любом фрейме данных в этой структуре, а не только на этом?

1 Ответ

1 голос
/ 06 апреля 2020

Чтобы проверить сходство средних между каждой комбинацией групп, мы можем использовать itertools.combinations и scipy.stats.f_oneway:

null hypothesis здесь это, как указано в документации:

, что две или более групп имеют одинаковое население, означает


Сценарий 1: сравнение всех групп:

from scipy.stats import f_oneway

grps = [d['Weight'] for _, d in df.groupby('Group')]

F, p = f_oneway(*grps)

print(F, p)
4.846087862380136 0.0159099583256229

Сценарий 2: сравнение каждой комбинации столбцов:

from itertools import combinations
from scipy.stats import f_oneway

combs = list(combinations(df['Group'].unique(), 2))
for g1, g2 in combs:
    a = f_oneway(df.loc[df['Group'] == g1, 'Weight'], 
                 df.loc[df['Group'] == g2, 'Weight'])
    print(f'For groups {g1} & {g2} the F-value is: {a[0]}, the p-value is: {a[1]}')

Вывод

For groups A & B the F-value is: 1.4191012973623165, the p-value is: 0.24902316597300575
For groups A & C the F-value is: 4.554043294351827, the p-value is: 0.04685138491157386
For groups B & C the F-value is: 9.0606932332992, the p-value is: 0.007518426118219876
...