多元线性回归预测:餐馆营业额与多因素实战

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

作者:herain  R语言中文社区专栏作者

知乎ID:https://www.zhihu.com/people/herain-14


前言

上篇

我们用一元线性回归预测销售收入与广告支出实战,但世界是复杂的,有因有果,因果迭交,我们常说事或物是多种因素共同作用的结果,今天我们从统计学角度,去分析多种因素是怎么样作用一种事物,产生不一样的结果。


综述

以餐馆营业额作为果(y= 日均营业额/万元),周边居民人数(x1 /万人),用餐平均支出(x2 / 元/人),周边居民月平均收入(x3/ 元),周边餐馆数(x4/ 个),距市中心距离(x5/ km)作为因素,来探索因与果之间的回归模型,发现规律,改善餐馆营销方式,提高餐馆的营业额。


分析步骤

餐馆营业额与多因素的回归模型分析步骤:

1.确定所关注的因变量y 和影响因变量的k个自变量

2.假定因变量y 与 k 个自变量之间为线性关系,并建立线性关系模型

3.对模型进行估计和检验

4.判别模型中是否存在多重共线性,如果存在,进行处理

5.利用回归方程进行预测

6.对回归模型进行诊断


1 确定因变量y和影响因变量的k个自变量

1.1 确定因变量和自变量

y:餐馆营业额作为果(y= 日均营业额/万元)

k个自变量为:

周边居民人数(x1 /万人)

用餐平均支出(x2 / 元/人)

周边居民月平均收入(x3/ 元)

周边餐馆数(x4/ 个)

距市中心距离(x5/ km)


1.2 分析的数据:

   index    y    x1    x2    x3 x4   x51      1 53.2 163.0 168.6  6004  5  6.52      2 18.5  14.5  22.5   209 11 16.03      3 11.3  88.2 109.4  1919 10 18.24      4 84.7 151.6 277.0  7287  7 10.05      5  7.3  79.1  17.4  5311 15 17.56      6 17.9  60.4  93.0  6109  8  3.67      7  2.5  53.2  21.5  4057 17 18.58      8 27.3 108.5 114.5  4161  3  4.09      9  5.9  48.7  61.3  2166 10 11.610    10 23.9 142.8 129.8 11125  9 14.211    11 69.4 214.7 159.4 13937  2  2.512    12 20.6  65.6  91.0  4000 18 12.013    13  1.9  13.2   6.1  2841 14 12.814    14  3.0  60.9  60.3  1273 26  7.815    15  7.3  21.2  51.1  2404 34  2.716    16 46.2 114.3  73.6  6109 12  3.217    17 78.8 299.5 171.7 15571  4  7.618    18 11.1  78.9  38.8  4228 11 11.019    19  8.6  90.0 105.3  3772 15 28.420    20 48.9 160.3 161.5  6451  5  6.221    21 22.1  84.0 122.6  3275  9 10.822    22 11.1  78.9  38.8  4228 10 33.723    23  8.6  90.0 105.3  3772 14 16.524    24 48.9 160.3 161.5  6451  6  9.325    25 22.1  84.0 122.6  3275 10 11.6


2 建立线性关系模型

公式:

2.1 绘制多个变量的相关图:

> library(corrgram)> corrgram(example10_1[2:7], order=T, lower.panel=panel.shade,upper.panel=panel.pie,text=panel.txt)


解读相关系数矩阵图,请参考搜索,获取了解。蓝色表示正相关,红色表示负相关,对应颜色的饼图表示相关的度。


2.2 建立回归模型(检测报告,模型进行估计和检验用到了如下检测结果):

检测报告:

