python方差分析,python求方差的怎么编写

首页 > 教育培训 > 作者:YD1662023-04-26 11:59:13

之前我们曾经讲过用Python做t检验,它用于分析一组数据与另一组数据或者总体均值之间的均值差异,从而判断它们是否来自于同一个总体。


我会分享大量关于网页抓取、数据分析与挖掘、机器学习还有可视化等方面的知识,欢迎感兴趣的同学关注我!


但是t检验有它的局限性,它无法应对多个因子变量以及因子变量有多个水平(大于2)的情况。这时,我们就需要使用方差分析了。

方差分析的目的是分析因子对反应变量有无显著影响,即因子的不同水平下反应变量(因变量)的均值是否有差异。

一些概念

在方差分析中,我们需要注意几个概念:

  1. 组内偏差平方和,即误差平方和,ESS:它反映了样本与其所处因子水平的组别均值的偏差,比如有三个班级ABC,小明是A班的学生,那么小明的成绩与A班成绩的均值之间的差异就是组内差异。
  2. 组间差异平方和,又称因子平方和,FSS:它反映了不同因子水平间的均值差异,比如上述的三个班级,A、B、C三个班级的均值之间的差异就叫组间差异。
  3. (总)离差平方和,TSS:组内差异与组间差异加起来,就是总的离差了。
  4. 组间均方差和组内均方差:方差除以自由度就是均方差。
  5. 我们的φ统计量就是组间均方差和组内均方差的均值,它符合F分布。φ统计量越大,就说明组间差异对于总离差的贡献越大,当超过了一定水平之后,我们就认为因子影响显著,即不同水平间存在显著差异。
基本步骤
  1. 根据感兴趣的因素的不同取值,将反应变量分成M个组;
  2. 提出原假设H0
  3. 因子对于反应变量没有影响;备择假设H1
  4. 因子对观测变量有显著影响;
  5. 求出样本数据中每组的样本均值即全样本均值,算出组内均方差MSF和组间均方差MSE;
  6. 构建φ统计量并计算φ值:Φ=MSF/MSE ∼ F(M−1,N−M)
  7. 由显著性水平α(通常取0.025、0.05、0.1等)查F分布表的林价值来判断是接受零假设还是拒绝零假设。
Python实现1. 单因素方差分析

我们先获取数据,用tushare获取18年最后一个交易日的行情数据,然后过滤一下,仅保留软件服务、化工原料和证券三个行业的股票行情。

import tushare as ts import statsmodels.stats.anova as anova from statsmodels.formula.api import ols import pandas as pd pro = ts.pro_api() df1 = pro.daily(trade_date='20181228') df2 = pro.stock_basic(market='SSE') df = pd.merge(df1, df2, on='ts_code', how='inner') df = df.query("industry in ('软件服务', '化工原料', '证券')") df.head()

python方差分析,python求方差的怎么编写(1)

然后我们进行方差分析,看一看这三个行业的股票表现是否一致。

model = ols('pct_chg ~ C(industry)', data=df).fit() anova.anova_lm(model)

python方差分析,python求方差的怎么编写(2)

可以看到,p值远小于0.01。因此,在0.01的显著性水平下,我们应该拒绝原假设,即这三个行业的股票在2018年最后一个交易日的收益率是不同的。

2. 多因素方差分析

多因素方差分析的实现方法也基本一致,我们来看一下。

df1 = pro.daily(trade_date='20181228') df2 = pro.stock_basic(market='SSE') df = pd.merge(df1, df2, on='ts_code', how='inner') df = df.query("industry in ('软件服务', '化工原料', '证券')") df = df.query("area in ('广东', '浙江', '江苏')") # 方差分析 model = ols('pct_chg ~ C(industry) C(area)', data=df).fit() anova.anova_lm(model)

python方差分析,python求方差的怎么编写(3)

我们增加了一个地区维度,并且只保留了其中三个省份的数据。然后我们看到,行业对于收益率的影响依然显著,而不同地区的收益率之间的差异不足以我们拒绝原假设。

3. 析因方差分析

析因方差分析与多因素方差分析很像,不过要多一个因子的乘项。

df1 = pro.daily(trade_date='20181228') df2 = pro.stock_basic(market='SSE') df = pd.merge(df1, df2, on='ts_code', how='inner') df = df.query("industry in ('软件服务', '化工原料', '证券')") # 方差分析 model = ols('pct_chg ~ C(industry) * C(area)', data=df).fit() anova.anova_lm(model)

python方差分析,python求方差的怎么编写(4)

我们看到,不管是行业还是地区,它们的影响都很显著,但是他们的乘项的影响并不显著,也就是说他们之间不存在明显的交互作用。

以上就是使用Python进行方差分析的过程,你学会了吗?

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.