javascript试题及答案Python数据分析基础|⽅差分析
之前我们曾经讲过⽤Python做t检验,它⽤于分析⼀组数据与另⼀组数据或者总体均值之间的均值差异,从⽽判断它们是否来⾃于同⼀个总体。
我会分享⼤量关于⽹页抓取、数据分析与挖掘、机器学习还有可视化等⽅⾯的知识,欢迎感兴趣的同学关注我!
但是t检验有它的局限性,它⽆法应对多个因⼦变量以及因⼦变量有多个⽔平(⼤于2)的情况。这时,我们就需要使⽤⽅差分析了。
⽅差分析的⽬的是分析因⼦对反应变量有⽆显著影响,即因⼦的不同⽔平下反应变量(因变量)的均值是否有差异。
⼀些概念
在⽅差分析中,我们需要注意⼏个概念:
1. 组内偏差平⽅和,即误差平⽅和,ESS:它反映了样本与其所处因⼦⽔平的组别均值的偏差,⽐如有三个班级ABC,⼩明是A班的学
web前端思维导图
python数据分析基础教程答案
⽣,那么⼩明的成绩与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
oracle数据库新手入门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()
然后我们进⾏⽅差分析,看⼀看这三个⾏业的股票表现是否⼀致。
model = ols('pct_chg ~ C(industry)', data=df).fit()
anova.anova_lm(model)
可以看到,p值远⼩于0.01。因此,在0.01的显著性⽔平下,我们应该拒绝原假设,即这三个⾏业的股票在2018年最后⼀个交易⽇的收益率是不同的。
enterprise id2. 多因素⽅差分析
多因素⽅差分析的实现⽅法也基本⼀致,我们来看⼀下。
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 ('软件服务', '化⼯原料', '证券')")
html indexofdf = df.query("area in ('⼴东', '浙江', '江苏')")
# ⽅差分析
model = ols('pct_chg ~ C(industry) + C(area)', data=df).fit()
anova.anova_lm(model)
我们增加了⼀个地区维度,并且只保留了其中三个省份的数据。然后我们看到,⾏业对于收益率的影响依然显著,⽽不同地区的收益率之间的差异不⾜以我们拒绝原假设。
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进⾏⽅差分析的过程,你学会了吗?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。