转 R 线性回归的最小二乘法(OLS回归)

全称:线性回归的最小二乘法(OLS回归),ordinary least square,字面翻译:普通最小平方;
内容:包括三个部分:简单线性回归、多项式回归、多元线性回归;
原理:最小二乘法,即使回归函数与实际值之差的平方和最小,来找出线性表达式的各个参数;
前提假设:

    1)线性:y = α+βx+u,其中:α为常量,βx泛指确定性自变量及对应系数的方程式,u为随机误差;

            这也是为什么简单回归分析前,要先做相关性检验。
            违反该假设的情况,通常有(a)错误回归元;(b)非线性;(c)参数改变。
     2)正态性:对于固定的x,y呈正态分布
            基本等价于,随机误差u呈正态分布,干扰项期望值为零
            违背则称为截距偏误问题;
     3)独立性:自变量之间相互独立,不存在完全共线性、多重共线性问题;

     4)误差u假设:
            A、误差u1、u2等之间相互独立,即COV(u1*u2)=0,且随机误差u1、u2等具有相同的方差,即有同方性
                    违背这一假定会出现两大计量经济学问题,即异方差和自相关误差。

            B、误差项u与独立变量x之间相互独立, 并且误差项的分散(方差 Variance)必须等同;
优势:
    1、计算成本低;
    2、最小二乘,即OLS准则(残差平方和最小)下,最优处理办法;
    3、由于原因2,所以得到最大R2;

    4、最优无偏性,具有最小的方差,在无限大的样本中也是如此。

R实现:

函数lm(),使用方法为:fit<-lm(y~x1+x2……+xn,data),表达式说明如下:

符号 用途
~ 分隔符号,左边为响应变量,右边为解释变量。例如,要通过x、z和w预测y,代码为y ~ x + z + w
+ 分隔预测变量
: 表示预测变量的交互项。例如,要通过x、z及x与z的交互项预测y,代码为y ~ x + z + x:z
* 表示所有可能交互项的简洁方式。代码y~ x * z * w可展开为y ~ x + z + w + x:z + x:w + z:w + x:z:w
^ 表示交互项达到某个次数。代码y ~ (x + z + w)^2可展开为y ~ x + z + w + x:z + x:w + z:w
. 表示包含除因变量外的所有变量。例如,若一个数据框包含变量x、y、z和w,代码y ~ .可展开为y ~ x + z + w
- 减号,表示从等式中移除某个变量。例如,y ~ (x + z + w)^2 – x:w可展开为y ~ x + z + w + x:z + z:w
-1 删除截距项。例如,表达式y ~ x -1拟合y在x上的回归,并强制直线通过原点
I() 从算术的角度来解释括号中的元素。例如,y ~ x + (z + w)^2将展开为y ~ x + z + w + z:w。相反, 代码y~ x + I((z + w)^2)将展开为y ~ x + h, h是一个由z和w的平方和创建的新变量
function 可以在表达式中用的数学函数。例如,log(y) ~ x + z + w表示通过x、z和w来预测log(y)

拟合模型处理函数如下

函 数 用 途
summary() 展示拟合模型的详细结果
coefficients() 列出拟合模型的模型参数(截距项和斜率)
confint() 提供模型参数的置信区间(默认95%)
fitted() 列出拟合模型的预测值
residuals() 列出拟合模型的残差值
anova() 生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表
vcov() 列出模型参数的协方差矩阵
AIC() 输出赤池信息统计量
plot() 生成评价拟合模型的诊断图
predict() 用拟合模型对新的数据集预测响应变量值
a<-lm(women$height~women$weight+I(women$weight^2))
summary(a)  #返回结果如下:
Call:   #拟合公式
lm(formula = Murder ~ Population + Illiteracy + Income + Frost, data = states)
Residuals:  #残差,就是实际值与理论模拟值的误差
Min      1Q  Median      3Q     Max 
-4.7960 -1.6495 -0.0811  1.4815  7.6210 

Coefficients:   #回归系数及相关
             Estimate Std. Error t value Pr(>|t|) #pr(>|t|)  #p值,越小越拒绝原假设,结果越显著
          #系数估计值     标准误    t统计量     P值
(Intercept) 1.235e+00  3.866e+00   0.319   0.7510    #常量,也叫截距
Population  2.237e-04  9.052e-05   2.471   0.0173 *  
Illiteracy  4.143e+00  8.744e-01   4.738 2.19e-05 ***
Income      6.442e-05  6.837e-04   0.094   0.9253    
Frost       5.813e-04  1.005e-02   0.058   0.9541    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#上面一行标明在上面的回归系数后面跟着的***的含义,0-0.001之间为'***',0.001-0.001之间为'**'……,直观表示P值的范围
Residual standard error: 2.535 on 45 degrees of freedom #残差标准误
Multiple R-squared:  0.567, Adjusted R-squared:  0.5285 #决定系数R平方及修正R平方,R2表示模型拟合优度,越大越好
F-statistic: 14.73 on 4 and 45 DF,  p-value: 9.133e-08 #F统计量为回归系数方差分析法里面的F统计量,越大越好,对应的P值越小越好
fitted(a)  #返回 通过模型拟合出的理论值
    1        2        3        4        5        6        7        8        9       10       11       12       13       14       15 
