酸雨降水问题——多元回归分析

2024-04-16 07:12

本文主要是介绍酸雨降水问题——多元回归分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

题目如下

数据集如下

解题方法

regress 函数

代码实现

得出结果


题目如下

        酸雨是降水中各种离子综合作用的结果。实际检测表明:城市降水pH值主要 受酸性离子[SO]、[NO]、[Ca²+]、[NH]影响。下表列出了我国部分城市降水 中[SO]、[NO]、[Ca²⁺]、[NH]的浓度和pH值数据。以[SO]、[NO]、 [Ca²+]、[NH]和组合因子([Ca²+]+[NH]/([SO]+[NO]))为自变量,分别 记为工,2,3,4,25。pH值为因变量y。下表中给出了北京等15个城市的城市降 水pH值和相应影响因素的一组观测值。试对此问题进行回归分析。

数据集如下

城市x1x2x3x4x5pHy
北京151.8162.8154.539.51.626.29
长春253.661.3156.521.21.796.71
锦州340.8123.8259.249.41.516.32
烟台289.139.1182.522.81.66.95
平顶山107.7138.3152.30.41.616.29
合肥110.3117.3141.931.81.314.73
苏州125.393.6200.214.41.024.63
上海104.375.8153.412.61.084.85
杭州59.968.2112.313.51.024.84
南宁26.627.761.64.90.824.82
桂林67.250107.219.70.924.83
重庆127.8151.1326.627.90.794.21
贵阳199.6174.3405.227.90.864.23
马鞍山12373.7139.215.11.275.33
广州175.1141.1254.933.31.14.39

解题方法

regress 函数

        在MATLAB中,regress函数被用于进行多元线性回归。它能够估计出回归系数并提供置信区间,还能输出残差以及其他有用的统计信息。这个函数特别适合简单的线性回归分析,当你想要快速地得到回归系数和它们的置信区间时。

        以下是regress函数的基本用法:

b = regress(Y,X); % 基本回归,Y 是因变量,X 是自变量
[b,bint,r,rint,stats] = regress(Y,X,alpha); % 给出详细的输出

这里的输入参数包含:

  • Y:因变量,是一个列向量。
  • X:自变量,包括一个常数项用于截距。X 是一个矩阵,每一列是一个自变量,行代表观测值。
  • alpha:显著性水平,用于定义置信区间(通常是0.05表示95%置信区间)。

输出参数说明:

  • b:回归系数的估计值,是一个列向量。
  • bint:系数的置信区间,是一个与 b 相同大小的矩阵,每行给出一个系数的置信区间。
  • r:残差,是一个列向量,即实际观测值和模型预测值之间的差。
  • rint:残差的置信区间,格式与 bint 相同。
  • stats:一个包含四个元素的向量:
    • stats(1) R² 统计量(拟合优度)
    • stats(2) F统计量
    • stats(3) F统计量的 p值
    • stats(4) 误差的方差估计

通过检查这些输出,你可以对模型有一个总体的评估。具体来说:

  • R² 显示了模型的解释能力,描述自变量解释因变量变异的比例。
  • F统计量和它的p值(stats(2)stats(3))检验整个模型是否显著。
  • 回归系数如果显著非零,相应的自变量对因变量有影响。
  • 系数置信区间(bint)有助于理解参数估计的精确度和可靠性。
  • 残差(r)和残差置信区间(rint)提供模型适配度的直观信息和观测值可能的误差范围。

        在使用regress函数之前,重要的是要确保数据满足执行线性回归的条件(线性关系、误差项的独立性和正态性、同方差性等)。此外,若你发现数据具有多重共线性等问题时,可能需要使用其他处理方法,例如岭回归或主成分

代码实现

        使用 regress 函数来做线性回归分析,您需要先准备好您的输入矩阵 X(自变量,包含一个常数项以适应截距项)和向量 Y (因变量)。然后,您将能够执行回归分析,并通过分析输出得到关于模型的统计数据。

        由于题目提供的数据已经是结构化的,所以可以直接转换成MATLAB可以处理的格式。

        以下是执行多元线性回归并分析结果的MATLAB代码:

