R笔记:全子集回归 | 最优子集筛选变量挑选

这篇具有很好参考价值的文章主要介绍了R笔记:全子集回归 | 最优子集筛选变量挑选。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

R笔记:全子集回归 | 最优子集筛选 AIC 最优子集筛选(Best Subset Selection)

 一统浆糊 2021-05-05 18:58

变量筛选中常用方法解释

R语言| 16. 预测模型变量筛选: 代码篇 (qq.com)

在进行多因素回归(多重线性回归、logistic回归、Cox回归等)时,为了得到简洁有效的模型,我们会做变量筛选(模型选择)。根据专业进行变量的筛选才是王道,统计学检验只是辅助验证你的专业结论。我们不提倡把一堆变量放进软件由软件来筛选预测变量,但也不能因此否定统计筛选的作用。常用的统计学方法筛选方法有逐步回归(向前法、后退法、向前后退混合法)以及全子集回归(All-Subsets Regression,All Possible Regression)。全子集回归可以对所有预测变量的可能组合模型都拟合一下,然后根据某标准(如R2、校正的R2、MSE、Cp、AIC、SBIC等)筛选出现有变量条件下的最佳模型,又叫最优子集筛选(Best Subset Selection)。有些教程把最优子集定义为从含相同自变量的个数的所有模型中挑选出最佳的模型组合,比如ABCD四个自变量,可以有2^4=16个模型,其中常数项模型1个,含1个自变量的模型4个(A、B、C、D),含2个自变量的模型6个(AB、AC、AD、BC、BD、CD),含3个自变量的模型4个(ABC、ABD、ACD、BCD),含4个自变量的模型1个(ABCD),分别从含有1、2、3、4个自变量的模型中挑选出最佳的一个模型就可以组成最优子集。

