R语言统计分析——回归分析的改进措施

2024-08-23 05:36

本文主要是介绍R语言统计分析——回归分析的改进措施,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

        如果在回归诊断中发现了问题,我们该如何做?有四种方法可以处理违背回归假设的问题:

①删除观测点;

②变量变换;

③添加或删除变量;

④使用其他回归方法。

1、删除观测点

        删除离群点通常可以提高数据集对正态假设的拟合度,而强影响点会干扰结果,通常也会被删除。删除最大的离群点或强影响点后,模型需要重新你和。若离群点或强影响点仍然存在,重复以上过程知道获得比较满意的拟合。

        对于删除观测点,我们们要慎之又慎。如果是因为数据记录错误,或是没有遵守规程,或是受试对象误解了指导说明,这种情况下可以判断为离群点,删除它们是十分合理的

        不过在其他情况下,所有收集数据中的异常点可能是最有趣的东西。发掘为何该观测点不同于其他店,有助于我们更深刻地理解研究组,或者发现其他我们可能没有想过的问题。

2、变量变换

        当模型不符合正态性、线性或者同方差假设时,一个或多个变量的变换通常可以改善或调整模型效果。变换多用Y^\lambda代替Y,λ的常见值和解释如下:

λ-2-1-0.500.512
变换1/Y^21/Y1/\sqrt{Y}log(Y)\sqrt{Y}Y^2

        若Y是比例数据,通常使用logit变换:ln(Y/(1-Y))

        当模型违反正态假设时,通常可以对响应变量尝试某种变换。car包中的powerTransform()函数通过λ的最大似然估计来正态化变量X^\lambda。如下:

# 加载car包
library(car)
# 获取数据
states<-as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])
# 拟合多元线性模型
fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
# 查看正态变换建议
summary(powerTransform(states$Murder))

        我们可以用murder^0.6来正态化变量murder。由于0.6很接近0.5,我们可以尝试用平方根变换来提高模型正态性的符合程度。但本例中,λ=1的假设是无法拒绝的(p=0.145),因此没有足够的证据表明本例需要进行变量变换。

        当违反了线性假设时,对预测变量进行变换常常会比较有用。car包中的boxTidwell()函数通过获得预测变量幂数的最大似然估计来改善线性关系。如下:

# 加载car包
library(car)
boxTidwell(Murder~Population+Illiteracy,data=states)

        结果显示,使用变换Population^0.87和Illiteracy^1.36能够大大改善线性关系。但是对于这个量变量的计分检验的统计结果均不显著Population( p=0.75)和Illiteracy( p=0.54),说明不需要进行变换。

3、增删变量

        改变模型的变量会影响模型的拟合度。有时,添加一个重要变量可以解决我们许多问题,删除一个冗余变量也能达到同样的效果。

        删除变量在处理多重共线性时是一种非常重要的方法。如果我们仅仅是做预测,那么多重共线性并不构成问题。但如果还要对每个预测变量进行解释,那么就必须解决这个问题。最常见的方法是删除某个存在多重共线性的变量。另外一个可用的方法是岭回归

4、尝试其他方法

处理多重共线性的一种方法是拟合一种不同类型的模型(本例中是岭回归)。
如果存在离群点和/或强影响点,可以使用稳健回归模型替代OLS回归。
如果违背了正态性假设,可以使用非参数回归模型。
如果存在显著的非线性,能尝试非线性回归模型。
如果违背了误差独立性假设,还能用那些专门研究误差结构的模型,比如时间序列模型或者多层
次回归模型。
最后,我们还能转向广泛应用的广义线性模型,它能适用于许多OLS回归假设不成立的情况。

这篇关于R语言统计分析——回归分析的改进措施的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098494

相关文章

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java