r语言实现岭回归_R语言回归篇
1.回归的多面性
回归类型
用途
简单线性
个量化的解释变量来预测一个量化的响应变量(一个因变量、一个自变量)
多项式
一个量化的解释变量预测一个量化的响应变量,模型的关系是
n阶多项式(一个预测变量,但同时包含变量的幂)
多元线性
用两个或多个量化的解释变量预测一个量化的响应变量(不止一个预测变量)
多变量
用一个或多个解释变量预测多个响应变量
Logistic
用一个或多个解释变量预测一个类别型变量
泊松
用一个或多个解释变量预测一个代表频数的响应变量
Cox比例风险
用一个或多个解释变量预测一个事件(死亡、失败或旧病复发)发生的时间
时间序列对误差项相关的时间序列数据建模
非线性
用一个或多个量化的解释变量预测一个量化的响应变量,不过模型是非线性的
非参数
用一个或多个量化的解释变量预测一个量化的响应变量,模型的形式源
自数据形式,不事先设定
稳健
用一个或多个量化的解释变量预测一个量化的响应变量,能抵御强影响点的干扰
2.OLS回归
OLS回归是通过预测变量的加权和来预测量化的因变量,其中权重是通过数据估计而得以的参数。
使残差平方和最小
为能够恰当地解释OLS模型的系数,数据必须满足以下统计假设:
(1) 正态性对于固定的自变量,因变量值成正态分布
(2) 独立性 Yi值之间相互独立
(3) 线性 因变量与自变量之间为线性相关
(4) 同方差性因变量的方差不随自变量的水平不同而变化,即不变方差或同方差性
3. 用lm()拟合回归模型
拟合线性模型最基本的函数就是lm(),格式为:
myfit
formula指要拟合的模型形式,data是一个数据框,包含了用于拟合模型的数据
formula形式如下:Y~X1+X2+……+Xk (~左边为响应变量,右边为各个预测变量,预测变量之间用+符号分隔)
R表达式中常用的符号
符号
用途
~
分隔符号,左边为响应变量,右边为解释变量,eg:要通过x、z和w预测y,代码为y~x+z+w
+
分隔预测变量
:
表示预测变量的交互项 eg:要通过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
.
表示包含除因变量外的所有变量,eg:若一个数据框包含变量x、y、z和w,代码y~.可展开为y~x+z+w
-
减号,表示从等式中移除某个变量,eg:y~(x+z+w)^2-x:w可展开为y~x+z+w+x:z+z:w
-1
删除截距项,eg:表示y~x-1拟合y在x上的回归,并强制直线通过原点
I()
从算术的角度来解释括号中的元素。Eg: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()
列出拟合模型的模型参数(截距项和斜率)
Cofint()
提供模型参数的置信区间(默认95%)
Fitted()
列出拟合模型的预测值
Residuals()
列出拟合模型的残差值
Anova()
生成一个拟合模型的方差分析,或者比较两个或更多拟合模型的方差分析表
Vcov()
列出模型参数的协方差矩阵
AIC()
输出赤池信息统计量
Plot()
生成评价拟合模型的诊断图
Predict()
用拟合模型对新的数据集预测响应变量值
4. 简单线性回归
eg:
fit
summary(fit)
在Pr(>|t|)栏,可以看到回归系数(3.45)显著不为0(p<0.001),表明身高每增加1英寸,体重将预期地增加3.45磅
R平方项(0.991)表明模型可以解释体重99.1%的方差,它也是实际和预测值之间的相关系数(R^2=r^2)
残差的标准误(1.53lbs)则可认为模型用身高预测体重的平均误差
F统计量检验所有的预测变量预测响应变量是否都在某个几率水平之上
fitted(fit)#拟合模型的预测值
residuals(fit)#拟合模型的残差值
plot(women$height,women$weight,
xlab="Height (in inches)",
ylab="Weight(in pounds)")
abline(fit)
5. 多项式回归
fit2
summary(fit2)
plot(women$height,women$weight,
xlab="Height(in inches)",
ylab="Weight(in lbs)")
lines(women$height,fitted(fit2))
一般来说,n次多项式生成一个n-1个弯曲的曲线
car包中的scatterplot()函数,可以很容易、方便地绘制二元关系图
scatterplot(weight~height,
data=women,
spread=FALSE,
lty.smooth=2,
pch=19,
main="Women Age 30-39",
xlab="Height (inches)",
ylab="Weight(lbs.)")
6.多元线性回归
采用的数据集:state.x77
states
检测二变量关系
cor(states)
library(car)
scatterplotMatrix(states,spread=FALSE,lty.smooth=2,main="Scatter Plot Matrix")
scatterplotMatrix()函数默认在非对角线区域绘制变量间的散点图,并添加平滑(loess)和线性拟合曲线
多元线性回归
fit
summary(fit)
7.有交互项的多元线性回归
fit
summary(fit)
通过effects包中的effect()函数,可以用图形展示交互项的结果
fit
summary(fit)
install.packages("effects")
library(effects)
plot(effect("hp:wt",fit,
list(wt=c(2.2,3.2,4.2))),multiline=TRUE)
8.回归诊断
(1)标准方法
fit
par(mfrow=c(2,2))
plot(fit)
正态性:当预测变量值固定时,因变量成正态颁,则残差图也应是一个均值为0的正态颁。正态Q-Q图是在正态颁对应的值上,标准化残差的概率图,若满足正态假设,则图上的点应该落在吓45度角的直线上,若不是,则违反了正态性假设。
独立性:只能从收集的数据中来验证。
线性:若因变量与自变量线性相关,则残差值与预测(拟合)值就没有任务系统关联,若存在关系,则说明可能城要对回归模型进行调整。
同方差性:若满足不变方差假设,则在位置尺度图(Scale-Location Graph)中,水平线周围的点应随机分布。
二次拟合诊断图
fit2
par(mfrow=c(2,2))
plot(fit2)
(2)改进的方法
(car包中的)回归诊断实用函数
函数
目的
qqPlot()
分位数比较图
durbinWatsonTest()
对误差自相关性做Durbin-Watson检验
crPlots()
成分与残差图
ncvTest()
对非恒定的误差方差做得分检验
spreadLevelPlot()
分散水平检验
outlierTest()
Bonferroni离群点检验
avPlots()
添加的变量图形
inluencePlot()
回归影响图
scatterplot()
增强的散点图
scatterplotMatrix()
增强的散点图矩阵
vif()
方差膨胀因子
另gvlma包提供了对所有线性模型进行检验的方法
正态性:
与 plot()函数相比,qqplot()函数提供了更为精确的正态假设检验方法,画出了n-p-1个自由度的t分布下的学生化残差图形,n为样本大小,p是回归参数的数目(包括截距项)
eg:
library(car)
fit
qqPlot(fit,labels=row.names(states),id.method="identify",simulate=TRUE,main="Q-Q Plot")
绘制学生残差图的函数
residplot
z
hist(z,breaks=nbreaks,freq=FALSE,
xlab="Studnetized Residual",
main="Distribution of Errors")
rug(jitter(z),col="brown")
curve(dnorm(x,mean=mean(z),sd=sd(z)),
add=TRUE,col="blue",lwd=2)
lines(density(z)$x,density(z)$y,
col="red",lwd=2,lty=2)
legend("topright",
legend=c("Normal Curve","Kernel Density Curve"),
lty=1:2,col=c("blue","red"),cex=0.7)}
residplot(fit)
误差的独立性:
之前提到可依据收集数据判断因变量是否独立
car包中提供了一个可做Durbin-Watson检验的函数,可检测误差的序列相关性
durbinWatsonTest(fit)
线性:
可通过成分残差图即偏残差图,判断因变量与自变量之间是否呈非线性关系,也可以看是否不同于已设定线性模型的系统偏差,图形可用car包中crPlots()函数绘制
library(car)
crPlots(fit)
若图形存在非线性,则说明可能对预测变量的函数形式建模不够充分
car包提供了两个有用的函数,可判断误差方差是否恒定
ncvTest()函数生成一个计分检验,零假设为误差方差不变
spreadLevelPlot()函数创建一个添加了最佳拟合曲线的散点图,展示标准化残差绝对值与拟合值的关系
检验同方差性:
library(car)
ncvTest(fit)
spreadLevelPlot(fit)
(3)线性模型假设的综合验证
gvlma包中的gvlma()函数
install.packages("gvlma")
library(gvlma)
gvmodel
summary(gvmodel)
(4)多重共线性
VIF(Variance Inflation Factor,方差膨胀因子)进行检测
一般原则下,(VIF)^1/2 >2表明存在多重共线性问题
library(car)
vif(fit)
sqrt(vif(fit))>2
9.异常观测值
(1)离群点
离群点指那些模型预测效果不佳的观测点,通常有很大的、或正或负的残差,正残差说明模型低估了响应值,负残差说明高佑了响应值
library(car)
outlierTest(fit)
outlierTest()函数是根据单个最大(或正或负)残差值的显著性来判断是否有离群点,若不显著,则说明数据集中没有离群点,若显著,则必须删除该离群点,然后再检验是否还有其他离群点存在。
(2)高杠杆值点
高杠杆值观测点,即是与其他预测变量有关的离群点,即它们是由许多异常的预测变量组合起来的,与响应变量值没有关系。
高杠杆值的观测点可通过帽子统计量(hat statistic)判断。对于一个给定的数据集,帽子均值为p/n,其中p是模型估计的参数数目(包含截距项),n是样本量。一般来说,若观测点的帽子值大于帽子均值的2或3倍,则可认定为高杠杆值点。
hat.plot
p
n
plot(hatvalues(fit),main="Index Plot of Hat Values")
abline(h=c(2,3)*p/n,col="red",lty=2)
identify(1:n,hatvalues(fit),names(hatvalues(fit)))
}
hat.plot(fit)
(3)强影响点
强影响点,即对模型参数估计值影响有些比例失衡的点。例如,当移除 模型的一个观测点时模型会发生巨大的改变,那么需要检测一下数据中是否存在强影响点。
检测方法
Cook距离,或称为D统计量 Cook's D值大于4/(n-k-1),则表明它是强影响点,其中n为样本量大小,k是预测变量数目(有助于鉴别强影响点,但并不提供关于这些点如何影响模型的信息)
变量添加图(added variable plot)(弥补了该缺陷)(对于每个预测变量Xk,绘制Xk在其他k-1个预测变量上回归的残差值相对于响应变量在其他k-1个预测变量上回归的残差值的关系图)
cutoff
plot(fit,which=4,cook.levels=cutoff)
abline(h=cutoff,lty=2,col="red")
library(car)
avPlots(fit,ask=FALSE,onepage=TRUE,id.method="identify")
car包中的influencePlot()函数,可将离群点、杠杆点和强影响点的信息整合到一幅图形中
library(car)
influencePlot(fit,id.method="identify",main="Influence Plot",
sub="Circle size if proportional to Cook's distance")
影响图。纵坐标超过2或小于-2的州可被认为是离群点,水平轴超过0.2或0.3的州有高杠杆值(通常为预测值的组合)。圆圈大小与影响成比例,圆圈很大的点可能是对模型估计造成的不成比例影响的强影响点。
10.改进的措施
(1)删除观测点
删除观测点可提高数据集对于 正态假设的拟合度,而强影响点会干扰结果,通常也会被删除。删除最大的离群点或强影响点,模型需要重新拟合,若离群点或强影响点仍然存在,重复以上过程直到获得比较满意的拟合。
对删除观测点应持谨慎态度。
(2)变量变换
当模型不符合正态性、线性或同方差性假设时,一个或多个变量的变换通常可以改善或调整模型效果。
当模型违反了正态假设时,通常可以对响应变量尝试某种变换。
car包中的powerTransform()函数
Box-Cox正态变换
library(car)
summary(powerTransform(states$Murder))
(3)增删变量
改变模型的变量会影响模型的拟合度,增加或删除变量
多重共线问题:岭回归
11.选择“最佳”的回归模型
(1)模型比较
anova()函数可比较两个嵌套模型的拟合优度
嵌套模型即指它的一个些项完全饮食在另一个模型中
用anova()函数比较
fit1
fit2
anova(fit2,fit1)
模型1嵌套在模型2中,检验不显著,基础知识 不需要将Income和Frost添加到线性模型中,可将它们从模型中删除
AIC(Akaike Information Criterion,赤池信息准则)可用来比较模型,考虑了模型的统计拟合度及用来拟合的参数数目
AIC值越小的模型要优行选择,说明模型用较少的参数获得了足够的拟合度
fit1
data=states)
fit2
AIC(fit1,fit2)
(2)变量选择
逐步回归法(stepwise method):
向前逐步回归(forward stepwise)每次添加一个预测变量到模型中,直到添加变量不会使模型有所改进为止。
向后逐步回归(backward stepwise)从模型包含所有预测变量开始,一次删除一个变量直到会降低模型质量为止。
向前向后逐步回归(stepwise stepwise 逐步回归)
MASS包中的steAIC()函数可实现逐步回归模型,依据的是精确AIC准则
后向回归
library(MASS)
fit1
stepAIC(fit,direction="backward")
全子集回归(all-subsets regression):
全子集回归,即所有可能的酣篮队支被检验,可选择展示所有可能的结果,也可展示n个不同子集大小(一个、两个或多个预测变量)的最佳模型
可用leaps包中的regsubsets()函数实现
可通过R平方、调整R平方或Mallows Cp统计量等准则来选择“最佳”模型
R平方是预测变量解释响应变量的程度
调整R平方与之类似,但考虑了模型的参数数目
Mallows Cp统计量也用来作为逐步回归的判停规则,对于一个好的模型,它的Cp统计量非常迫近于模型的参数数目(包括截距项)
install.packages("leaps")
library(leaps)
leaps
plot(leaps,scale="adjr2")
library(car)
subsets(leaps,statistic="cp",main="Cp Plot for All Subsets Regression")
abline(1,1,lty=2,col="red")
12. 深层次分析
(1)交叉验证
交叉验证即将一定比例的数据挑选出来作为训练样本,另外的样本作为保留样本,先在训练样本上获取回归方程,然后在保留样本上做预测。 由于保留样本不涉及模型及参数的选择,该样本可获得比新数据更为精确的估计。
k重交叉难中,样本被分为k个子样本,轮流将k-1个子样本组合作为训练集,另外1个子样本作为保留集,这样会获得k个预测方程,记录k个保留样本的预测表现结果,然后求其平均值。【当n是观测总数目,k为n时,该方法又称作刀切法(jackknifing)】
bootstrap包中的crossval()函数可实现k重交叉验证
install.packages("bootstrap")
library(bootstrap)
shrinkage
require(bootstrap)
theta.fit
theta.predict
x
y
results
r2
r2cv
cat("Original R-square=",r2,"\n")
cat(k,"Fold Cross-Validated R-square=",r2cv,"\n")
cat("Change=",r2-r2cv,"\n")
}
fit
shrinkage(fit)
fit2
shrinkage(fit2)
(2)相对重要性
zstates
zfit
coef(zfit)
相对权重:是对所有可能子模型添加一个预测变量引起的R平方均增加量的一个近似值。
relweights
R
nvar
rxx
rxy
svd
evec
ev
delta
lambda
lambdasq
beta
rsqrare
rawwgt
import
lbls
rownames(import)
colnames(import)
barplot(t(import),names.arg=lbls,
ylab="% of R-Square",
xlab="Predictor Variables",
main="Relative Importance of Predictor Variables",
sub=paste("R-Square=",round(rsquare,digits=3)),……)
return(import)
}
fit
relweights(fit,col="lightgrey")
r语言实现岭回归_R语言回归篇相关推荐
- r语言logistic回归_R语言多分类logistic逻辑回归模型在混合分布模拟单个风险损失值评估的应用...
原文链接 :http://tecdat.cn/?p=14017tecdat.cn 通常,我们在回归模型中一直说的一句话是" 请查看一下数据 ". 在上一篇文章中,我们没有查看数据 ...
- r 多元有序logistic回归_R语言多分类logistic逻辑回归模型在混合分布模拟单个风险损失值评估的应用...
原文链接 拓端数据科技 / Welcome to tecdattecdat.cn 通常,我们在回归模型中一直说的一句话是" 请查看一下数据 ". 在上一篇文章中,我们没有查看数据 ...
- r ridge回归_R语言逻辑回归和泊松回归模型对发生交通事故概率建模
原文链接 http://tecdat.cn/?p=14139 我们考虑风险敞口,计算包含风险敞口的多个数量(经验均值和经验方差)的非参数估计量.如果要对二项式变量建模. 这里的模型如下: 未观察到该期 ...
- r ridge回归_R语言区间数据回归分析
原文链接:http://tecdat.cn/?p=14874 通常,GLM的连接函数可能比分布更重要.为了说明,考虑以下数据集,其中包含5个观察值 x = c(1,2,3,4,5)y = c(1,2, ...
- r语言 面板数据回归_R语言——伍德里奇计量经济导论案例实践 第十三章 横截面与面板数据(一)...
哈喽,停更了大概有三周的计量笔记又要重新开始啦!虽然美国的疫情没有停歇的迹象,可是依旧阻挡不了大学开学的热情.从8月3号开始上课到现在,也经历了很多事情,每天都是抱着死猪不怕开水烫的心情,暗地里安慰自 ...
- r语言 回归分析 分类变量_R语言进阶之广义线性回归
广义线性回归是一类常用的统计模型,在各个领域都有着广泛的应用.今天我会以逻辑回归和泊松回归为例,讲解如何在R语言中建立广义线性模型. 在R语言中我们通常使用glm()函数来构建广义线性模型,glm实际 ...
- 语言nomogram校准曲线图_R语言实现Cox模型校准度曲线绘制
01 研究背景 这是关于cox模型的第二篇文章,上一篇文章分享了运用Lasso回归如何筛选变量,将筛选后的变量绘制Nomogram图,本章分享构建模型后,如何绘制校准曲线. cox模型的验证不同于Lo ...
- r语言 面板数据回归_R语言_018回归
回归分析是统计学的核心.它其实是一个广义的概念,指那些用一个或多个预测变量来预测响应变量的方法.通常,回归分析可以用来挑选与响应变量相关的解释变量,可以描述两者的关系,也可以生成一个等式,通过解释变量 ...
- r读取shape文件可视化_R语言读取空间数据以及ArcGIS中OLS工具回归结果可视化R语言版...
前面已经介绍过R语言读取excel的方法了,当然读取数据来说,个人还是推荐csv或txt存储(针对小数据量).大数据量的数据的话建议还是用数据库,此外也可以考虑data.table包读取,这个包也是个 ...
- r语言结构方程模型可视化_R语言Logistic回归模型深度验证以及Nomogram绘制
01 研究背景 本章将常用的基于R语言实现二元Logistic回归模型临床预测模型的构建和验证,以及诺曼图的绘制记录下来,更为复杂的生存分析中的Cox回归将在后续章节介绍.临床预测模型的思路总结如下: ...
最新文章
- Python进行时间序列平稳检验ADFtest(Augmented Dickey-Fuller Unit Root Test)
- OpenMP入门教程
- java中有界队列的饱和策略(reject policy)
- Django从理论到实战(part3)--创建一个Django项目
- MyBatis笔记——配置文件完成增删改查
- 上deepweb难吗_发动机保养难?傲群除尘毛刷用上了吗
- 初探线程之线程竞争及故障
- Pandas速查手册中文版
- java 分布式任务_分布式定时任务(一)
- git基本命令、提交pr
- 两种方法分析每月工作日计算程序
- 计算机网络故障提出问题,列控系统及其计算机网络的故障诊断与故障容错研究...
- 吴恩达深度学习系列笔记
- 微信小程序中的iPhone X适配解决
- 国内CMS技术发展的外在表现形式
- 关于系统复杂性的一句箴言
- 【Appium】测试时遇到手机内嵌H5页面的切换问题
- 帧同步与状态同步:方案比较
- Vuepress2版本打包报错:TypeError: Invalid value used as weak map key
- JavaScript基础——第三章,JavaScript操作DOM对象