#回归模型拟合> fit1 <- lm(y~x1+x2+x3+x4+x5, data=example10_1)> summary(fit1)Call:lm(formula = y ~ x1 + x2 + x3 + x4 + x5, data = example10_1)Residuals:     Min       1Q   Median       3Q      Max -16.7204  -6.0600   0.7152   3.2144  21.4805 Coefficients:              Estimate Std. Error t value Pr(>|t|)   (Intercept)  4.2604768 10.4679833   0.407  0.68856   x1           0.1273254  0.0959790   1.327  0.20037   x2           0.1605660  0.0556834   2.884  0.00952 **x3           0.0007636  0.0013556   0.563  0.57982   x4          -0.3331990  0.3986248  -0.836  0.41362   x5          -0.5746462  0.3087506  -1.861  0.07826 . ---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 10.65 on 19 degrees of freedomMultiple R-squared:  0.8518,    Adjusted R-squared:  0.8128 F-statistic: 21.84 on 5 and 19 DF,  p-value: 2.835e-07#计算回归系数的置信区间> confint(fit1, level=0.95)                    2.5 %       97.5 %(Intercept) -17.649264072 26.170217667x1           -0.073561002  0.328211809x2            0.044019355  0.277112598x3           -0.002073719  0.003600932x4           -1.167530271  0.501132297x5           -1.220868586  0.071576251#输出方差分析表> anova(fit1)Analysis of Variance TableResponse: y          Df  Sum Sq Mean Sq F value    Pr(>F)    x1         1 10508.9 10508.9 92.7389 9.625e-09 ***x2         1  1347.1  1347.1 11.8878  0.002696 ** x3         1    85.4    85.4  0.7539  0.396074    x4         1    40.5    40.5  0.3573  0.557082    x5         1   392.5   392.5  3.4641  0.078262 .  Residuals 19  2153.0   113.3                      ---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


从检验结果可以看出 x1,x2,x5 对 y 的总误差平方和贡献显著。


2.3 回归模型方程式:

计算:y = 4.2604768 + 0.1273254*x1 + 0.1605660*x2 + 0.0007636x3 -0.3331990 x4 -0.5746462 * x5


3 对模型进行估计和检验

3.1 拟合优度检验

多重决定系数是多元线性回归中回归平方和SSR 占 总平方和SST的比例,计算公式为:

它表示因变量y的总误差中被多少个自变量共同解释的比例。

为避免增加自变量而高估多重决定系数,统计学家使用样本量n和自变量的个数k 去调整 多重决定系数:

计算知:多重决定系数为:0.8518,说明日均营业额时与周边居民人数,用餐平均支出,周边居民月平均收入,周边餐馆数和距离市中心这5个自变量模型的拟合度较高。

Multiple R-squared: 0.8518, Adjusted R-squared: 0.8128


3.2 估计标准误:

标准误 就是指 残差的标准差,计算公式:

计算知:估计的标准误差为:10.65,根据建立的多元线性回归方程,周边居民人数,用餐平均支出,周边居民月平均收入,周边餐馆数和距离市中心这5个自变量预测日均营业额时,平均的预测误差为10.65万元

Residual standard error: 10.65 on 19 degrees of freedom


3.3 模型的显著性检验

包含如下检验:线性关系检验,回归系数检验。请参考 (2.2处:检测报告)诠释如下两种假设,此次省略具体说明。


3.4 模型诊断

绘制残差图诊断模型

> par(mfrow=c(1,2), mai=c(0.8,0.8,0.4,0.1),cex=0.8,cex.main=0.7)> plot(fit1,which=1)> plot(fit1,which=2)


在图中发现点2,4,16具有较大残差,残差的正态性存在问题(可以考虑重建模型,或者剔除较大残差值),如下我们剔除点 2,4 重新建立回归模型:

#再次绘制残差图> par(mfrow=c(1,2), mai=c(0.8,0.8,0.4,0.1),cex=0.8,cex.main=0.7)> plot(newfit1,which=1)> plot(newfit1,which=2)


4 判别模型中是否存在多重共线性

4.1 判别的重要性

变量之间的高度相关性,造成回归结果的混乱。多重共性性可能对参数估计值的正负号产生影响。


4.2 识别共线性和处理

