1.利用GCV(广义交叉验证)实现最优岭回归参数选择

#根据GCV方法,获取最佳岭参数k
#x:自变量的数据矩阵
#y:响应变量向量或矩阵
#kmax:岭参数的最大值
#qnum:根据0~kmax分成qnum等分
#intT:是否计算矩阵
getBestK <-function(X,Y,kMax=1,qnum=10,intT=TRUE){
if(intT)
X <-cbind(t0=1,X)
kvals=c(0,(1:qnum)*(kMax/qnum))
n=nrow(X)
glist <-NULL
for (k in kvals) {
mk=X%*%solve(t(X)%*%X+k*diag(ncol(X)))%*%t(X)
yk=mk%*%Y
Xs<-svd(X)
d <-Xs$d
dx <-length(d)
div <-d^2 +rep(k,rep(dx,1))
GCV <-sum((Y-yk)^2)/(n-sum(matrix(d^2/div,dx)))^2
glist <-c(glist,GCV)}
return(list(k=kvals[which.min(glist)],gval=min(glist),glist=glist))
}

引用getBestK函数,实现最优岭回归参数k的选择

library(MASS)
x=as.matrix(data[,1:3])
y=data[,4]
m0=getBestK(x,t(t(y)),kMax = 1,qnum = 2000)
m0$k

结果如下:

2.实现岭回归分析的函数

在进行岭回归时,发现可以使用两个函数,lm.Ridge及linearRidge,都可以实现。

首先读入数据:

data <-read.csv("D:\\sample\\sample_2.csv",header=T)

(1)lm.Ridge()函数
实现的代码分别如下:

Library(MASS)
lr<-lm.ridge(N ~ SHDI + MIDU + LSI + CONTAG,data=data5,lambda = 0.0085,model = TRUE) #把lambda设置为0.0085,是通过下面的代码求得的最佳岭回归参数,但获取岭回归参数的方法较多,同时也会造成结果不同,如果lambda不进行设置,会默认为0
lr #显示模型的参数系数,不能显示R^2等误差的情况,也不能使用summary()函数

结果:


对于k值得选择除了,最上面的getBestK函数外,还可以通过岭迹曲线得到,但是在k值选择时,受人为主观意识影响大,获取lm.ridge函数得到的模型对应的岭迹曲线,代码如下:

library(MASS)
ridge.sol <- lm.ridge(N ~ SHDI + MIDU + LSI + CONTAG, lambda = seq(0,1, length = 2000), data = data5, model = TRUE) #landad为使用seq函数把0-1范围均等分割为2000分,得到不同的lambda

画出图形,得到四个自变量的系数在lambad变化的情况下的变化情况,当所有系数趋于平滑时,可以选取这时的lambad值:

matplot(x=ridge.sol$lambda, y=t(ridge.sol$coef), xlab = expression(lamdba), ylab= "Cofficients", type = "l", lty = 1:20) # lty = 1:20可加可不加,设置线的形状.
#作出lambdaGCV取最小值时的那条竖直线
abline(v = ridge.sol$lambda[which.min(ridge.sol$GCV)])

结果:

发现,上图在lambad在0.8左右,自变量的系数值趋于稳定。

下面的语句绘出lambda同GCV之间关系的图形:

plot(ridge.sol$lambda, ridge.sol$GCV, type = "l", xlab = expression(lambda), ylab = expression(beta))
abline(v = ridge.sol$lambda[which.min(ridge.sol$GCV)]) #语句ridge.sol$coef[which.min(ridge.sol$GCV)]  为找到GCV最小时对应的系数

结果:

在上面的代码中,还可以调整lambda = seq(0, 1, length = 2000)的范围及大小,如果lambad只是一个值,则得到的图像为空,只有在lambad变化的时候,才能得到岭迹曲线。

(2)linearRidge()函数
linearRidge()函数也可以用于求岭回归,如果lambad属性默认,则该函数可以自动选取岭回归参数,同时也可以自己通过其他的方式选择好,再进行设置;lm.Ridge函数不能自动选取岭回归参数,如果不对lambad进行设置,则默认为0. linearRidge函数实现岭回归的代码如下:

library(ridge)
mod <- linearRidge(N ~ SHDI + MIDU+LSI+CONTAG,lambda = 0.3,data = data5)
summary(mod) #可以查看判断结果,lm.Ridge使用该函数只能得带自变量系数;

结果如下:

从模型运行结果看,测岭回归参数值为0.3(即k值),是自己设置的lambad,且选择恰当的k值,进行岭回归会提高结果的显著性,因此在进行岭回归时,k值得选择还是挺重要的。


针对linearRidge函数,得到岭迹曲线,因在lambad取默认值的时候,lambad是会变化的,因此,岭迹曲线比较容易得到,代码如下:

plot(mod <- linearRidge(N ~ SHDI + MIDU+LSI+CONTAG, data = data5)) #没有设置lambad,默认

结果:

同时,你也可以在得到岭迹曲线时,自己设置lambad的变化范围,如下:

plot(mod <- linearRidge(N ~ SHDI + MIDU+LSI+CONTAG,lambda = seq(0,1,length=2000), data = data5))

结果:

如果lambad等于一个固定的值,则图像中只有几个点,点数对应于自变量的数目:

plot(mod <- linearRidge(N ~ SHDI + MIDU+LSI+CONTAG,lambda = 0.028, data = data5))

结果:

