影响事物的因子有很多,怎么才能确定哪个因子是对事物影响最显著的呢,这个时候我们可以使用方差分析。
方差分析的基本思想是判断样本均值的变异是受因素的不同水平还是纯粹由随机因素造成的。根据影响因素的多少可以分为,单因素方差分析是检验单一因素对因变量在不同水平上的影响是否显著。多因素方差分析是对一个因变量是否受多个因素影响进行分析。
本文重点就单因素方差分析进行讨论。
理论
方差分析的原理是认为因素的不同水平(对因素按照某个维度进行的分组)的均数间的差别基本来源组间差异和组内差异。其中组间差异是由实验水平和随机误差构成,而组内误差完全由随机误差构成。
总体的离差平方和SST是组间离差平方和SSA与组内离差平方和SSE构成,将SSA与SSE分别与自己自由度之比就得出相应的方差,在拿方差之比即可得出方差分析的统计量F,所以方差分析也成F检验。
统计量F用来检验因素对因变量的显著性。如果因素对结果没有影响则F接近于1。
Spass实战
方差齐表:可行性检验即,原假设各分组组内无差异。可以看到显著性都是大于0.05的,也就是不能拒绝原假设,即组内是无差异的,可以进行方差分析。
方差表:原假设是组间无差异。可以看到表p值小于0.05,说明是小概率事件,所以可以拒绝原假设,接受H1假设,即组件存在显著差异。
python实战
import statsmodels.api as sm
import pandas as pd
from statsmodels.formula.api import ols
group1 = [29.6, 24.3, 28.5, 32.0]
group2 = [27.3, 32.6, 30.8, 34.8]
group3 = [5.8, 6.2,11.0, 8.3]
group4 = [21.6, 17.4, 18.3, 19.0]
group5 = [29.2, 32.8, 25.0, 24.2]
num = sorted(['g1', 'g2', 'g3','g4', 'g5']*4)
data = group1 + group2 + group3 + group4 + group5
df = pd.DataFrame({'num':num, 'data': data})
mod = ols('data ~ num', data=df).fit()
ano_table = sm.stats.anova_lm(mod, typ=2)
print(ano_table)
可以看到统计库中得出的值跟Spass一致。结论不再赘述。