R语言统计分析——回归模型深层次分析

news2024/9/25 15:28:06

参考资料:R语言实战【第2版】

        本文主要讨论回归模型的泛化能力和变量相对重要性的方法。

1、交叉验证

        从定义上看,回归方法就是从一堆数据中获取最优模型参数。对于OLS(普通最小二乘)回归,通过使得预测误差(残差)平方和最小和对响应变量的解释度(R平方)最大,可获得模型参数。由于等式只是最优化已给出的数据,所以在新数据集上表现并不一定好。

        通过交叉验证法,我们可以评价回归方程的泛化能力。所谓交叉验证,就是将一定比例的数据挑选出来作为驯良样本,另外的样本作为保留样本,先在训练样本上获取回归方程,然后在保留样本上做预测。由于保留样本不涉及模型参数的选择,该样本可获得比新数据更为精确的估计。

        在k重交叉验证中,样本被分为k个子样本,轮流将k-1个子样本组合作为训练集,另外1个子样本作为保留集。这样会获得k个预测方程,记录k个保留样本的预测表现结果,然后求其平均值。

        bootstrap包中的crossval()函数可以实现k重交叉验证。如下:

shrinkage<-function(fit,k=10){
  require(bootstrap)
  theta.fit<-function(x,y){lsfit(x,y)}
  theta.predict<-function(fit,x){cbind(1,x)%*%fit$coef}
  x<-fit$model[,2:ncol(fit$model)]
  y<-fit$model[,1]
  
  results<-crossval(x,y,theta.fit,theta.predict,ngroup=k)
  r2<-cor(y,fit$fitted.values)^2
  r2cv<-cor(y,results$cv.fit)^2
  cat("Original R-square=",r2,"\n")
  cat(k,"Fold Cross-Validated R-square=",r2cv,"\n")
  cat("Change=",r2-r2cv,"\n")
}
states<-as.data.frame(state.x77[,c("Murder","Population","Illiteracy",
                                   "Income","Frost")])
