R语言 最小二乘法OLS的运用

回归有多种形式。下面主要介绍普通最小二乘(OLS)回归法,包括简单线性回归、多项式回归、多元线性回归以及交互性回归。

最小二乘法OLS的主要运算符

条件:减小因变量的真实值与预测值的差值来获取模型参数,即残差平方和最小。

为了能够恰当地解释OLS模型的系数,数据必须满足以下统计假设
(1)正态性。对于固定的自变量值,因变量值成正态分布
(2)独立性。Yi值之间相互独立。
(3)线性。因变量与自变量之间为线性相关。
(4)同方差性。因变量的方差不随自变量的水平不同而变化。

在R中,拟合回归模型最基本的函数是lm(),格式为:

lm(formula, data)

formula中的符号注释:

符号 意义
~ 分割符 左边为因变量,右边为自变量,例如, z~x+y,表示通过x和y来预测z
+ 表示分割预测变量
: 表示预测变量的交互项,例如,z~x+y+x:y
* 表示所有可能的交互项,例如,z~x*y 展开为 z~x+y+x:y;代码y~ x * z * w可展开为y ~ x + z + w + x:z + x:w + z:w +x:z:w
^ 表示交互项的次数,例如,z ~ (x+y)^2,展开为z~x+y+x:y;代码y ~ (x + z + w)^2可展开为y ~ x + z + w + x:z + x:w + z:w
. 表示包含除因变量之外的所有变量,例如,如果只有三个变量x,y和z,那么代码 z~.,展开为z~x+y+x:y
- 表示从等式中移除某个变量。例如,y ~ (x + z + w)^2 – x:w可展开为y ~ x + z + w +x:z + z:w
-1 删除截距项,强制回归的直线通过原点
I() 从算术的角度来解释括号中的表达式,例如,z~y+I(x^2) 表示的拟合公式是 z=a+by+cx2, 例如,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(z) ~x+y

其他命令如下【对于拟合后的模型(lm函数返回的对象),可以应用下面的函数,得到模型的更多额外的信息】:

函数 用途
summary() 展示拟合模型的详细结果
coefficients() 列出拟合模型的模型参数(截距项和斜率)
confint() 提供模型参数的置信区间(默认95%)
fitted() 列出拟合模型的预测值
residuals() 列出拟合模型的残差值
anova() 生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表
vcov() 列出模型参数的协方差矩阵
AIC() 输出赤池信息统计量
plot() 生成评价拟合模型的诊断图
predict() 用拟合模型对新的数据集预测响应变量值

1. 简单线性回归

举个栗子:

fit <- lm(weight~height,data=women)
summary(fit)
结果分析
  • 残差标准差(Residual standard error):表示模型用身高来预测体重的平均误差

  • R的平方项(Multiple R-squared):表明模型可以解释体重99.1%的方差,是实际和预测值之间相关系数的平方。

  • F统计量(F-statistic):检验所有的预测变量预测响应变量是否都在某个概率水平之上

从Coefficients 组中,可以看到 Intercept(截距项)和 自变量(height)的系数,以及截距项和系数的标准差、t值和Pr(>|t|),其中,Pr(>|t|) 表示双边检验的p值

注,p值的表示方法通常有p-value,或Pr,p值是概率,表示某一事件发生的可能性大小。如果P值很小,说明原假设情况的发生的概率很小,而如果出现了,根据小概率原理,我们就有理由拒绝原假设,P值越小,我们拒绝原假设的理由越充分。总之,P值越小,表明结果越显著。

2.多项式回归

使用lm(),在formula参数中使用I()函数来进行多项式拟合

fit2 <- lm(weight~I(height^2),data=women)   ##多项式回归仍是线性回归

具体的不介绍

3.多元线性回归

当自变量不止一个时,简单线性回归就变为多元线性回归。

多元回归分析中,第一步最好检查下变量间的相关性cor(),cor.test(),corr.test()

data=data.frame(Y,Z,W)
cor(data)
  • cor(x,use=,method=),use是指定缺失值的处理方式,系统默认是use="everthing"和method=“pearson”。一般也需要计算方差和协差阵,用cov()函数即可
  • cor.test函数只能每次检验一种相关关系。
  • psych包corr.tesr()函数可以做总体(多个特征)的相关检验。corr.test(data,use=“complete”) use取值有两种“pairwise”,"complete"是处理缺失值的,代码如图所示,可以清晰相关系数对应的概率。

一些操作代码:

mydata <- read.csv("intro_auto.csv")
# 读入数据,也可以用R中的mtcars

names(mydata)
# 查看数据中的变量名

head(mydata)
# 查看数据中的前几条记录

attach(mydata)
# 直接调用变量,不用mydata$mpg

