python方差分析

目录

一元方差分析

一元单因素方差分析

 一元多因素方差分析

协方差分析 


 

一元方差分析

一元单因素方差分析

场景:5种不同像素的数码相机(单因素)对销量(研究的因变量)是否有显著差异

G = dc_sales['pixel'].unique()
args = []
for I in list(G):
    args.append(dc_sales[dc_sales['pixel']==I]['sales'])
# 将pixel变量转化为分类变量并为其值挂标签
dc_sales['pixel']=dc_sales['pixel'].astype('category')
dc_sales['pixel'].cat.categories=['500像素以下','500-600万像素','600-800万像素','800-1000万像素','1000万像素以上']
dc_sales['pixel'].cat.set_categories=['500像素以下','500-600万像素','600-800万像素','800-1000万像素','1000万像素以上']

 

若方差齐性检验不满足

1、检查某些特殊表现的观测值,剔除

2、使用无方差齐性的多重比较方法

3、数据变换(log/正态)

4、非参数检验

 

#1.方差齐性检验
stats.levene(*args)【p越大越满足方差齐性】
#2.f检验
stats.f_oneway(*args)
#2.2 更详细的结果
from statsmodels.formula.api import ols
dc_sales_anova=sm.stats.anova_lm(ols('sales ~ C(pixel)',dc_sales).fit())
print dc_sales_anova
>>              df      sum_sq     mean_sq       F     pr(>F)
>>C(pixcel)     4       10472       2618        19    1.5e-08
>>Residual      35      4682        133         NaN    NaN

组间离差平方和(SSA)=10472,组内离差平方和(SSE)=4682

组间方差=10472/4,组内方差=4682/35

多重比较检验

F检验只能回答多组之间的均值不同,但不不能说是哪几组不同

通过2组配对比较,可以看哪几组均值存在差异

from statsmodels.stats.multicomp import pairwise_tukeyhsd
ds_sales_anova_post=pairwise_tukeyhsd(dc_sales['sales'],dc_sales['pixel'].alpha=0.5)
dc_sales_anova_post.summary()
# 对5种不同像素两两对比,10个结果,看meandiff和P值即可
# 当然多重检验会有问题,这里有多重检验校正之类的

 一元多因素方差分析

因素单独对因变量产生的影响为主效应,因素之间共同对因变量产生的影响称为交互作用

多因素方差分析假定因素和因变量之间的关系是线性关系

# 只考虑主效应
formula = 'space ~ C(education)+C(unit)+C(income)+C(type)'
house_anova = sm.stats.anova_lm(ols(formula,data=house).fit(),typ=3)
#typ=3代表作方差分析type3型检验
print house_anova

>>                 sum_sq        df           F           PR(>F)
Intercept           28663         1          89           1.5e-19
C(eudcation)         1519         3          1.58         1.9e-01
C(unit)              886          5          0.55         7.3e-01
C(income)           10545         4          8.25         1.99e-06
C(type)              9604        10          3            1.09e-03
Residual           143477        449         NaN           NaN          

这个结果与直接ols很像,但是不一样哦,比如income有四个类型,ols的结果会把这四个类型的每个p值等等也会显现出来~

# 有交互效应
formula = 'space ~ C(income)*C(type)'
house_anova_inter=sm.stats.anova_lm(ols(formula,data=house).fit())

协方差分析 

将方差分析与回归分析结合【个人觉得协方差分析=广义线性回归】

方差分析:一个或几个因子(分类变量) 对Y(连续变量)的影响

回归分析:一个或几个变量(连续变量) 对Y(连续变量)的影响

将那些难以控制的因素当作协变量,在排除协变量影响的条件下,分析可控因素对因变量的影响

注意:协变量往往是连续型变量

因变量=因素主效应+因素交互效应+协变量+随机误差

例子:排除协变量(即返点【因销售人员表现】指定)作用后,分析卖场因素和售后服务因素对销售量的影响,为企业后面选址和指定服务条款提供参考意见

formula='sales~points+C(market)*C(warranty)'
sale_points_anova_cov=sm.stats.anova_lm(ols(formula,data=sale_points).fit())

注意理解这里排除points,其实在ols中的结果每一条都是固定其他不变,这一条的单独影响,所以协方差分析和ols如出一辙 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章