58.10534 58.85841 59.95841 61.02290 62.05187 63.04531 64.00324 64.92565 66.10027 66.93980 68.00392 69.00490 69.94273 71.02622 72.01104 

模型可视化:

plot(women$weight,women$height)
lines(women$weight,fitted(a),type="l")

以下内容,为待学习内容:

改进方法 
  主要是改进模型的方法三个类型:删除,分为删除观测点(主要是离群点)和删除变量(主要是多重共线性变量),直接删除后再进行回归模型拟即可;变量变换,分为响应变量变换(y)和预测变量变换(x),当回归模型违反正态假设时,可以进行响应变量变换来改善其正态性,使用car包中的powerTranform(变量值)函数来进行Box-Cox正态变换来进行,是否需要可以看结果中的p值(<0.05则为需要进行变换),当回归模型违反线性假设时,可以使用boxTidwell(回归模型中的参数内容,即去掉lm()之后的内容)函数来进行识别,同样,需要看其中的p值。响应变量(y)的变换同样也可以改善方差齐性,此点之前的同方差性有说明,可以返回查看。尝试使用其它方法,当数据不满足OLS假设前提时,不需要使用其它更加合理的方法进行回归,如出现多重共线性时可以使用岭回归,存在离群点/强影响点时使用稳健回归,存在非正态性时,使用非参数回归,存在非线性时尝试非线性回归,如果违反误差独立性假设,还能使用那些专门研究误差结构的模型,比如时间序列或多层次回归模型,最后,还可以使用广泛应用的广义线性模型,它能适用许多OLS回归假设不成立的情况。 
   
最佳回归模型 
  最佳只是相对的,回归模型的选择主要通过模型比较以及变量选择来进行。 
  模型比较,R语言实战给出两种方法,一个是利用方差anova进行嵌套比较,另一个是使用AIC(赤池信息准则)来进行比较。anova嵌套比较是把变量少的模型嵌套在变量多的模型中,利用p值检验其它变量(即不在变量少的模型但在变量多的模型中的变量)是否需要添加,简单打个比方,模型1为y~1+2+3,模型2为y~1+2+3+4,则为模型1嵌套在模型2中(注:anova(模型2,模型1)),检测的是4是否需要添加到模型中,p值显著则表明需要添加;AIC方式,它不需要要求嵌套,可心直接使用AIC(fit)来进行计分,所得结果越小越好(AIC=2k-2ln(L),k为模型的因变量数量,ln(L)为对数似然函数,即为因变量越少越,似然函数越大,AIC值越小)。 
  变量选择,分为逐步回归和全子集回归,逐步回归有向前,向后,及向前向后,具体可看回归分析,R中使用的是MASS包上的stepAIC函数,参数direction可以决定使用“forward、backward、both”三种方法,以AIC值决定选用哪种;全子集回归使用leaps包中的regsubsets()函数,通过R平方,修正R平方以及Mallow Cp统计量,得到的结果可以使用leaps的plot函数(此处注意,是leaps的plot函数,可以使用leaps::plot来指定,避免后续出错)进行绘图,scale参数可以指定以什么统计量(R平方,修正R平方等)作为纵坐标。也可心使用car包中的subsets()函数进行绘制。leaps::plot画出来的是一幅灰度方格图,从底部向上看,左侧为统计量值,例如书上是以修正R平方为纵坐标的,横坐标是所有变量(含截距),图中的同一行的方格表示它正在使用对应的变量。同一行的两个方格表示它正在使用方格对应变量组成的回归函数的修正R平方值为多少,对修正R平方来说,越高越好。subsets画出来的函数需要添加一条截距和斜率均为1的直线,而图中标记越接近这条直线越好。 
   
深层次分析 
  最后,书中对OLS模型给出了交叉验证以及变量相对重要性来进一步评价模型的合理性及变量的相对重要性。 
  交叉验证,给出代码清单,利用bootstrap包中的crossval()函数来进行交叉验证,即使用样本中部分数据做回归估计,然后用另一部分数据去预测,验证其回归方程的好坏,对比前后R平方减少情况,减少得越少越好。 
  变量相对重要性,书中给出两种方法,但是,这两种方法得到的结果只有影响最大的一样,其它不一样,这让我觉得有点纠结,从网上找到的资料来看,利用标准化回归系数来衡量为最基础,最简单的方法,而且这个方法不受其它因素的影响,可以直接使用,别一种方法是相对权重,但是得出的结果却和标准回归系数法有较大出入,个人倾向前一种方法。 

  R语言的简单回归章节至此结束,这个回归学了很久,中间也有一些事情打断了学习,但是,在学习的过程中,又重温了一次统计学的简单回归,发现,很多东西你不用就会忘记,而且也有很多未了解的知识,有很多知识了解了也不知道是怎么一回事,期望后续的进一步学习能补全缺失的知识点。

原文:

http://www.ppvke.com/Blog/archives/30010

https://blog.csdn.net/gdyflxw/article/details/53870535?locationNum=4&fps=1

猜你喜欢

转载自blog.csdn.net/scpcmoon/article/details/80629895