#1,自变量之间的相关系数及其检验> library(psych)> corr.test(example10_1[3:7], use="complete")Call:corr.test(x = example10_1[3:7], use = "complete")Correlation matrix   x1x2x3x4x5x1  1.00  0.74  0.88 -0.62 -0.28x2  0.74  1.00  0.55 -0.54 -0.32x3  0.88  0.55  1.00 -0.52 -0.29x4 -0.62 -0.54 -0.52  1.00  0.10x5 -0.28 -0.32 -0.29  0.10  1.00Sample Size [1] 25Probability values (Entries above the diagonal are adjusted for multiple tests.)  x1   x2   x3   x4   x5x1 0.00 0.00 0.00 0.01 0.47x2 0.00 0.00 0.03 0.03 0.46x3 0.00 0.00 0.00 0.04 0.47x4 0.00 0.01 0.01 0.00 0.65x5 0.18 0.12 0.16 0.65 0.00 To see confidence intervals of the correlations, print with the short=FALSE option#2,考察回归系数的显著性#3,分析回归系数的正负号#4,用容忍度和方差膨胀因子(VIF),VIF 大于10 存在严重的共线性:> library(car)载入需要的程辑包:carData载入程辑包:‘car’The following object is masked from ‘package:psych’:logit> library(carData)> vif(fit1)  x1   x2   x3   x4   x5 8.233159 2.629940 5.184365 1.702361 1.174053 > 1/vif(fit1)   x1x2x3x4x5 0.1214601 0.3802368 0.1928877 0.5874195 0.8517500 > 

如上分析数据可知,不存在严重的共线性问题


4.3 变量的选择与逐步回归

建立模型之前就有选择的确定进入模型的自变量,也可以避免多重共线性问题,变量的选择方法主要有 向前选择,向后剔除,逐步回归 等。

逐步回归以 赤池信息准则AIC为选择标准,选择AIC最小的变量建立模型,计算公式为:

式中,n为样本量;p为模型中参数的个数(包括常数项)

#对模型fit1进行逐步回归> fit2 <-step(fit1)Start:  AIC=123.39y ~ x1 + x2 + x3 + x4 + x5       Df Sum of Sq    RSS    AIC- x3    1     35.96 2189.0 121.81- x4    1     79.17 2232.2 122.30              2153.0 123.39- x1    1    199.42 2352.4 123.61- x5    1    392.54 2545.6 125.58- x2    1    942.22 3095.2 130.47Step:  AIC=121.81y ~ x1 + x2 + x4 + x5       Df Sum of Sq    RSS    AIC- x4    1     78.22 2267.2 120.69              2189.0 121.81- x5    1    445.69 2634.7 124.44- x2    1    925.88 3114.9 128.63- x1    1   1133.27 3322.3 130.24Step:  AIC=120.69y ~ x1 + x2 + x5       Df Sum of Sq    RSS    AIC              2267.2 120.69- x5    1    404.28 2671.5 122.79- x2    1   1050.90 3318.1 128.21- x1    1   1661.83 3929.0 132.43> > fit2 <- lm(y~x1+x2+x5, data=example10_1)> summary(fit2)Call:lm(formula = y ~ x1 + x2 + x5, data = example10_1)Residuals:    Min      1Q  Median      3Q     Max -14.027  -5.361  -1.560   2.304  23.001 Coefficients:            Estimate Std. Error t value Pr(>|t|)    (Intercept) -1.68928    6.25242  -0.270  0.78966    x1           0.19022    0.04848   3.923  0.00078 ***x2           0.15763    0.05052   3.120  0.00518 ** x5          -0.56979    0.29445  -1.935  0.06656 .  ---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 10.39 on 21 degrees of freedomMultiple R-squared:  0.8439,    Adjusted R-squared:  0.8216 F-statistic: 37.85 on 3 and 21 DF,  p-value: 1.187e-08#逐步回归的方差分析> anova(fit2)Analysis of Variance TableResponse: y          Df  Sum Sq Mean Sq F value    Pr(>F)    x1         1 10508.9 10508.9 97.3392 2.452e-09 ***x2         1  1347.1  1347.1 12.4775  0.001976 ** x5         1   404.3   404.3  3.7447  0.066558 .  Residuals 21  2267.2   108.0                      ---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


根据R的逐步回归结果,得到最终的估计方程:

y = -1.68928 + 0.19022 * x1 + 0.15763 * x2 - 0.56979 * x3

> par(mfcol=c(1,2),cex=0.7)> plot(fit2, which=1)> plot(fit2,which=2)



4.4 多模型的比较

完全模型,简化模型

#模型方差对比> anova(fit1, fit2)Analysis of Variance TableModel 1: y ~ x1 + x2 + x3 + x4 + x5Model 2: y ~ x1 + x2 + x5  Res.Df    RSS Df Sum of Sq      F Pr(>F)1     19 2153.0                           2     21 2267.2 -2   -114.17 0.5038 0.6121#机器的交叉验证#五折交叉验证#AIC对比> AIC(fit1, fit2)     df      AICfit1  7 196.3408fit2  5 193.6325


