在实际生活中,某种现象的发生或某种结果的得出往往与其他某个或某些因素有关,但这种关系又不是确定的,只是从数据上可以看出有“有关”的趋势。回归分析就是用来研究具有这种特征的变量之间的相关关系的。本节介绍最简单的一元一次回归。[大谦Excel,dqexcel点com]
简单线性回归
为研究某一化学反应过程中,温度x对产品得率y的影响,测得数据如图4-35工作表A-B列所示。试对该数据进行一元一次线性回归分析。
图4-35 简单线性回归
D2单元格中在Python模式下在公式栏中输入下面的代码:
from statsmodels.formula.api import ols
data=xl("A1:B11",headers=True)
model=ols('y~x',data).fit()
model.params
单击Ctrl+Enter键,返回一个Series对象。展开该对象的内容如图4-35工作表中单元格区域E2:F2所示。单元格F2和F3中显示的是一元一次方程y=a*x+b中的待定系数b和a的值,其中,a是一次项的系数,b是截距。即根据给定数据得到的一元一次方程模型为:y=0.4830*x-2.7394。
代码中model是用ols函数建模并拟合后得到的模型,model.params返回模型的待定系数。
D5单元格中在Python模式下在公式栏中输入下面的代码:
model.conf_int()
单击Ctrl+Enter键,返回一个DataFrame对象,以Excel值的方式显示,如图4-35所示。单元格区域E5:F6中显示的是待定系数95%置信区间的下界和上界。
线性方程及其系数的显著性检验
通过回归分析得到线性方程模型后,事情还远没结束。为了确保模型有意义,首先需要对模型进行显著性检验,检验的方法有F检验和t检验。F检验检验整个模型是否有意义,零假设为无意义;t检验对模型的每个待定系数进行检验,检验该待定系数是否等于0,零假设为等于0。
D8单元格中在Python模式下在公式栏中输入下面的代码,查看F检验的结果。
[model.fvalue,model.f_pvalue]
单击Ctrl+Enter键,返回一个列表对象,以字符串的方式显示列表内容,如图4-35所示。列表中第1个元素表示F统计量,第2个元素表示显著性概率,即p值。p值等于5.35e-11,小于0.05,所以可以在0.05水平上拒绝零假设,认为模型有意义。
D9单元格中在Python模式下在公式栏中输入下面的代码,查看t检验的结果。
model.pvalues
单击Ctrl+Enter键,返回一个Series对象,展开该对象的内容,如图4-35所示。Series对象的值为待定系数对应的t检验的p值。x对应的系数的p值为5.3525e-11,小于0.05,所以可以在0.05水平上拒绝零假设,认为x的系数不为0,模型有意义。
残差分析
残差指的是每个数据点处计算值和实测值之间的偏差。回归分析完成以后,需要对残差进行检验。残差应满足正态分布、方差齐性、独立性等要求。
D12单元格中在Python模式下在公式栏中输入下面的代码:
res=model.resid
单击Ctrl+Enter键,返回一个Series对象res。展开该对象的内容如图4-35工作表中单元格区域E12:E21所示。可以直接使用4.2.3和4.2.4小节介绍的方法对残差进行正态分布检验和方差齐性检验。
也可以通过绘残差图进行探查。残差图的横坐标为根据回归模型得到的y的预测值,纵坐标为残差。F12单元格中在Python模式下在公式栏中输入下面的代码,获取y的预测值:
y2=model.fittedvalues
单击Ctrl+Enter键,返回一个Series对象res。展开该对象的内容如图4-35工作表中单元格区域G12:G21所示。
然后绘制残差图。H12单元格中在Python模式下在公式栏中输入下面的代码:
plt.scatter(y2,res)
plt.ylim(-2,2)
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.xlabel('y2',fontsize=16)
plt.ylabel('Residuals',fontsize=16)
单击Ctrl+Enter键,返回一个Image对象。显示该对象的图像,合并单元格区域I12:K19,显示残差图如图4-35所示。当残差图中的散点均匀地落在绘图区,不呈现任何模式时,认为残差满足上面几个要求。注意,各散点落在y轴取值-2到2的范围内。
拟合优度评价
用相关系数的平方,即决定系数评价回归模型的拟合好坏程度。该指标反映因变量的全部变异能通过回归关系被自变量解释的比例。指标的值界于0和1之间,值越接近于1,说明模型拟合得越好。值为1时,说明自变量和因变量之间是函数关系;值为0时,说明自变量和因变量之间没有关系。
I12单元格中在Python模式下在公式栏中输入下面的代码:
model.rsquared
单击Ctrl+Enter键,返回决定系数0.9963。该值接近于1,说明回归模型拟合得很好。