研究背景与研究目标
在建立多元线性回归模型时,对于拟合的多元线性回归方程:
代入第i组自变量x1i,x2i,···,xni的观测值,可以得到预测值yi,但预测值yi往往不等于第i组自变量x1i,x2i,···,xni对应的实际值yi,因此多元线性回归模型必须包含一个误差项ε来描述模型的观测值,即:
从而得到能够描述因变量y如何依赖于自变量x1,x2,···,xn和误差项ε的多元线性回归模型:
在经典线性回归中,ε必须满足正态性、方差齐性和独立性假定。方差齐性指的是各处理的总体方差σ2相等,经典线性回归的方差齐性假定指的是总体回归函数中的误差项ε在解释变量条件下具有不变的方差σ2。若误差项方差不相等,即具有异方差性,会使得到的回归模型是低效并且不稳定的,在进行预测时就有可能会得到不准确的预测结果。因此方差齐性的检验和异方差性的解决也就成为建立多元线性回归模型的重要环节。
数据集介绍
本文选取1月8日至1月5日共计五年的贵州茅台(证券号:600519-SHE)股票的行情数据及后一天的开盘价格数据作为建立多元线性回归模型的数据集。[1]
```{r}#导入数据集she = read.csv("C:/Users/86157/Desktop/600519_SHE.csv", row.names = NULL)head(she, 5)```
将股票的历史数据通过csv文件导入到RStudio中,通过观察数据集的前五行,不难发现这一数据集主要由股票的证券代码,每笔交易的日期,每个交易日的开盘价、最高价、最低价、收盘价、成交数量和成交金额组成。由于股票市场价格包括开盘价、收盘价、最高价和最低价,为了减少因变量数量,本文选取贵州茅台股票的开盘价格作为因变量,而最高价、最低价、收盘价、成交数量和成交金额作为自变量,用于训练和测试回归模型。
建立多元线性回归模型
数据集划分
将导入RStudio中的数据集提取出第三列至第八列(开盘价、收盘价、最高价、最低价、成交数量和成交金额)。为了简化代码,将开盘价设为y,最高价设为x1,最低价设为x2,收盘价设为x3,成交量设为x4,成交金额设为x5。得到如下图所示的数据集:
#取出所需数据she = she[3:8]head(she, 5)#对列名进行重命名colnames(she) = c("y", "x1", "x2", "x3", "x4", "x5")head(she, 5)## yx1x2x3x4 x5## 1 1737.0 1801.00 1733.00 1801.00 4794285 8541587089## 2 1730.0 1738.70 1716.00 1725.01 2041575 3523582306## 3 1731.2 1738.43 1706.01 1730.01 2603380 4487760231## 4 1736.0 1752.99 1727.00 1727.00 2533312 4409544297## 5 1717.0 1726.99 1701.05 1719.00 2241780 3844499655
随后将得到的1214行数据按照8:2的比例划分为测试集和训练集,训练集用于拟合多元线性回归模型,而测试集用于评价多元线性回归模型的预测效果。
#划分训练集和测试集a = 0.8*1214train.she = she[1:a,]test.she = she[a:1214,]
建立回归模型并对模型进行估计与评价
在划分好训练集与测试集之后,调用lm函数,以训练集(train.she)为基础建立y(开盘价)与其他变量之间的多元线性回归方程lm1:
#初步建立多元线性回归模型,并对模型进行训练和评估lm1 = lm(y~., data = train.she)summary(lm1)## ## Call:## lm(formula = y ~ ., data = train.she)## ## Residuals:##Min1Q Median3QMax ## -62.314 -6.854 0.062 7.020 43.980 ## ## Coefficients:##Estimate Std. Error t value Pr(>|t|) ## (Intercept) -4.736e-01 3.765e+00 -0.126 0.900 ## x1 9.487e-01 3.572e-02 26.560 <2e-16 ***## x2 8.408e-01 3.353e-02 25.077 <2e-16 ***## x3-7.892e-01 2.678e-02 -29.475 <2e-16 ***## x4 2.801e-07 8.460e-07 0.331 0.741 ## x5-7.080e-10 6.235e-10 -1.136 0.256 ## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1## ## Residual standard error: 12.4 on 965 degrees of freedom## Multiple R-squared: 0.9992, Adjusted R-squared: 0.9992 ## F-statistic: 2.336e+05 on 5 and 965 DF, p-value: < 2.2e-16
由上图可知,训练后的多元线性回归模型调整的多重决定系数R2=0.9992=99.92%,它表示在用训练集中的样本量和自变量的个数进行调整后,在贵州茅台股票开盘价取值的总误差中,被收盘价、最高价、最低价、成交数量和成交金额这5个自变量解释的比例为99.92%,显示模型的在训练集中的拟合程度较高。
此外,输出结果还显示回归模型的估计标准误se=12.4,表示根据所建立的多元线性回归方程,用收盘价、最高价、最低价、成交数量和成交金额这5个自变量预测开盘价时,平均预测误差为12.4元。这一误差相对于开盘价较小,也可以说明模型的在训练集中的拟合程度较高。
最后,根据输出的各自变量的回归系数,可以得到估计的多元线性回归方程:
使用模型进行预测
训练好回归模型后,利用predict函数,将测试集中的自变量x1至x5输入到上文中的多元线性回归方程中,从而得到与测试集中每条数据一一对应的股票开盘价的预测值。在评估预测效果时,本文将误差率作为评价指标,其计算方式为:误差率 =(实际值 - 预测值)/ 实际值×100。完成误差率的计算后,将这一指标作为一列数据(diff)插入到测试集中,而后通过summary函数获取测试集各列的统计量信息:
#测试回归模型,分析模型的误差率test.she$pred = predict(lm1, test.she)test.she$diff = (abs(test.she$y-test.she$pred)/test.she$y)*100summary(test.she)## yx1 x2 x3 ## Min. :510.0 Min. :543.0 Min. :509.0 Min. :524.0 ## 1st Qu.:645.2 1st Qu.:657.8 1st Qu.:637.5 1st Qu.:644.9 ## Median :695.0 Median :702.0 Median :683.0 Median :694.0 ## Mean :683.3 Mean :692.5 Mean :673.7 Mean :683.1 ## 3rd Qu.:736.0 3rd Qu.:744.0 3rd Qu.:724.0 3rd Qu.:736.9 ## Max. :800.0 Max. :803.5 Max. :788.9 Max. :799.2 ## x4 x5 pred diff ## Min. : 1631660 Min. :9.500e+08 Min. :527.3 Min. :0.000148 ## 1st Qu.: 2958950 1st Qu.:2.063e+09 1st Qu.:648.0 1st Qu.:0.233008 ## Median : 3866658 Median :2.710e+09 Median :694.0 Median :0.471417 ## Mean : 4435813 Mean :3.027e+09 Mean :682.9 Mean :0.649133 ## 3rd Qu.: 5146287 3rd Qu.:3.730e+09 3rd Qu.:734.6 3rd Qu.:0.896128 ## Max. :20439667 Max. :1.066e+10 Max. :799.5 Max. :3.518667
从上图中可以看出,预测值与实际值的误差率最大为3.51,最小为0.000148,中位数为0.471417,平均值为0.649133,。由此可知,回归模型的预测平均误差率约为0.65,误差数值较实际值偏大,因此模型的预测效果并不理想。
诊断回归模型
由于多元线性回归方程的预测效果并不理想,因此需要通过残差图来诊断模型的方差齐性假定和正态性假定。本文利用plot函数绘制建立的多元线性回归模型的残差图,并且取回归诊断图中的标准化残差的正态Q-Q图和残差值与拟合值图作为检验回归模型的正态性和方差齐性的依据。
par(mfrow=c(1,2),mai=c(0.8,0.8,0.4,0.1),cex=0.8,cex.main=0.7)plot(lm1,which = 1:2)
从残差值与拟合值图中可以看出,回归模型的残差存在一定的规律,即随着拟合值的增大,残差值的绝对值逐渐增大,最佳拟合曲线也随着拟合值的增大逐渐向上偏离0轴水平线,这说明回归模型很有可能不满足方差齐性假定,存在方差异性,因此该模型需要进一步进行方差齐性检验。从标准化残差的正态Q-Q图中可以看出各个点基本沿直线随机分布,回归模型残差正态性良好,满足正态性假定。
对方差齐性进行假设检验
为进一步检验回归模型的方差齐性假定,本文将借助R的ncvTest函数进行方差齐性检验。首先提出假设:
H0:误差项ε满足方差齐性;
H1:误差项ε不满足方差齐性。
将多元线性回归模型lm1带入ncvTest函数中,可以得到如下图所示结果:
#方差齐性检验ncvTest(lm1)## Non-constant Variance Score Test ## Variance formula: ~ fitted.values ## Chisquare = 153.2137, Df = 1, p = < 2.22e-16
将显著性水平设置为0.05,由于P≤2.22×10-16<0.05,因此拒绝原假设H0,接受备择假设H1,即回归模型lm1存在异方差性。
异方差性对多元线性回归模型的影响
从上文可知,经典线性回归的误差项ε需要满足方差齐性假定。而ε之所以需要满足方差齐性假定,是因为在经典线性回归中,回归模型的参数估计是通过最小二乘法实现的。最小二乘法通过使因变量yi与估计值yi之间的离差平方和达到最小来估计回归系数β0,β1,β2,···,βn。如果因变量yi与估计值yi之间的离差平方数值会随着i的变化而变化,则就不能确定平方和的最小值,从而使最小二乘估计产生的回归系数不准确,破坏了模型的预测精度。因此为了提高模型预测效果,就必须减小或消除异方差性。
异方差性的解决方法
在实际应用多元线性回归时,回归模型的误差项ε满足方差齐性假定的概率远小于不满足方差齐性的概率。这主要是因为三方面原因。首先可能是模型中缺少某些自变量,从而使误差项产生系统模式,由于误差项包含了所有无法用解释变量表示的各种因素对因变量的影响,如果其中被略去的某一因素或某些因素随着解释变量观测值的不同而对被解释变量产生不同的影响,就会使误差项产生异方差性。其次可能源于测量误差,测量误差对异方差性的作用主要表现在两个方面:一方面,测量误差常常在一定时间内逐渐积累,误差趋于增加,如自变量越大,测量误差就会趋于增大;另一方面,测量误差可能随时间变化而变化,如抽样技术或收集资料方法的改进就会使测量误差减少。所以测量误差引起的异方差性多存在于时间序列中。此外还可能是由于政策变动、自然灾害、金融危机、战争和季节等随机因素带来的异常值影响。最后,异方差性的产生也可能来自模型的函数形式设置不正确,如将指数曲线模型误设成了线性模型,则误差有增大的趋势。
为了减轻或消除异方差性对线性回归模型的影响,常常需要采取措施对回归模型的异方差进行修正,修正的基本思想是在确认异方差形式的基础上,采取适当的估计方法,减小或消除异方差对模型的影响。本文主要介绍两种较易实现的修正异方差的方法:加权最小二乘法和对数变换法。
加权最小二乘法
在误差项的同方差假定下,最小二乘法将每个因变量yi与估计值yi的离差平方都同等看待,赋予相同的权重。当因变量yi与估计值yi的离差平方确实相等时,利用最小二乘法就能得到合适的回归系数。但是当离差平方不相等,即存在方差异性时,如果依然对每个因变量yi与估计值yi赋予相同的权重,就会导致最终的离差平方和不是最小值,此时就需要通过对不同的离差平方赋予不同的权重,从而使离差平方和最小。使用加权最小二乘法时,通常取权重wi为因变量yi与估计值yi的离差平方和σi2的倒数,即将原模型变换为:
re = resid(lm1)lm2 = lm(y~., weights = 1/re^2, data = train.she)summary(lm2)## ## Call:## lm(formula = y ~ ., data = train.she, weights = 1/re^2)## ## Weighted Residuals:##Min1Q Median3QMax ## -1.2208 -0.9990 0.4669 1.0011 1.2379 ## ## Coefficients:##Estimate Std. Error t value Pr(>|t|) ## (Intercept) -3.291e-01 7.304e-02 -4.506 7.4e-06 ***## x1 9.490e-01 4.073e-04 2330.223 < 2e-16 ***## x2 8.424e-01 2.239e-03 376.211 < 2e-16 ***## x3-7.913e-01 2.301e-03 -343.917 < 2e-16 ***## x4 2.408e-07 1.806e-08 13.334 < 2e-16 ***## x5-6.700e-10 1.733e-11 -38.652 < 2e-16 ***## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1## ## Residual standard error: 1 on 965 degrees of freedom## Multiple R-squared:1, Adjusted R-squared:1 ## F-statistic: 1.978e+09 on 5 and 965 DF, p-value: < 2.2e-16
例如,通过resid函数计算上文中建立的多元线性回归模型lm1的残差,之后调用lm函数,以训练集(train.she)为基础建立y(开盘价)与其他变量之间的权重为残差平方的倒数的多元线性回归方程lm2,对lm2进行方差齐性检验,可以得到如下结果:
#方差齐性检验ncvTest(lm2)## Non-constant Variance Score Test ## Variance formula: ~ fitted.values ## Chisquare = 0.006460433, Df = 1, p = 0.93594
可以看出,通过加权最小二乘法建立的多元线性回归模型方差齐性检测P值为0.93594,大于0.05,因此不拒绝原假设,即新的模型误差项满足方差齐性假定。
对数变换法
对多元线性回归模型进行对数变换,将因变量yi和自变量x1,x2,···,xn分别用lnyi和lnx1, lnx2,···,lnxn代替,即:
#减小方差差异,重新建立多元线性回归模型并进行训练和评估lny = log(train.she$y)lnx1 = log(train.she$x1)lnx2 = log(train.she$x2)lnx3 = log(train.she$x3)lnx4 = log(train.she$x4)lnx5 = log(train.she$x5)lm3 = lm(lny~lnx1+lnx2+lnx3+lnx4+lnx5)summary(lm3)## ## Call:## lm(formula = lny ~ lnx1 + lnx2 + lnx3 + lnx4 + lnx5)## ## Residuals:## Min 1QMedian 3Q Max ## -0.0299609 -0.0039956 -0.0001952 0.004 0.0214791 ## ## Coefficients:## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 0.04048 0.01485 2.725 0.00655 ** ## lnx1 1.49267 0.04812 31.021 < 2e-16 ***## lnx2 1.34776 0.04486 30.045 < 2e-16 ***## lnx3 -0.40453 0.03481 -11.621 < 2e-16 ***## lnx4 1.43422 0.09489 15.114 < 2e-16 ***## lnx5 -1.43668 0.09488 -15.142 < 2e-16 ***## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1## ## Residual standard error: 0.006718 on 965 degrees of freedom## Multiple R-squared: 0.9995, Adjusted R-squared: 0.9995 ## F-statistic: 4.26e+05 on 5 and 965 DF, p-value: < 2.2e-16
比如可以对原数据集train.she中的各个变量取对数,之后调用lm函数建立多元线性回归模型lm3,对lm3进行方差齐性检验,可以得到下图结果:
ncvTest(lm3)## Non-constant Variance Score Test ## Variance formula: ~ fitted.values ## Chisquare = 2.259547, Df = 1, p = 0.13279
由结果可知,通过加权最小二乘法建立的多元线性回归模型方差齐性检测P值为0.13279,大于0.05,因此不拒绝原假设,即新的模型误差项满足方差齐性假定。由此可见,运用对数变换可以有效降低异方差性对模型的影响。首先,运用对数变换能使测定变量值的尺度缩小。它可以将两个数值之间原来10倍的差异缩小到只有2倍的差异。其次,经过对数变换后的线性模型,其残差只表示相对误差,而相对误差往往对绝对误差有较小的差异。
然而对数变换虽然能降低异方差对模型的影响,但应注意取对数的变量是否含有小于等于0的取值,如果变量中的某些值小于等于0,则会导致模型出错。
最后,由于本人水平有限,文章中难免出现纰漏,还请各位读者不吝赐教!
[1] 数据来源:巨潮资讯网/new/index
如果觉得《异方差性对多元线性回归模型的影响及其解决——基于股票信息预测的多元线性回归模型》对你有帮助,请点赞、收藏,并留下你的观点哦!