对比数据,得知 fit2 模型的拟合的更好。


5 利用回归方程进行预测

基于多点的点估计,求出区间估计(均值的区间估计,个别值的预测区间)


#计算置信区间和预测区间> x<- example10_1[,c(3,4,7)]> pre<-predict(fit2)> res<-residuals(fit2)> zre<-rstandard(fit2)> con_int<-predict(fit2,x,interval="confidence",level=0.95)> pre_int<-predict(fit2,x,interval="prediction",level=0.95)> mysummary<-data.frame(日均营业额=example10_1$y, 点预测值=pre,残差=res,标准化残差=zre, 置信下限=con_int[,2], 置信上限=con_int[,3], 预测下限=pre_int[,2], 预测上限=pre_int[,3])> round(mysummary,3)   日均营业额 点预测值残差 标准化残差 置信下限 置信上限 预测下限 预测上限153.2   52.189   1.011  0.102   45.457   58.921   29.557   74.822218.5   -4.501  23.001  2.359  -11.9692.967  -27.363   18.361311.3   21.963 -10.663 -1.072   15.685   28.240   -0.539   44.464484.7   65.114  19.586  2.766   49.300   80.928   38.337   91.8915 7.36.128   1.172  0.122   -2.283   14.540  -17.059   29.316617.9   22.408  -4.508 -0.466   14.581   30.235   -0.574   45.3907 2.51.278   1.222  0.125   -6.1138.670  -21.559   24.116827.3   34.719  -7.419 -0.747   28.400   41.038   12.206   57.2329 5.9   10.628  -4.728 -0.4724.904   16.351  -11.726   32.98110   23.9   37.843 -13.943 -1.390   32.193   43.493   15.509   60.17811   69.4   62.852   6.548  0.709   52.939   72.766   39.079   86.62612   20.6   18.296   2.304  0.229   13.036   23.556   -3.943   40.535131.9   -5.510   7.410  0.771  -13.6942.674  -28.616   17.596143.0   14.956 -11.956 -1.2028.687   21.224   -7.543   37.455157.38.860  -1.560 -0.169   -1.050   18.770  -14.913   32.63216   46.2   29.831  16.369  1.699   21.745   37.9176.759   52.90317   78.8   78.016   0.784  0.112   62.105   93.927   51.182  104.85018   11.1   13.167  -2.067 -0.2096.420   19.915   -9.470   35.805198.6   15.847  -7.247 -0.8154.670   27.024   -8.481   40.17520   48.9   50.727  -1.827 -0.184   44.205   57.250   28.156   73.29921   22.1   27.461  -5.361 -0.536   21.671   33.2515.090   49.83122   11.10.233  10.867  1.354  -13.486   13.953  -25.362   25.829238.6   22.627 -14.027 -1.395   17.181   28.0730.344   44.91124   48.9   48.961  -0.061 -0.006   42.722   55.200   26.470   71.45225   22.1   27.005  -4.905 -0.490   21.220   32.7904.636   49.374
#求 x1=50, x2=100, x5=10 时的日均营业额的点预测值,置信区间和预测区间(新值预测)> x0<-data.frame(x1=50,x2=100,x5=10)> predict(fit2, x0)   1 17.88685 > predict(fit2,x0, interval="confidence", level=0.95)   fit  lwr  upr1 17.88685 10.98784 24.78585> predict(fit2,x0, interval="prediction", level=0.95)   fit   lwr  upr1 17.88685 -4.795935 40.56963>


6 哑变量回归

代码化的类别变量成为哑变量或者虚拟变量,在回归模型中使用哑变量时称为哑变量回归或者虚拟变量回归。


写在最后:

至此,多元线性回归预测也完成了,欢迎大家指正,请各位多多转发,给我好看。





公众号后台回复关键字即可学习

回复 爬虫             爬虫三大案例实战  
回复 Python        1小时破冰入门

回复 数据挖掘      R语言入门及数据挖掘
回复 人工智能      三个月入门人工智能
回复 数据分析师   数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法

爱我请给我好看!

你可能感兴趣的:(多元线性回归预测:餐馆营业额与多因素实战)