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

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标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py