% 首先定义给出的数据
data = [151.8	162.8	154.5	39.5	1.62	6.29;253.6	61.3	156.5	21.2	1.79	6.71;340.8	123.8	259.2	49.4	1.51	6.32;289.1	39.1	182.5	22.8	1.6	    6.95;107.7	138.3	152.3	0.4	    1.61	6.29;110.3	117.3	141.9	31.8	1.31	4.73;125.3	93.6	200.2	14.4	1.02	4.63;104.3	75.8	153.4	12.6	1.08	4.85;59.9	68.2	112.3	13.5	1.02	4.84;26.6	27.7	61.6	4.9	    0.82	4.82;67.2	50	    107.2	19.7	0.92	4.83;127.8	151.1	326.6	27.9	0.79	4.21;199.6	174.3	405.2	27.9	0.86	4.23;123	    73.7	139.2	15.1	1.27	5.33;175.1	141.1	254.9	33.3	1.1	    4.39];% 分离自变量X和因变量Y
X = data(:,1:5);
Y = data(:,6);% 为自变量矩阵X添加常数项列 (必须为1)
X = [ones(size(X,1),1) X];% 使用 regress函数计算线性回归的参数beta
% regress函数中的 alpha 是用于置信区间的显著性水平,例如 0.05
alpha = 0.05;
[b,bint,r,rint,stats] = regress(Y,X,alpha);% 输出回归系数和相关统计信息
disp('回归系数 b :');
disp(b);disp('系数的95%置信区间 bint:');
disp(bint);disp('残差 r:');
disp(r);disp('残差的置信区间 rint:');
disp(rint);disp('统计信息 stats (R方, F统计量, p值,误差方差):');
disp(stats);% 检查残差图,确保没有明显的模式
% 残差图应显示随机分布的点 - 无明显模式即表示模型适用 
figure;
scatter(Y,r,'filled');
title('残差图');
xlabel('观测值');
ylabel('残差');

        在代码执行结束后,b 变量包含了估算的回归系数,bint 给出了这些估算系数的95%置信区间,r 包含残差,rint 给出了残差的置信区间,最后输出的stats包含一些关键的统计测度,如R方值、F统计量、p值和误差方差,这些可以用来评估模型的拟合情况。

        具体地,R方值越接近1表示模型的拟合效果越好;F统计量和它的p值用来判断整个回归模型是否显著;每个单独回归系数的p值也可以在输出的bint中找到,如果p值小于0.05(或其他设定的显著性水平),则认为该系数在统计上是显著的。

        这个MATLAB代码可以直接用于题目中提供的数据,如果要计算其他的数据,只需要把data变量中的值替换为实际数据即可。以上展示的残差图用于诊断模型,理想情况下残差应随机分布,没有明显的模式。如果残差图显示出结构性模式,则表明模型中可能有误差的系统部分未被解释,这表明模型可能需要进一步研究与改进。

得出结果

回归系数 b :
    3.5150
    0.0067
    0.0017
   -0.0043
   -0.0172
    1.4738

系数的95%置信区间 bint:
    0.8519    6.1782
   -0.0071    0.0204
   -0.0163    0.0198
   -0.0174    0.0087
   -0.0559    0.0215
   -1.1954    4.1430

残差 r:
    0.4480
   -0.1949
    0.0709
    0.2667
    0.1163
   -0.4879
   -0.2663
   -0.1985
    0.0260
    0.2237
    0.2302
    0.3195
    0.0593
   -0.1384
   -0.4745

残差的置信区间 rint:
    0.0128    0.8831
   -0.7786    0.3888
   -0.3188    0.4606
   -0.3169    0.8502
   -0.2351    0.4676
   -1.0813    0.1055
   -1.0314    0.4989
   -0.9958    0.5987
   -0.7660    0.8180
   -0.3745    0.8219
   -0.4736    0.9341
   -0.2839    0.9230
   -0.5191    0.6376
   -0.9438    0.6669
   -1.1557    0.2067

统计信息 stats (R方, F统计量, p值,误差方差):
    0.9097   18.1243    0.0002    0.1256
 

        那么有了这些结果就可以得到我们最终的答案啦~~~

 

这篇关于酸雨降水问题——多元回归分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

springboot3.4和mybatis plus的版本问题的解决

《springboot3.4和mybatisplus的版本问题的解决》本文主要介绍了springboot3.4和mybatisplus的版本问题的解决,主要由于SpringBoot3.4与MyBat... 报错1:spring-boot-starter/3.4.0/spring-boot-starter-

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

关于Nginx跨域问题及解决方案(CORS)

《关于Nginx跨域问题及解决方案(CORS)》文章主要介绍了跨域资源共享(CORS)机制及其在现代Web开发中的重要性,通过Nginx,可以简单地解决跨域问题,适合新手学习和应用,文章详细讲解了CO... 目录一、概述二、什么是 CORS?三、常见的跨域场景四、Nginx 如何解决 CORS 问题?五、基

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss