考虑以下示例 DataFrame:
df = pd.DataFrame({'Names': np.random.randint(1, 10, 1000),
'value': np.random.randn(1000),
'condition': np.random.choice(['NON', 'YES', 'RE'], 1000)})
df.head()
Out:
Names condition value
0 4 RE 0.844120
1 4 NON -0.440285
2 5 YES 0.559497
3 4 RE 0.472425
4 9 YES 0.205906
以下按名称对 DataFrame 进行分组,然后将每个条件组传递给 ANOVA:
import scipy.stats as ss
for name_group in df.groupby('Names'):
samples = [condition[1] for condition in name_group[1].groupby('condition')['value']]
f_val, p_val = ss.f_oneway(*samples)
print('Name: {}, F value: {:.3f}, p value: {:.3f}'.format(name_group[0], f_val, p_val))
Name: 1, F value: 0.138, p value: 0.871
Name: 2, F value: 1.458, p value: 0.237
Name: 3, F value: 0.742, p value: 0.479
Name: 4, F value: 2.718, p value: 0.071
Name: 5, F value: 0.255, p value: 0.776
Name: 6, F value: 1.731, p value: 0.182
Name: 7, F value: 0.269, p value: 0.764
Name: 8, F value: 0.474, p value: 0.624
Name: 9, F value: 1.226, p value: 0.297
对于事后测试,您可以使用 statsmodels(如 here 所述):
from statsmodels.stats.multicomp import pairwise_tukeyhsd
for name, grouped_df in df.groupby('Names'):
print('Name {}'.format(name), pairwise_tukeyhsd(grouped_df['value'], grouped_df['condition']))
名称 1 均值的多重比较 - Tukey HSD,FWER=0.05
============================================
group1 group2 meandiff 下 上 拒绝
------------------------------------------
非 RE 0.0086 -0.5129 0.5301 错误
非 是 0.0084 -0.4817 0.4986 错误
RE 是 -0.0002 -0.5217 0.5214 错误
------------------------------------------
名称 2 均值的多重比较 - Tukey HSD,FWER=0.05
============================================
group1 group2 meandiff 下 上 拒绝
------------------------------------------
非 RE -0.0089 -0.5299 0.5121 假
非 是 0.083 -0.4182 0.5842 错误
RE 是 0.0919 -0.4008 0.5846 错误
------------------------------------------
名称 3 均值的多重比较 - Tukey HSD,FWER=0.05
============================================
group1 group2 meandiff 下 上 拒绝
------------------------------------------
非 RE 0.2401 -0.3136 0.7938 错误
非 是 0.2765 -0.2903 0.8432 错误
RE 是 0.0364 -0.5052 0.578 错误
------------------------------------------
名称 4 均值的多重比较 - Tukey HSD,FWER=0.05
============================================
group1 group2 meandiff 下 上 拒绝
------------------------------------------
非 RE 0.0894 -0.5825 0.7613 错误
非 是 -0.0437 -0.7418 0.6544 错误
RE 是 -0.1331 -0.6949 0.4287 错误
------------------------------------------
名称 5 均值的多重比较 - Tukey HSD,FWER=0.05
============================================
group1 group2 meandiff 下 上 拒绝
------------------------------------------
非重 -0.4264 -0.9495 0.0967 假
非 是 0.0439 -0.4264 0.5142 错误
RE 是 0.4703 -0.0155 0.9561 错误
------------------------------------------
名称 6 均值的多重比较 - Tukey HSD,FWER=0.05
============================================
group1 group2 meandiff 下 上 拒绝
------------------------------------------
非 RE 0.0649 -0.4971 0.627 错误
非 是 -0.406 -0.9405 0.1285 错误
RE 是 -0.4709 -1.0136 0.0717 错误
------------------------------------------
名称 7 均值的多重比较 - Tukey HSD,FWER=0.05
============================================
group1 group2 meandiff 下 上 拒绝
------------------------------------------
非 RE 0.3111 -0.2766 0.8988 错误
非 是 -0.1664 -0.7314 0.3987 错误
RE 是 -0.4774 -1.0688 0.114 错误
------------------------------------------
名称 8 均值的多重比较 - Tukey HSD,FWER=0.05
============================================
group1 group2 meandiff 下 上 拒绝
------------------------------------------
非 RE -0.0224 -0.668 0.6233 假
非 是 0.0119 -0.668 0.6918 错误
RE 是 0.0343 -0.6057 0.6742 错误
------------------------------------------
名称 9 均值的多重比较 - Tukey HSD,FWER=0.05
============================================
group1 group2 meandiff 下 上 拒绝
------------------------------------------
非重 -0.2414 -0.7792 0.2963 假
非 是 0.0696 -0.5746 0.7138 错误
RE 是 0.311 -0.3129 0.935 错误