总结:

lm.Ridge和linearRidge是有区别的,再具体的差异就不是很清楚了,只能从上面几点上进行总结。且两者在lambad设置相同的情况下,得到的自变量系数结果也是不一样的。

注:
data为自己的数据集,getBestK函数代码,引用自《线性回归及其优化》。

R语言—岭回归实现函数相关推荐

  1. R语言-岭回归的代码与案例解读

    应用岭回归的场景有很多. 本文介绍的是 在应用多元线性回归时 遇到多重共线性问题,且无法删除变量或者增加样本量的情况下,应用岭回归的情况. 案例:互联网经济对中国经济增长影响 基础模型:C-D生产函数 ...

  2. r语言岭回归参数选择_数据分析中常见的七种回归分析以及R语言实现(三)---岭回归...

    在我们平时做回归的时候,大部分都是假定自变量和因变量是线性,但有时候自变量和因变量可能是非线性的,这时候我们就可能需要多项式回归了,多项式回归就是自变量和因变量是非线性所做的一个回归模型,其表达式: ...

  3. r语言岭回归参数选择_78-预测分析-R语言实现-岭回归与LASSO回归

    > library(pacman) > p_load(dplyr, readr, caret) 以上一节中未去除离群值的MSE为3619.029,修正R2为0.8603和去除离群值后的MS ...

  4. R语言构建回归模型并进行模型诊断(线性关系不满足时)、进行变量变换(Transforming variables)、使用car包中的boxTidwell函数对预测变量进行Box–Tidwell变换

    R语言构建回归模型并进行模型诊断(线性关系不满足时).进行变量变换(Transforming variables).使用car包中的boxTidwell函数对预测变量进行Box–Tidwell变换 目 ...

  5. R语言survival包clogit函数构建条件logistic回归模型、summary函数查看模型汇总统计信息、通过似然比检验分析结果判断模型有无统计学意义

    R语言survival包clogit函数构建条件logistic回归模型.summary函数查看模型汇总统计信息.通过似然比检验分析结果判断模型有无统计学意义 目录

  6. R语言survival包coxph函数构建cox回归模型、ggrisk包ggrisk函数可视化Cox回归的风险评分图、使用风险得分的中位数计算最佳截断值cutoff(基于LIRI基因数据集)

    R语言survival包coxph函数构建cox回归模型.ggrisk包ggrisk函数可视化Cox回归的风险评分图.使用风险得分的中位数计算最佳截断值cutoff(基于LIRI基因数据集) 目录

  7. 数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...

    全文链接:http://tecdat.cn/?p=27384 在本文中,数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息(点击文末"阅读原文"获取完整代 ...

  8. R语言逻辑回归Logistic回归分析预测股票涨跌

    最近我们被客户要求撰写关于逻辑回归的研究报告,包括一些图形和统计输出. 视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠心病风 ...

  9. R语言逻辑回归、方差分析 、伪R平方分析

    目录 怎么做测试 假设条件 并非所有比例或计数都适用于逻辑回归分析 过度分散 伪R平方 测试p值 Logistic回归示例 模型拟合 系数和指数系数 方差分析 伪R平方 模型的整体p值 标准化残差图 ...

最新文章

  1. 10、单机运行环境搭建之 --Windows下mysqldump 备份与还原数据库
  2. 为什么要把进程/线程绑定到特定cpu核上运行?(cpu core id coreIdx)opdevsdk_sys_bindThreadCoreId()
  3. Ubuntu -- 安装、卸载程序的命令
  4. 响应式网站设计_通过这个免费的四小时课程,掌握响应式网站设计
  5. Raid 原理及创建软raid
  6. python中encode与decode编码转换
  7. 分享一个Ubuntu16.0.4安装MySQL5.7脚本
  8. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第3节 maven标准目录结构和常用命令_06maven标准目录结构...
  9. 零基础学会三菱FX3UPLC编程调试
  10. nide-js.nt
  11. 遇到一位贵人是什么体验,贵人到底有多重要?
  12. web前端需要学习什么?
  13. “香港科大百万奖金创业大赛”的十年深耕:让硬科技像蒲公英一样散播
  14. 反燃油车占位方案:AI识别+EasyCVR解决燃油车占位问题
  15. MDK 注册机下载路径
  16. 无线Mesh网络 介绍
  17. 甲苯二异氰酸酯(TDI)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 如何使用Python从图片中提取文字?
  19. 手把手教你分析解决MySQL死锁问题
  20. 扫描线+线段树简介 AcWing 248窗内的星星题解

热门文章

  1. 手机版qq邮箱一直连接服务器失败,iphone邮箱怎么连接服务器 iphone邮箱无法连接服务器怎么办...
  2. pythom 16 random 模块
  3. C++ 函数返回数组处理方法
  4. 基于飞桨复现语义分割网络HRNet,实现瓷砖缺陷检测
  5. C语言中的字符串结束符'\0'
  6. 上市公司营业收入数据集(1990-2021第三季度)
  7. 红帽子redhat linux 9.0官方下载地址,附MD5校验码
  8. 不需要自己录音也能做好短视频配音,只需一个小技巧,get逼真配音
  9. deepin20系统选择手动安装盘_Mac USB启动安装盘制作 (U盘安装 Mac 系统) / 兼10.14 Mojave降级办法...
  10. ICCV2015(object detection):Fast RCNN-论文解读《Fast R-CNN》