R中能实现最优子集回归的函数有很多,R Site Search[http://finzi.psych.upenn.edu/search.html]可以直接搜索相关函数,你会搜到很多,比如bestglm {bestglm}、lmSubsets {lmSubsets}、leaps {leaps}/regsubsets {leaps}、bess {BeSS}、bestsubset {StepReg}、ols_step_all_possible{olsrr}、ols_step_best_subset{olsrr}。

回归与判定标准

逐步回归,模型判定:AIC,值越模型越优; 

全子集回归,模型判定,调整R²,值越模型越优,BIC和CP值越小越好;

Lasso回归+交叉验证:模型判定,MSE,具体见下文。

示例:<<因变量二分类资料的Probit回归>>中的数据。

【1-3】数据导入>>数据初步考察与处理>>拟合多重线性回归模型

library(haven)

lmdata<-read_sav("D:/Temp/logistic_step.sav")

lmdata$race<-factor(lmdata$race)

lmdata$smoke<-factor(lmdata$smoke)

lmdata$ptl <-ifelse(lmdata$ptl>0,1, 0)

lmdata$ptl<-factor(lmdata$ptl)

lmdata$ht<-factor(lmdata$ht)

lmdata$ui<-factor(lmdata$ui)

lmfit<- lm(bwt~age+lwt+race+smoke+ptl+ht+ui+ftv,data=lmdata)

【4】适用条件考察:线性、独立性、正态性、同方差性

【5】模型评估与诊断

【6】变量筛选

全子集回归

本例有8个自变量,全子集回归将会包含255个模型(不含常数项模型,2^8-1=255)及其R2、校正的R2、Cp。

library(olsrr)

ols_step_all_possible(lmfit)

R笔记:全子集回归 | 最优子集筛选变量挑选

第一列是预测因子的组合顺序,我们建立了模型lmfit<- lm(bwt~age+lwt+race+smoke+ptl+ht+ui+ftv,data=lmdata),age是第1个因子(组合),ftv是第8个因子(组合),age+lwt是第9个组合。

第3列(N)是模型含有预测变量的个数,第2列(Index)是先按第3列升序排列后,自变量相同个数的模型中在按照信息准则的大小进行排列,在plot作图中用于标识模型。在进行模型比较时,R^2、校正的R^2越大,Cp值越小模型越佳。

本例涉及模型较多,为更直观的显示结果,我们可以使用图示进行结果显示。

plot(ols_step_all_possible(lmfit))

R笔记:全子集回归 | 最优子集筛选变量挑选

示法采用4个指标(R2、校正R2、Cp、AIC、SBIC及SBC)。不同的评估指标筛选的最优模型会存在差异。结果显示,根据不同的评估指标,最优模型可能存在差异,基本上集中在纳入4-6个变量时,图示中评估指标值相近的的模型可以结合标识在ols_step_all_possible的结果中确定。

当然我们也可以直接使用最优子集回归。

最优子集回归

ols_step_best_subset(lmfit)

R笔记:全子集回归 | 最优子集筛选变量挑选

结果显示在预测变量个数一定时的最优模型,同时各种信息准则也表明在自变量6个时模型最佳

plot(ols_step_best_subset(lmfit))

R笔记:全子集回归 | 最优子集筛选变量挑选

函数并没有直接给出模型的参数估计值,可以借助回归模型求得。

lmfitbm<- lm(bwt~lwt+race+smoke+ptl+ht+ui,data=lmdata)

summary(lmfitbm)

R笔记:全子集回归 | 最优子集筛选变量挑选

ols_step_all_possible{olsrr}ols_step_best_subset{olsrr}可以寻找多重线性回归的最优子集。函数bestglm {bestglm}适用面更广,不仅多重线性回归,logistic回归、Poisson回归等都可以实现。以确定logistic回归的最优子集为例演示如下,示例仍以<<因变量二分类资料的Probit回归>>中的数据,结局指标为是否为低体重新生儿(low)


bestglm(Xy, family = gaussian, IC = "BIC", t = "default", CVArgs = "default", qLevel = 0.99, TopModels = 5, method = "exhaustive", intercept = TRUE, weights = NULL, nvmax = "default", RequireFullEnumerationQ = FALSE, ...)


library(haven)

lmdata<-read_sav("D:/Temp/logistic_step.sav") ##入spss数据

lgtdata<-lmdata[c("age","lwt","race","smoke","ptl","ht","ui","ftv","low")] ##结局变量需要在最后一列

lgtdata<-as.data.frame(as.matrix(lgtdata))  ##将数据指定为矩阵后在转换为数据框

lgtdata$race<-factor(lgtdata$race)

lgtdata$smoke<-factor(lgtdata$smoke) 

lgtdata$ptl <-ifelse(lgtdata$ptl>0,1, 0)

lgtdata$ptl<-factor(lgtdata$ptl)

lgtdata$ht<-factor(lgtdata$ht)

lgtdata$ui<-factor(lgtdata$ui)

library(bestglm)

library(leaps)

bestglm(lgtdata, IC="AIC", family=binomial) ##Information criteria to use: "AIC", "BIC", "BICg", "BICq", "LOOCV", "CV"Family to use: binomial(link = "logit"),gaussian(link = "identity"),Gamma(link = "inverse"),inverse.gaussian(link = "1/mu^2"),poisson(link = "log"),quasi(link = "identity", variance = "constant"),quasibinomial(link = "logit"),quasipoisson(link = "log")

lgtdata2<-lmdata[c("age","lwt","race","smoke","ptl","ht","ui","ftv","low")]

lgtdata2<-as.data.frame(as.matrix(lgtdata2))

bestglm(lgtdata2, IC="AIC", family=binomial)

R笔记:全子集回归 | 最优子集筛选变量挑选

结果有几点需要说明:

(1)预测变量存在因子变量时结果将以方差分析表的形式输出,预测变量全部为连续变量结果以参数估计表的形式输出,OR=exp(β)。本例只是为了演示输出格式,最后直接将race作为连续变量纳入模型实际操作是不合适的。二分类变量赋值0和1时,不论以因子变量纳入还是直接以连续变量纳入结果是一致的,因此如果想获得含有因子变量的参数估计值,除了直接使用筛选到的预测变量进行logistic回归外,还可以考虑将多分类变量设为哑变量,然后全部以连续变量纳入分析

library(haven)

lmdata<-read_sav("D:/Temp/logistic_step.sav")

lmdata$race<-factor(lmdata$race)

library(misty)

raced<-dummy.c(lmdata$race, ref= 1, names = "race_d")  ##将race设置为哑变量,哑变量名称为race_d+数字

m<-cbind(lmdata,raced) ##新生成的数据框m,包含了lmdata和raced的数据

lgtdata<-m[c("age","lwt","race_d2","race_d3","smoke","ptl","ht","ui","ftv","low")]

lgtdata<-as.data.frame(as.matrix(lgtdata))

library(bestglm)

library(leaps)

bestglm(lgtdata, IC="AIC", family=binomial)

R笔记:全子集回归 | 最优子集筛选变量挑选

(2)不同信息准则获得的最终模型可能不同。AIC和BIC的比较可参见

https://www.jianshu.com/p/4c8cf5df2092。【AIC=2k-2ln(L),要求模型的误差服从独立正态分布。其中k是所拟合模型中参数的数量,L是对数似然值,n是观测值数目。k小意味着模型简洁,L大意味着模型精确,AIC评价模型兼顾了简洁性和精确性。BIC=-2 ln(L) + ln(n)*k,BIC的惩罚项比AIC的大,考虑了样本数量,样本数量过多时,可有效防止模型精度过高造成的模型复杂度过高。AIC和BIC的原理不同,AIC是从预测角度,选择一个好的模型用来预测,BIC是从拟合角度,选择一个对现有数据拟合最好的模型,从贝叶斯因子的解释来讲就是边际似然最大的那个模型。】

bestglm{bestglm}使用参考文件:bestglm:Best Subset GLM

http://www.doc88.com/p-3347597662869.html文章来源地址https://www.toymoban.com/news/detail-444893.html

到了这里,关于R笔记:全子集回归 | 最优子集筛选变量挑选的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python实现Lasso回归分析(特征筛选、建模预测)

    实现功能: python实现Lasso回归分析(特征筛选、建模预测) 输入结构化数据,含有特征以及相应的标签,采用Lasso回归对特征进行分析筛选,并对数据进行建模预测。 实现代码: 实现效果: # 绘制Lambda与回归系数的关系    # 基于最佳的lambda值建模进行特征分析    # 基于

    2023年04月12日
    浏览(43)
  • 模型构建——使用逻辑回归构建模型,lightGBM进行特征筛选

    新的模型要跟原有方案对比,而且是通过实验证明,特别注意模型和策略不能同时调整。一般实验设计包含以下流程: 问题:业务稳定后,可以去掉人工审核吗? 答 :不可以,一般模型上线后,高分段和低分段的表现较好,但中间段还是需要人工审核;而且即使模型完善后

    2024年02月15日
    浏览(43)
  • 数据结构与算法之美学习笔记:41 | 动态规划理论:一篇文章带你彻底搞懂最优子结构、无后效性和重复子问题

    本节课程思维导图: 今天,我主要讲动态规划的一些理论知识。学完这节内容,可以帮你解决这样几个问题:什么样的问题可以用动态规划解决?解决动态规划问题的一般思考过程是什么样的?贪心、分治、回溯、动态规划这四种算法思想又有什么区别和联系? 什么样的问

    2024年02月02日
    浏览(64)
  • leetcode做题笔记90. 子集 II

    给你一个整数数组  nums  ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集  不能  包含重复的子集。返回的解集中,子集可以按  任意顺序  排列。 本题与78子集问题很像,只需在78代码的基础上考虑数字重复问题即可,对于数字重复可先将数组内

    2024年02月12日
    浏览(31)
  • 代码随想录刷题笔记 DAY 28 | 复原 IP 地址 No.93 | 子集 No.78 | 子集 II No.90

    01. 复原 IP 地址(No. 93) 题目链接 代码随想录题解 1.1 题目 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0 ),整数之间用 \\\'.\\\' 分隔。 例如: \\\"0.1.2.201\\\" 和 \\\"192.168.1.1\\\" 是 有效 IP 地址,但是 \\\"0.011.255.245\\\" 、 \\\"192.168.1.312\\\" 和 \\\"192.168@1.1\\\" 是 无效 I

    2024年02月22日
    浏览(46)
  • 【机器学习】多变量线性回归

    用向量实现的代码,单变量和多变量可以共用 多变量线性回归相当于是单变量的扩展,主要还是按照模型假设、构造代价函数和研究代价函数的最小值这样的思路展开。 与单变量线性回归不同的是,多变量线性回归还可能涉及到 特征缩放的问题 ,主要原因是存在着不同尺度

    2024年02月15日
    浏览(35)
  • 【机器学习】单变量线性回归

    机器学习:从数据中学习,而不依赖于规则下编程的一种算法 Goal: (min_{w,b}(J(w, b))) - 提供一种衡量一组特定参数与训练数据拟合程度的方法 right answer x - y label categories Regression Classification structure || pattern categories Clustering Anomaly detection 异常检测 Dimensionality reduction 降维 预测数

    2024年02月15日
    浏览(31)
  • 单变量线性回归的机器学习代码

    本文为学习吴恩达版本机器学习教程的代码整理,使用的数据集为https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes/blob/f2757f85b99a2b800f4c2e3e9ea967d9e17dfbd8/code/ex1-linear%20regression/ex1data1.txt 将数据集和py代码放到同一目录中,使用Spyder打开运行,代码中整体演示了数据加载处理过程、线性回

    2024年02月05日
    浏览(38)
  • 最优化理论笔记及期末复习(《数值最优化》——高立)

    8.3.1实验内容 利用Matlab编程,实现采用简单Armijo非精确线搜索求步长的三种方法:负梯度法、BFGS法及FR共轭梯度法,并求解如下无约束优化问题: m i n f ( x ) = 10 ( x 1 3 − x 2 ) 2 + ( x 1 − 1 ) 2 min f(x) =10(x_1^3-x_2)^2+(x_1-1)^2 m i n f ( x ) = 1 0 ( x 1 3 ​ − x 2 ​ ) 2 + ( x 1 ​ − 1 ) 2 通过

    2024年02月02日
    浏览(41)
  • 机器学习笔记之最优化理论与方法(一)最优化问题概述

    从本节开始,将对 最优化理论与方法 进行简单认识。 无论是 最优化理论 还是 最优化方法 ,讨论的 对象 都是 最优化问题 。 关于 最优化问题 的一种简单描述:最优化问题本质上属于 决策问题 。 例如 路径选择 问题:确定达到目的地最佳路径的计量标准 。其中问题的 目

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包