summary(mpg)
# 变量mpg的描述性统计分析,最小值、最大值、中位数、平均数、四分位数等

sort(make)
# 字符型变量按照abc排序,如果是数值型,从大到小排序

table(make)
# 出现频率统计

table(make,foreign)
# 二维的频率统计

cor(price,mpg)
# 相关性

t.test(mpg,mu = 20)
# t检验,mu的均值是否异于20

anova(lm(mpg~factor(foreign)))
# 方差分析

olsreg <- lm(mpg~weight+length+foreign)
# 多元线性回归

summary(olsreg)
# 回归结果的描述

Y <- cbind(mpg)
X <- cbind(weight,length,foreign)
# 把被解释变量存成Y,解释变量存成X,后面回归的时候方便很多

olsreg <- lm(Y ~ X)
# 回归

summary(olsreg)
# 回归结果的描述

plot(olsreg)
# 会生成四张图,反映回归的好坏
##Q-Q图对应正态性检验

##Residuals vs Fitted(残差图与拟合图)对应线性假设,
##若图中有曲线关系,则可能需要对回归模型加二次项。

##Scale-Location Graph(位置尺度图)对应同方差性。
##若水平线周围的点随机分布,则满足假设。

##Residual vs Leverage(残差与杠杆图)提供可能关注的单个观测点。
##从图上可以鉴别出离群点、高杠杆点和强影响点。

4.有交互项的多元线性回归

此时代码例子为:

fit <- lm(mpg ~ hp + wt + hp:wt, data = mtcars)

若两个自变量的交互项显著,则说明因变量与其中一个自变量的关系依赖于另一个自变量。

用effects包中的effect()函数,可以用图形展示交互项结果(即当一个变量取某个固定的值时,另一个自变量变化时因变量的变化),格式为:

plot(effect(term, mod, xlevels), multiline =TRUE)

term即模型要画的项,mod为通过lm()拟合的模型,xlevels是一个列表,指定变量要设定的常量值,multiline = TRUE选项表示添加相应直线。

例:

plot(effect("hp:wt", fit, list(wt = c(2.2, 3.2, 4.2))), multiline = TRUE)

5.回归诊断

summary()函数对模型有了整体的描述,但是没有提供关于模型在多大程度上满足统计假设的任何信息,即没有任何输出告诉你模型是否合适。回归诊断技术提供了评价回归模型适用性的必要工具,帮助发现并纠正问题。
car包提供了大量的函数,大大增强了拟合和评价回归模型的能力

5.1 正态性

qqplot函数,提供了精确的正态假设检验方法

> library(carData)
> library(car)
> par(mfrow=c(1,2))
> fit <- lm(weight~height,data=women)
> qqPlot(fit,labels=row.names(women),id.method='identity',simulate=TRUE,main='qq-fit')
[1]  1 15
> fit2 <- lm(weight~height+I(height^2),data=women)
> qqPlot(fit2,labels=row.names(women),id.method='identity',simulate=TRUE,main='qq-fit2')
[1] 13 15

置信区间通过虚线划定,当绝大多数点都落在置信区间时,说明正态性假设符合的很好

5.2 误差的独立性

car包提供了一个可做Durbin-Watson检验的函数,能够检测误差的序列相关性。对应函数为durbinwatsonTest()

 durbinWatsonTest(fit)
 lag Autocorrelation D-W Statistic p-value
   1        0.585079     0.3153804       0
 Alternative hypothesis: rho != 0

p值 (p=0)不显著,误差项之间独立

5.3 线性

通过成分残差图(component + residual plots)检查因变量和自变量之间是否呈线性关系。
对应car包中crPlot函数绘制。

crPlots(fit)

若图形存在非线性,则说明可能对预测变量的函数形式建模不够充分,那么需要添加一些曲线成分,比如多项式,对一个或多个变量进行变换(log(x)代替x),或用其他回归变体形式而不是线性回归。

5.4 同方差性

ncvTest()函数生成一个计分检验,零假设为误差方差不变,备择假设为误差方差随着拟合值水平的变化而变化。若检验显著,则说明存在异方差性(误差方差不恒定)。

spreadLevelPlot()函数创建一个添加了最佳拟合曲线的散点图,展示标准化残差绝对值与拟合值的关系。

> ncvTest(fit)
Non-constant Variance Score Test 
Variance formula: ~ fitted.values 
Chisquare = 0.8052115, Df = 1, p = 0.36954
> spreadLevelPlot(fit)

Suggested power transformation:  -0.8985826 

记分检验不显著:p=0.36954,说明满足方差不变假设,也可以通过分布水平看到这一点,点在水平的最佳拟合曲线周围呈随机分布。

你可能感兴趣的:(r语言)