fit<-lm(Murder~Population+Income+Illiteracy+Frost,data=states)
shrinkage(fit)

        有结果可知,基于初始用样本的R平法(0.567)过于乐观,对新数据更好的方差解释率估计是交叉验证后的R平方(0.476)。(注意,由于观测被随机分配到k个群组中,因此每次运行shrinkage()函数,得到的结果都会有些许不同

2、相对重要性

        我们根据线性回归模型做出来预测方程后,还有一个问题需要关注:哪些变量对于我们的预测来说更为重要?

        若预测变量不相关,过程就像对简单得多,我们可以根据预测变量与响应变量的相关系数来进行排序。但大部分情况中,预测变量之间有一定相关性,这就使得评价变得复杂很多。

        评价预测变量的相对重要性最简单的方法就是比较标准化的回归系数,它表示当其他预测变量不变时,该预测变量一个标准差的变化可引起的响应变量的预期变化(以标准差单位度量)。在进行回归分析前,可用scale()函数将数据标准化为均值为0、标准差为1的数据集,这样用R回归即可获得标准化的回归系数。(注意,scale()函数返回的是一个矩阵,而lm()函数要求的是一个数据框,我们需要一个中间步骤来转换一下。)如下:

states<-as.data.frame(state.x77[,c("Murder","Population","Illiteracy",
                                   "Income","Frost")])
# 对数据进行标准化
zstates<-as.data.frame(scale(states))
# 查看标准化后的数据
head(zstates)
# 对标准化后的数据进行拟合
zfit<-lm(Murder~Population+Income+Illiteracy+Frost,
         data=zstates)
# 查看回归系数
coef(zfit)

        有结果可知:当其他以因素不变时,Illiteracy一个标准差的变化将增加0.68个标准差的谋杀率。根据标准化的回归系数,我们可以认为Illiteracy是最重要的预测变量。

        还有其他方法可定量分析预测变量的相对重要性。比如,可以将相对重要性看作每个预测变量(本身或与其他预测变量组合)对R平方的贡献。相对权重是对所有可能子模型添加一个预测变量引起的R平方平均增加量的一个近似值。如下:

# 编写相对权重函数
relweights<-function(fit,...){
  R <- cor(fit$model)
  nvar <- ncol(R)
  rxx <- R[2:nvar, 2:nvar]
  rxy <- R[2:nvar, 1]
  svd <- eigen(rxx)
  evec <- svd$vectors
  ev <- svd$values
  delta <- diag(sqrt(ev))
  lambda <- evec %*% delta %*% t(evec)
  lambdasq <- lambda^2
  beta <- solve(lambda) %*% rxy
  rsquare <- colSums(beta ^ 2)
  rawwgt <- lambdasq %*% beta ^ 2
  import <- (rawwgt / rsquare) * 100
  import <- as.data.frame(import)
  row.names(import) <- names(fit$model[2:nvar])
  names(import) <- "Weights"
  dotchart(import$Weights, labels=row.names(import),
           xlab="% of R-Square", pch=19,
           main="Relative Importance of Predictor Variables",
           sub=paste("Total R-Square=", round(rsquare, digits=3)),
           ...)
  return(import)
}
# 应用相对权重函数
states<-as.data.frame(state.x77[,c("Murder","Population","Illiteracy",
                                   "Income","Frost")])
fit<-lm(Murder~Population+Illiteracy+Income+Frost,
          data=states)
relweights(fit,col="blue")

        由上面结果可知:Illiteracy解释了59%的R平方,而Frost解释了20.79%,以此类推。根据相对权重法,Illiteracy有最大的相对重要性,其他变量相对重要性从大到小分别是:Frost、Population和Income。

        相对权重函数也给出来个变量相对权重的点图,可以更加直观的看到哪个变量更加重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【书生大模型实战营(暑假场)】进阶任务六 MindSearch CPU-only 版部署

进阶任务六 MindSearch CPU-only 版部署 任务文档GitHub CodeSpace硅基流动HuggingFace Space 任务&#xff1a; MindSearch 部署到Github Codespace 和 Hugging Face Space 笔者部署在 HuggingFace 的 MindSearch 模型链接为&#xff1a;ccdgyro/MindSearch 1 开发机创建和环…

重塑视频监控体验:WebRTC技术如何赋能智慧工厂视频高效管理场景

视频汇聚EasyCVR视频监控平台&#xff0c;作为一款智能视频监控综合管理平台&#xff0c;凭借其强大的视频融合汇聚能力和灵活的视频能力&#xff0c;在各行各业的应用中发挥着越来越重要的作用。 EasyCVR平台不仅兼容多种主流标准协议及私有协议/SDK的接入&#xff08;如&…

汽车线束品牌服务商推荐-力可欣:致力于汽车连接线束和汽车连接器的开发、生产和应用

汽车线束品牌服务商推荐-力可欣&#xff1a;致力于汽车连接线束和汽车连接器的开发、生产和应用

医院建筑的电气设计——保障医疗质量与安全的坚固基石

医疗资源与水平的提升成为了衡量民生福祉的重要标尺。随着一批批新建医院及既有医院的华丽蜕变&#xff0c;从社区医院到综合医院&#xff0c;再到医疗城、医疗集聚区的崛起&#xff0c;不仅彰显了政府对民生健康的深切关怀&#xff0c;也预示着我国医疗体系正迈向智能化、高效…

C++初学(17)

17.1、字符函数库cctype C有一个与字符相关的、非常方便的函数软件包&#xff0c;它可以简化如确定字符是否为大写字母、数字或标点符号等工作。这些函数的原型是在头文件cctype中定义的。如果ch是一个字母&#xff0c;则isalpha(ch)函数返回一个非零值&#xff0c;否则返回0。…

关于zotero无法识别拖入的pdf和caj的题录信息

一、首先要安装好茉莉花插件 1、点击链接&#xff0c;进入Zotero 插件商店&#xff0c; Zotero 插件商店 | Zotero 中文社区 (zotero-chinese.com) 搜索&#xff1a;Jasminum&#xff0c;选择好版本&#xff0c;点击下载 2、 下载好后&#xff0c;点击“工具”&#xff0c;…

兔子序列(c语言)

1.//描述 //兔子发现了一个数字序列&#xff0c;于是开始研究这个序列。兔子觉得一个序列应该需要有一个命名&#xff0c; // 命名应该要与这个序列有关。由于兔子十分讨厌完全平方数&#xff0c; // 所以兔子开创了一个新的命名方式&#xff1a;这个序列中最大的不是完全平方数…

kubectl陈述式资源管理

目录 概念 kubectl的基础命令 *每天常用的查看集群的基本信息 deployment的部署方式 deployment 的特点 基于deployment创建pod 手动缩容 service的类型以及工作原理 创建service service的类型 修改service的类型为nodeport **nodeport实验&#xff1a;对外暴露端…

数据结构(Java)实现:栈和队列

文章目录 1. 栈的模拟实现1.1 普通栈的模拟实现1.2 泛型栈的模拟实现 2. 栈的介绍3. 栈的使用4. 栈的应用场景4.1 改变元素的序列4.2 将递归转换为循环4.3 使用栈解题 5. 栈的链表实现6. 队列概念7. 队列的使用8. 模拟队列的实现8.1 链式队列8.2 顺序队列 9. 双端队列 1. 栈的模…

C++和OpenGL实现3D游戏编程【连载6】——不规则图形的纹理贴图

C++和OpenGL实现3D游戏编程【连载6】——不规则图形的纹理贴图 1、本节实现的内容 上一节我们讨论了纹理贴图的相关基础操作,但上一节的纹理贴图操作基本上都是规则图形,包括圆形和球形虽然复杂一点,但是它也是规则的。这一节课我们要讨论一下,怎么在不规则图形上纹理贴图…

​polarctf靶场[web]upload1​

[web]upload1 考点&#xff1a;文件上传漏洞 不信邪&#xff0c;先上传php&#xff0c;发现被拦截 在上传jpg和png图片&#xff0c;发现也被拦截 所以先拦截抓包&#xff0c;上传个有一句话木马的png图片 将文件后缀改为php&#xff0c;先在重发器发送&#xff0c;发现上传成…

MATLAB 计算凹凸多边形的面积(85)

MATLAB 计算凹凸多边形的面积(84) 一、算法介绍二、算法实现1.代码一、算法介绍 计算凹凸多边形的面积,并输出计算结果,可视化 二、算法实现 1.代码 % 设置多边形的顶点坐标 % 这里以一个五边形为例 x = [1, 3, 4

深入理解DPO(Direct Preference Optimization)算法

目录 1. 什么是DPO&#xff1f;2. Bradley-Terry模型2.1 奖励模型的训练 3. 从PPO到DPO4. DPO的简单实现5. 梯度分析Ref 1. 什么是DPO&#xff1f; 直接偏好优化&#xff08;Direct Preference Optimization, DPO&#xff09;是一种不需要强化学习的对齐算法。由于去除了复杂的…

数分基础(03-2)客户特征分析-简单可视化

文章目录 简单可视化1. 并排柱状图2. 堆叠柱状图2.1 画图2.2 对数刻度 简单可视化 接上一篇 数分基础&#xff08;03-1&#xff09;客户特征分析&#xff0c;运行本篇代码之前&#xff0c;先运行上一篇的代码。 为了能够对比和总览三个客户群体Cluster 0 - Cluster 1 的特征&…

冯·诺依曼计算机:现代计算机的“DNA”

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

XSS LABS - Level 16 过关思路

关注这个靶场的其他相关笔记&#xff1a;XSS - LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 进入靶场&#xff0c;右击页面&#xff0c;查看网页源码&#xff0c;搜索关键词 test 查看页面回显点&#xff1a; 页面只有一个回显点&#xff0c;跟前面关卡不同&am…

Python实时聊天室架构与API实战应用

尊敬的各位读者&#xff0c;欢迎参与本次共享研讨项目——利用Python构建实时聊天室。在本项目中&#xff0c;我们将引进一款前沿工具——发布订阅频道API&#xff0c;以实现聊天室内的实时交互功能。 在当今信息泛滥的社会环境下&#xff0c;实时交流已成为人们日常生活中不可…

探秘半枝莲:花语寓意深解、传奇传说追溯与卓越功效展现

在大自然的神秘宝藏中&#xff0c;有一种看似平凡却蕴含着无尽魅力的植物——半枝莲。它那娇小而鲜艳的花朵&#xff0c;仿佛是大自然精心雕琢的艺术品&#xff0c;散发着独特的魅力。当我们深入探寻半枝莲的世界时&#xff0c;会惊喜地发现它不仅有着迷人的花语寓意和传奇的传…

ES 根据条件删除文档

随着业务量的增多&#xff0c;es中数据越来越多&#xff0c;但有些数据其实后期并无业务用途&#xff0c;可直接做物理删除&#xff0c;程序里做兼容&#xff0c;但历史每个月的索引里的数据需要处理这部分冗余数据。 es提供_delete_by_query 根据查询条件进行删除的操作&…

ZooKeeper 实战(六) - 分布式ID实现方案

ZooKeeper 实战(六) - 生成分布式ID 文章目录 ZooKeeper 实战(六) - 生成分布式ID1.何为分布式ID2.分布式ID方案3.创建ZooKeeper节点4.获取序列ID5.处理序列ID6.使用分布式ID7.完整代码8.功能优化8.1.问题思考&#xff1f;1.容量问题2.并发问题3.内存问题 8.2.解决并发问题8.3.…