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

相关文章

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

C++ scoped_ptr 和 unique_ptr对比分析

《C++scoped_ptr和unique_ptr对比分析》本文介绍了C++中的`scoped_ptr`和`unique_ptr`,详细比较了它们的特性、使用场景以及现代C++推荐的使用`uni... 目录1. scoped_ptr基本特性主要特点2. unique_ptr基本用法3. 主要区别对比4. u

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

Java多种文件复制方式以及效率对比分析

《Java多种文件复制方式以及效率对比分析》本文总结了Java复制文件的多种方式,包括传统的字节流、字符流、NIO系列、第三方包中的FileUtils等,并提供了不同方式的效率比较,同时,还介绍了遍历... 目录1 背景2 概述3 遍历3.1listFiles()3.2list()3.3org.codeha

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

Go语言中如何进行数据库查询操作

《Go语言中如何进行数据库查询操作》在Go语言中,与数据库交互通常通过使用数据库驱动来实现,Go语言支持多种数据库,如MySQL、PostgreSQL、SQLite等,每种数据库都有其对应的官方或第三... 查询函数QueryRow和Query详细对比特性QueryRowQuery返回值数量1个:*sql

GO语言中gox交叉编译的实现

《GO语言中gox交叉编译的实现》本文主要介绍了GO语言中gox交叉编译的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、安装二、使用三、遇到的问题1、开启CGO2、修改环境变量最近在工作中使用GO语言进行编码开发,因