条件:减小因变量的真实值与预测值的差值来获取模型参数,即残差平方和最小。
为了能够恰当地解释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() | 用拟合模型对新的数据集预测响应变量值 |
举个栗子:
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值越小,表明结果越显著。
使用lm(),在formula参数中使用I()函数来进行多项式拟合
fit2 <- lm(weight~I(height^2),data=women) ##多项式回归仍是线性回归
具体的不介绍
当自变量不止一个时,简单线性回归就变为多元线性回归。
多元回归分析中,第一步最好检查下变量间的相关性cor()
,cor.test()
,corr.test()
data=data.frame(Y,Z,W)
cor(data)
一些操作代码:
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(残差与杠杆图)提供可能关注的单个观测点。
##从图上可以鉴别出离群点、高杠杆点和强影响点。
此时代码例子为:
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)
summary()函数对模型有了整体的描述,但是没有提供关于模型在多大程度上满足统计假设的任何信息,即没有任何输出告诉你模型是否合适。回归诊断技术提供了评价回归模型适用性的必要工具,帮助发现并纠正问题。
car包提供了大量的函数,大大增强了拟合和评价回归模型的能力
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
置信区间通过虚线划定,当绝大多数点都落在置信区间时,说明正态性假设符合的很好
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)不显著,误差项之间独立
通过成分残差图(component + residual plots)检查因变量和自变量之间是否呈线性关系。
对应car包中crPlot函数
绘制。
crPlots(fit)
若图形存在非线性,则说明可能对预测变量的函数形式建模不够充分,那么需要添加一些曲线成分,比如多项式,对一个或多个变量进行变换(log(x)代替x),或用其他回归变体形式而不是线性回归。
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,说明满足方差不变假设,也可以通过分布水平看到这一点,点在水平的最佳拟合曲线周围呈随机分布。