欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python-统计学应用-方差分析

程序员文章站 2022-07-11 18:03:17
...

方差分析-ANOVA

方差分析一般步骤:

  1. 根据感兴趣的因素或因子的不同取值或水平将反应变量分成M组
  2. 提出原假设H0:因子对于反应变量没有影响;备择假设H1:因子对于观测变量有影响
  3. 求出样本数据中每组的岩本平均值与全样本均值,算出组内均方差MSF和组间均方差MSE
  4. 构建φ统计量并计算φ值:φ=MSF/MSE~F(M-1,N-M)
  5. 由显著性水平α(1%,5%,10%)查表比对F判断拒绝还是接受原假设。

离差平方和

方差分析原假设为:
不同因子水平下反应变量的均值是相同的。

  • ESS(Error Sum of Square)
    误差平方和,也称为组内偏差平方和。*度为N-M,即全样本数量减去组数。
  • FSS(Factor Sum of Square)
    因子平方和,也称为组间差异平方和。*度为M-1。
  • TSS(Total Sum of Square)
    总离差平方和。*度为N-1。

TSS=ESS+FSS

managers = pd.read_csv('managers.csv', index_col='Date')
MANA = managers[['HAM1', 'HAM3', 'HAM4']]
print(MANA)
ess1 = ((MANA.HAM1 - MANA.HAM1.mean()) ** 2).sum()
ess3 = ((MANA.HAM3 - MANA.HAM3.mean()) ** 2).sum()
ess4 = ((MANA.HAM4 - MANA.HAM4.mean()) ** 2).sum()
ess = ess1 + ess3 + ess4
t_mean = MANA.mean().mean()
fss = 132 * (((MANA.HAM1.mean() - t_mean) ** 2) + ((MANA.HAM3.mean() - t_mean) ** 2) +
             ((MANA.HAM4.mean() - t_mean) ** 2))
tss = fss + ess

显著性检验

φ=MSF / MSE=(FSS / (M-1)) / (ESS / (N-M))~F(M-1,N-M)

方差分析-Python操作

import pandas as pd
import statsmodels.stats.anova as anova
from statsmodels.formula.api import ols

单因素方差分析

returns = pd.DataFrame(pd.concat([MANA.HAM1, MANA.HAM3, MANA.HAM4]))
returns['Class'] = ['HAM1' for i in range(132)] + ['HAM3' for t in range(132)] + ['HAM4' for w in range(132)]
returns.columns = ['Return', 'Class']
print(returns)
model = ols('Return~C(Class)', data=returns).fit()
table1 = anova.anova_lm(model)
print(table1)

多因素方差分析

model = ols('Return~C(Class)+C(Year)', data=returns).fit()
table2 = anova.anova_lm(model)
print(table2)

析因方差分析

model = ols('Return~C(Class)*C(Year)', data=returns).fit()
table3 = anova.anova_lm(model)
print(table3)