(五十七)方差分析与相关分析

单因素方差分析(连续变量与一个多分类变量)

单因素分析可以得到不同因素对观测变量的影响程度。这里因素的不同水平表示因素不同的状态或者等级。比如研究信用卡的消费是否受教育程度(4个水平)的影响,可以使用单因素方差分析,其前提条件与双样本t检验相似:变量服从正态分布、观测之间独立、以及方差齐性检验。

需要注意的是在方差分析中,原假设为所有组的方差相等,备择假设为至少有两组方差不等,如下图所示。
在这里插入图片描述
在方差分析中,数据的总误差可以解释为组内误差与组间误差,二者的区别在于找到组间变异(SSM)和组内变异(SSE)之间的关系,其中组内变异是同类别下数据的离均差平方和,代表同类别内数据变异的程度组间变异是组内均值与总均值的离均差平方和,代表不同类别数据之间的变异的程度,组间变异与组内变异之和为总变异。因此在总变异不变时,组间差异大,组内差异就小,这也意味着各个类别间数据的差异较大时,类别内的数据差异较小。此时可以构造F统计量:
在这里插入图片描述
其中SSM/(k-1) 表示组间变异除以自由度,SSE/(n-k) 代表组内变异除以自由度,两者的比值服从自由度为(k-1, n-k)的F分布。显然,当F值越大时,说明组间的变异越大,就越倾向于拒绝原假设,即组间是有差异的

下面对信用卡的消费是否受教育程度的影响进行单因素方差分析:

edu=[]
for i in card['edu_class'].unique():#遍历受教育程度的每一等级
    edu.append(card[card['edu_class']==i]['avg_exp'])
stats.f_oneway(*edu)#加*可以将edu列表中的四个元素拆分
Out[1]: F_onewayResult(statistic=31.825683356937684, pvalue=7.658361691248798e-13)

可见P值接近于0,拒绝原假设,认为组间是有显著差异的,即教育程度会显著影响信用卡的消费。

多因素方差分析(连续变量与多个分类变量)

多因素方差分析可以检验多个分类变量与一个连续变量的关系。在多因素方差分析中,除考虑多个分类变量对连续变量的影响外,还应考虑分类变量之间的交互效应。例如,在探讨信用卡消费与性别、教育程度的关系时,应考虑性别与教育程度的交互效应,即教育程度对不同性别的信用卡消费人群的影响可能存在差异。

1、无交互效应时构建OLS模型:

import statsmodels.formula.api as smf
ana=smf.ols('avg_exp ~ C(edu_class) + C(gender)',data=card).fit() 
sm.stats.anova_lm(ana)
Out[7]: 
                df        sum_sq       mean_sq          F        PR(>F)
C(edu_class)   3.0  8.126056e+06  2.708685e+06  31.578365  1.031496e-12
C(gender)      1.0  4.178273e+04  4.178273e+04   0.487111  4.877082e-01
Residual      65.0  5.575481e+06  8.577662e+04        NaN           NaN

可以看到教育程度的F值为31.58,P值趋近于0,拒绝原假设,即教育程度不同的群体消费支出有显著差异;性别的F值为0.49,P值为0.49,无法拒绝原假设,即男女消费支出无显著差异。

2、有交互效应时构建OLS模型:

pd.set_option('display.max_columns', None) 
anal=smf.ols('avg_exp ~ C(edu_class) + C(gender) + C(edu_class)*C(gender)', data=card).fit() 
sm.stats.anova_lm(anal)
Out[10]: 
                          df        sum_sq       mean_sq          F  \
C(edu_class)             3.0  8.126056e+06  2.708685e+06  33.839350   
C(gender)                1.0  4.178273e+04  4.178273e+04   0.521988   
C(edu_class):C(gender)   3.0  8.761475e+05  2.920492e+05   3.648543   
Residual                63.0  5.042862e+06  8.004544e+04        NaN   

                              PR(>F)  
C(edu_class)            3.753889e-13  
C(gender)               4.726685e-01  
C(edu_class):C(gender)  1.716862e-02  
Residual                         NaN  

考虑交互效应后,与教育程度及性别对应的F值和P值都发生了微小的改变。其中教育程度和性别的交互项对消费支出的影响在5%的显著性水平上也是显著的,F值为3.65 ,P值为0.02。下面查看带交互项的多元方差分析的回归系数结果:

anal.summary()#以下仅展示系数表结果
====================================================================================================
                                       coef    std err          t      P>|t|      [0.025      0.975]
----------------------------------------------------------------------------------------------------
Intercept                          207.3700    200.057      1.037      0.304    -192.412     607.152
C(edu_class)[T.1]                  417.8090    209.367      1.996      0.050      -0.577     836.195
C(edu_class)[T.2]                  732.2613    212.977      3.438      0.001     306.661    1157.861
C(edu_class)[T.3]                 1346.5708    216.086      6.232      0.000     914.757    1778.384
C(gender)[T.1]                      -0.0168     67.939     -0.000      1.000    -135.782     135.749
C(edu_class)[T.1]:C(gender)[T.1]   192.7428    162.889      1.183      0.241    -132.765     518.251
C(edu_class)[T.2]:C(gender)[T.1]    96.8755    110.846      0.874      0.385    -124.632     318.383
C(edu_class)[T.3]:C(gender)[T.1]  -289.6350    109.331     -2.649      0.010    -508.115     -71.155

可以看到不同教育等级前的系数均显著(P值分别为0.05、0.001和0.000),则教育程度对消费支出的影响显著;同理性别对消费支出的影响不显著;交互项中,教育等级为3的女性对消费支出有显著的负向影响。

相关分析(两个连续变量之间)

探讨两个连续变量之间的关系时,可使用相关分析。

相关系数

可以使用corr函数进行相关分析,其中method参数除可以指定“pearson"外,还可以指定“spearman”和“kendall"用于输出Spearman相关系数和kendall相关系数。下面探索信用卡消费与收入之间的相关关系:

card[['Income','avg_exp']].corr(method='pearson')
Out[27]: 
           Income   avg_exp
Income   1.000000  0.674011
avg_exp  0.674011  1.000000

散点矩阵图

通过散点矩阵图可以对多个变量之间的相关关系进行直观和全面的了解。从seaborn中引入pairplot函数,画出的矩阵图中对角线位置默认为该变量的频数直方图,其他位置为变量之间的散点图。

from seaborn import pairplot
import matplotlib.pyplot as plt
pairplot(card[['avg_exp','Age','Income','dist_home_val','dist_avg_income']])
plt.show()

在这里插入图片描述
通过参数hue还可以指定分组变量,比如查看不同性别群体中各变量的差异:

pairplot(card[['avg_exp','Age','Income','dist_home_val','dist_avg_income',\
'gender']],hue='gender',kind='reg',diag_kind='kde',size=1.5)
#kind : {'scatter', 'reg'};diag_kind : {'auto', 'hist', 'kde'}
plt.show()

在这里插入图片描述
从图中可以看出,每张图都根据分组变量进行了区分,并且给出了数据的回归拟合线以及上下的浮动范围。

变量之间的假设检验方法总结

在这里插入图片描述
参考文献

常国珍等《Python数据科学:技术详解与商业实践》,机械工业出版社

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值