此时我们是取的四种不同图案的儿童水杯的销量作为样本进行分析,单因素方差分析可以用于比较多个独立的正态总体均值之间是否存在显著差异,是独立样本T检验的推广版,也属于参数假设检验。
进行假设检验时未说明方差是否齐性时都要先进行方差齐性检验,通过方差检验后再进行下一步分析,假如直接接受原假设时便直接认为要检验的个体之间无显著性差异,拒绝原假设时是指要检验的个体之间不全相等,此时我们经常会有的一个疑问就是其中哪两个个体之间互不相等,所以此时就要开始更深一步的分析进行多重比较。
这里我们进行四种不同图案的方差齐性检验时要将数据的形式进行转化成如图所示的形式。
这里的销量数据似乎是按类别进行分组的。将不同类别的数据分开传入levene()函数进行检验,有以下考虑:
'''step1 调用包'''
import pandas as pd
import numpy as np
#下一行代码用于方差齐性Levend检验
from scipy import stats
#下两行代码用于方差分析
#https://blog.csdn.net/qq_41867980/article/details/90517277?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
#下一行代码用于多重比较
from statsmodels.stats.multicomp import pairwise_tukeyhsd
'''step2 导入数据'''
df = pd.read_excel('data_ANOVA.xlsx')
'''step3 前提性检验:levene检验'''
res_v = stats.levene(df['销量'][df['类别'] == '超人'],
df['销量'][df['类别'] == 'Kitty猫'],
df['销量'][df['类别'] == '光头强'],
df['销量'][df['类别'] == '佩奇'])
print('方差齐性检验P值:',np.round(res_v.pvalue,3))
# 用Scipy中的下列函数也可做ANOVA
#stats.f_oneway(df['销量'][df['类别'] == '超人'],
# df['销量'][df['类别'] == 'Kitty猫'],
# df['销量'][df['类别'] == '光头强'],
# df['销量'][df['类别'] == '佩奇'])
'''Step4 单因素方差分析'''
formula = '销量~类别'
anova_results = anova_lm(ols(formula,df).fit())
print('\n方差分析结果(ANOVA表):\n',anova_results)
'''Step5 多重比较'''
# 逐对比较差异,原假设:二者之间无显著差异
res_post = pairwise_tukeyhsd(df['销量'],
df['类别'],alpha=0.05)
print('\n多重比较结果:\n',res_post)
这里将不同类别的销量数据传入levene()时,是将每个类别的数据放在一列,形成了多列的输入。
这种做法的主要考虑可能有: