Python数据分析案例20——我国家庭资产影响因素分析( 四 )


回归分析
导入包,写出回归方程式
import statsmodels.formula.api as smfimport statsmodels.api as small_columns = "+".join(data.columns[:-1])print('x is :'+all_columns)formula = 'asset~' + all_columnsprint('The regression equation is :'+formula)
进行拟合:
results = smf.ols(formula, data=http://www.kingceram.com/post/data).fit()results.summary()
将四组自变量对因变量资产做多元线性回归,得到的结果如下:
上面的展示结果类似于,或者这样打印出来好看一些:
print(results.summary())
调整后的R-=0.32,说明资产变动的幅度有32%可以用此模型解释 。虽然拟合优度不算很高,但是整体回归模型的F值为4083.75,说明整体回归方程十分显著 。
对于每一个变量的显著性检验,从回归结果中,我们可以发现在0.05的显著性水平下,观察P值,四组解释变量它们的系数,都通过了显著性检验,说明他们的变动对于资产的变动影响是显著的 。并且t值都很大,说明是十分显著 。其中最为显著的是消费,说明消费越高的家庭资产也越高 。而人口与资产是反方向变动,家庭里面的人口如果越多,那么家庭的资产就越少 。
输出方差分析表
from statsmodels.stats.anova import anova_lmanova_lm(results,typ=1)
下面检验模型的多重共线性 。
定义计算方差膨胀因子的函数VIF:
#容忍度和方差扩大因子def vif(df_exog,exog_name):exog_use = list(df_exog.columns)exog_use.remove(exog_name)model=smf.ols(f"{exog_name}~{'+'.join(list(exog_use))}",data=http://www.kingceram.com/post/df_exog).fit()rsq=model.rsquaredreturn 1./(1.-rsq)
计算上述的回归得到的方差膨胀因子如下:
df_vif=pd.DataFrame()for x in data.columns[:-1]:vif_i=vif(data.iloc[:,:-1],x)#X们都放入df_vif.loc['VIF',x]=vif_idf_vif.loc['tolerance']=1/df_vif.loc['VIF']df_vif
一般认为方差膨胀因子大于10的变量就具有多重共线性,本文的四个变量的VIF值都是一点多,远小于10,说明模型不存在严重的多重共线性 。
残差分析
画出残差图和残差的QQ图:
x=results.fittedvalues ; y=results.residplt.subplots(1,2,figsize=(7,3),dpi=128)plt.subplot(121)plt.scatter(x,y)plt.xlabel('拟合值')plt.ylabel('残差')plt.title('(a)残差值与拟合值图',fontsize=12)plt.axhline(0,ls='--')ax2=plt.subplot(122)pplot=sm.ProbPlot(y,fit=True)pplot.qqplot(line='r',ax=ax2,xlabel='期望正态值',ylabel='标准化的观测值')ax2.set_title('(b)残差正态Q-Q图',fontsize=12)plt.tight_layout()plt.show()
可以看到残差不是很符合正态性的假定,所以模型里面考虑的因素不完全,在残差里面体现出来了 。这也是为什么拟合优度只有32% 。因此这个模型需要考虑更多的变量进去才行 。
四、研究结论及启示 (一)主要结论
本文首先通过分析我国家庭资产配置的特点以及和国外的不同,还有影响因素的可能性的分析 。再利用2019年的家庭金融调查数据,选取了收入消费资产负债人口等因素做出回归分析,分析我国家庭资产变动影响因素 。
实证结果显示,对于我国家庭资产来说,人口,消费,收入和负债都是影响家庭资产很重要的原因 。他们对于资产都是有显著性的影响 。其中影响因素最大的是消费,说明消费越多的家庭,他们的资产也越多 。消费收入和负债,对于资产的影响都是正向变动的,而人口对于资产的影响是负向变动,说明一个家庭里面人口越多,资产越少 。