matlab中多元线性回归regress函数精确剖析(附实例代码)

article/2025/9/26 3:51:57

matlab中多元线性回归regress函数精确剖析(附实例代码)

目录

前言

一、何为regress?

二、regress函数中的参数

 三、实例分析

总结


前言

        regress函数功能十分强大,它可以用来做多元线性回归分析,它不仅能得出线性回归函数中各个系数,还会返回一系列有意义的统计参数,有助于我们对回归函数的分析。本次介绍regress函数的基本功能然后配置以具体实例展示regress函数如何使用。

提示:以下是本篇文章正文内容,均为作者本人原创,写文章实属不易,希望各位在转载时附上本文链接。

一、何为regress?

        regress函数用来做多元线性回归(Multiple linear regression)。简单点说,就比如说现在给了几组关于y、x1、x2数据,他们之间满足某种关系例如y=ax_{1}^{2}+bx_{1}+cx_{2}+d,我们就可以用这个函数借助已知数据求出a、b、c、d的值。 

二、regress函数中的参数

        regress函数的使用格式如下:

[b,bint,r,rint,stats] = regress(y,X,alpha);

b------ returns a vector b of coefficient estimates for a multiple linear regression of the responses in vector y on the predictors in matrix x. The matrix x must include a column of ones. b是一个列向量返回的是在xy这组数据下得到的多元线性回归的系数估计向量b,矩阵x必须包含一列1。至于x为什么需要包含一列1见下面对x的分析

bint------returns a matrix bint of 95% confidence intervals for the coefficient estimates. 返回系数估计值的95%置信区间的矩阵绑定。bint是一个多行两列的矩阵,返回系数估计值的95%置信区间。对于置信区间的理解简单点说就是可信度,学过概率论就会明白何为置信区间。bint的每一行有两个值,可看成一个区间的上下界,它的每一行这个区间就是参数b中每一行的那个参数的95%的置信区间。

r------returns an additional vector r of residuals. r是residual的简写,就是残差的意思。r返回一个列向量,r中的每一个值就是真实的数据y减去预测的y值得到的,称之为残差。

rint------returns a matrix rint of intervals that can be used to diagnose outliers. 返回的也是一个多行两列的矩阵,它的理解可同bint,只不过此时判断的是r的可信区间。

stats------returns a vector stats that contains the R^{2} statistic, the F-statistic and its p-value, and an estimate of the error variance. stats翻译成中文就是‘统计’的意思,返回的是一个包含各种统计量的行向量,包含R^{2}统计量、F统计量观测值及检验的p值和误差方差估计值的一个行向量。R^{2}越接近1,回归方程越显著;F>F_{1-\alpha }(k,n-k-1)时拒绝H_{0},F越大,回归方程越显著;p<\alpha时拒绝H_{0}。此处又涉及到概率论的假设检验的知识,学过概率论就会有所了解。这里我们可以只重点关注R^{2}的值,也就是相关系数的值,它可以帮助我们判断回归方程的优劣。

y------是一个列向量,是已知数据。

x------是一个矩阵,它的第一列全为1,有没有全为1的这一列决定回归方程是否含有拟合的常数参数,也就是y=ax_{1}^{2}+bx_{1}+cx_{2}+d中的d这个参数是否有被拟合出来。在程序中对应于全1的那一列一般表示为:ones(size(y)) ,其中x1和x2是多元线性回归方程中的自变量,是已知数据。如下:

x=[ones(size(y)),x1,x2];

alpha------显著性水平,缺省时默认为0.05。

 三、实例分析

 这里我们拟合一个方程Q=aK^{\alpha }L^{\beta },Q,K,L是已知数据,K,L视为自变量,Q视为因变量,需要求得是a,\alpha\beta的值。显然它不是一个线性方程,那么我们就对它两边同时取对数,得到:LnQ=Lna+\alpha LnK+\beta LnL,此时将LnQ看成一个整体,作为因变量,LnK和LnL看成两个整体,作为自变量,那么就变成线性方程了。

实例用到的程序如下:

Q=[1.05 1.18 1.29 1.30 1.30 1.42 1.50 1.52 1.46 1.60 1.69 1.81 1.93 1.95 2.01 2.00 2.09 1.96 2.20 2.12 2.16 2.08 2.24 2.56 2.34 2.45 2.58]';
y=log(Q);
K=[1.04 1.06 1.16 1.22 1.27 1.37 1.44 1.53 1.57 2.05 2.51 2.63 2.74 2.82 3.24 3.24 3.61 4.10 4.36 4.77 4.75 4.54 4.54 4.58 4.58 4.58 4.54]';
x1=log(K);
L=[1.05 1.08 1.18 1.22 1.17 1.30 1.39 1.47 1.31 1.43 1.58 1.59 1.66 1.68 1.65 1.62 1.86 1.93 1.96 1.95 1.90 1.58 1.67 1.82 1.60 1.61 1.64]';
x2=log(L);
x=[ones(size(y)),x1,x2];
[b,bint,r,rint,stats] = regress(y,x);
a=exp(b(1));alpha=b(2);beta=b(3);
R=stats(1);
% % %Plot the data and the model.% % %
scatter3(x1,x2,y,'filled'); %scatter3函数用于画三维散点图
hold on;
x1fit = min(x1):0.05:max(x1);
x2fit = min(x2):0.05:max(x2);
[X1FIT,X2FIT] = meshgrid(x1fit,x2fit);%meshgrid用于画曲面图
YFIT = b(1) + b(2)*X1FIT + b(3)*X2FIT ;
mesh(X1FIT,X2FIT,YFIT);
title("LnQ=Lna+\alphaLnK+\betaLnL");
xlabel('LnK');
ylabel('LnL');
zlabel('LnQ');
view(50,10);
hold off;
% % %Plot the data and the model.% % %
figure(2);
x1=exp(x1);
x2=exp(x2);
y=exp(y);
scatter3(x1,x2,y,'filled');
hold on;
x1fit = min(x1):0.05:max(x1);
x2fit = min(x2):0.05:max(x2);
[X1FIT,X2FIT] = meshgrid(x1fit,x2fit);
YFIT = a*(X1FIT.^alpha).*(X2FIT.^beta);
mesh(X1FIT,X2FIT,YFIT);
title("Q=aK^{\alpha}L^{\beta}");
xlabel('K');
ylabel('L');
zlabel('Q');
view(50,20);%view函数用于调整我们看三维图形的视角
hold off;

运行完程序regress函数就会返回给我们各种参数的值。例如向量b

 这三个值分别是Lna、\alpha\beta的值。

再如矩阵bint:

 每一行的两个数就是前面b向量的置信区间,也就是上面三行分别为Lna、\alpha\beta的95%的置信区间。

再如列向量r

 每一行的数值等于真实的数据LnQ减去拟合的数据LnQ,称之为残差。

再如矩阵rint:

 每一行的两个数视为一个区间,理解为与其相对应的残差的可信区间。

再如行向量stats:

 只需关注R^{2}的值即可,越接近于1越好。

运行完程序还会得到两个图,帮助我们直观的感受到拟合的效果,两个图本质上是一样的,区别一个取了对数,一个没取对数,具体情况见下面图当中的title。

上面的实例拟合的均只含有自变量的一次项,那如果含有二次项在程序中应该怎么写了,例如y=ax_{1}^{2}+bx_{2}^{2}+cx_{1}x_{2}+dx_{1}+ex_{2}+f,只需修改X即可,具体参考下面:

x=[ones(size(y)),x1.^2,x2.^2,x1.*x2,x1,x2];
[b,bint,r,rint,stats] = regress(y,x);

总结

        以上就是本次要分享的内容,本文详细介绍了regress函数的使用,学会了就赶紧动起手来实操吧。


http://chatgpt.dhexx.cn/article/wIvXY6m0.shtml

相关文章

Ubuntu 下安装 Yar 扩展遇到的问题以及解决方案

本文为原创&#xff0c;转载请注明出处。 昨天在ubuntu上安装完yar之后发现yar还是不能用&#xff0c;感觉有些不对劲。 通过在微博上请教 Laruence 大神和公司的大大之后&#xff0c;问题解决了&#xff0c;下面就来分享这一成果。 如果还没有做好安装工作&#xff0c;请看…

最新yar扩展安装和使用

先说windows客户端的安装 yar扩展下载地址&#xff1a;https://pecl.php.net/package/yar 下载对应的版本 点击DLL可以查看支持的PHP版本,我本地是phpstudy搭建的环境,php版本是7.19.nts 所以我下载了7.1 Non Thread Safe (NTS) x64 解压后里面的php_yar.dll和php_yar.pdb文件…

yarn使用简介

yarn简介&#xff1a; yarn是facebook发布的一款取代npm的包管理工具。 yarn的特点&#xff1a; 速度超快。Yarn 缓存了每个下载过的包&#xff0c;所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率&#xff0c;因此安装速度更快。超级安全。 在执行代码之前…

yar安装使用

1.安装 pecl install yar vim /etc/php.ini 加上extensionyar.so 查看支持的配置&#xff1a; php --re yar - Dependencies { Dependency [ json (Required) ] } - INI { Entry [ yar.packager <PERDIR> ] //打包协议 Current php } …

phpstudy安装yar扩展

最近因为项目需要yar扩展&#xff0c;本地开发环境使用phpstudy搭建&#xff0c;yar不是phpstudy的常用扩展&#xff0c;无法在扩展列表里面找到&#xff0c;所以需要自己安装。 0x01 Yar(Yet Another RPC framework for PHP) 是一个轻量级, 高效的RPC框架, 它提供了一种简单…

Yarn基本介绍(一)

1、简介 Yarn是Hadoop的分布式资源调度平台&#xff0c;负责为集群的运算提供运算资源。如果把分布式计算和单个计算机对应的话&#xff0c;HDFS就相当于计算机的文件系统&#xff0c;Yarn就是计算机的操作系统&#xff0c;MapReduce就是计算机上的应用程序。 2、组成部分 Y…

使用yaf+yar实现基于http的rpc服务

什么是RPC RPC&#xff0c;全称是Remote Procedure Call&#xff0c;远程服务调用&#xff0c;是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的协议。简单一点来理解就是网络上的一个节点请求另一个节点提供的服务。 什么是YAF Yaf&#x…

yaf yar微服务/hprose微服务 镜像初始化 —— k8s从入门到高并发系列教程 (四)

前面的教程已经在docker镜像 软件 层面上初步安装了企业常用的插件&#xff0c;但目前还没有写任何代码。本教程带你初始化yaf框架&#xff0c;并基于yar框架和hprose跨语言微服务框架打包两个微服务代码&#xff0c;在容器间调用。 yaf是一个用c语言写的&#xff0c;用于php项…

YAR 并行RPC框架研究

前几天,部门召开了PHP技术峰会 学习会议,大家分别对这次会议的PPT 做了简单的介绍, 其中提到了 鸟哥【惠新辰】的一篇PPT《微博LAMP 演变》,如果谁有需要可以去谷歌搜,或者去 http://www.laruence.com/2013/08/15/2913.html 他的博客去看一下,我就不提供下载链接了。 …

Yarn概述

Yarn Yarn是Hadoop的分布式资源调度平台&#xff0c;负责为集群的运算提供运算资源。如果把分布式计算机和单个计算机相对应的话&#xff0c;HDFS就相当于计算机的文件系统&#xff0c;Yarn就是计算机的操作系统&#xff0c;MapReduce就是计算机上的应用程序。 Yarn的基本组成…

Yarn介绍

Yarn介绍 一&#xff0c;介绍二&#xff0c; yarn 框架三&#xff0c;ResourceManager3.1&#xff0c;ApplicationsManager3.2&#xff0c;Scheduler 四&#xff0c;NodeManager五&#xff0c;ApplicationMaster六&#xff0c;客户端提交任务到yarn中运行的流程。 YARN的基本思…

Yarn

应用场景 当部署好hadoop集群后,搭建了YARN集群,开启了hadoop的HDFS和YARN服务,访问主节点IP和8088端口的YARN监控界面,发现这个All Applications界面中的开始执行时间和结束执行时间不对,应该往后加8个小时才对,导致在页面中对任务监控的时候容易出错,所以现在要进行修…

Yar 搭建 RPC 服务

一、安装 Yar pecl install yar pecl install msgpack 二、确保 php 加载 yar 模块 php -m 三、编写服务器端 Server.php &#xff0c; 在浏览器打开 http://.../Server.php 可见API的介绍如下 <?phpclass API {public function some_method($parameter, $options &…

[Yar] yar安装与使用过程中遇到问题总结

yar安装与使用过程中遇到问题总结 Yar 简介官方文档yar安装yar运行时的默认配置yar常量使用范例遇到的问题应用流程 Yar 简介 Yar 是一个轻量级, 高效的RPC框架, 它提供了一种简单方法来让PHP项目之间可以互相远程调用对方的本地方法. 并且Yar也提供了并行调用的能力. 可以支持…

PHP封装curd,ThinkPHP5.0的模型CURD创建Create操作

模型的主要功能包括数据处理和业务逻辑&#xff0c;而这些都离不开数据的CURD操作&#xff0c;因此我们首先来谈下数据的CURD操作&#xff0c;在掌握了数据库Db类的用法后&#xff0c;模型的CURD操作就会很容易理解&#xff0c;因为本质上模型的CURD操作最终调用的还是Db类的操…

浅谈CURD系统和CRQS系统

浅谈CURD系统和CRQS系统 在网上看到关于这个内容的介绍&#xff0c;就想着自己整理一下&#xff0c;方便观看。 三层架构 先从三层架构开始讲&#xff0c;三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑…

Vue入门之Web端CURD前端项目示例

Vue入门之Web端CURD前端项目示例 随着vue.js越来越火&#xff0c;很多不太懂前端的小伙伴想要入坑。而入坑最好的办法就是上手实际操作&#xff0c;因此本文将重点放在实际操作上&#xff0c;对理论不做过多解释&#xff0c;不明白的地方小伙伴们可以去看官方文档或者相关书籍…

fastadmin一键生成CURD

1.登录后台以后安装在线命令插件 2.CRUD fastadmin自带一个test表可以用来测试&#xff0c;或者是自己在数据库随便新建一个表也行 自定义模块名这样填的话就是在admin->controller下->新建一个名为test文件夹 只写test的话是在 controller 目录下面 然后点击生成命令行…

php跨域curd,SpringBoot+Vue前后端分离(CURD)Demo

我发现我好久没有更新了&#xff0c;写一篇证明我还活着。 既然是前后端分离的话&#xff0c;肯定是要有前端和后端的。 这里前端我使用的VueElementUI,后端采用的是SpringBootMybatisSwagger2。 下面的话&#xff0c;我就做一个简单的Demo吧。 写的不好&#xff0c;请大家各位…

单表CURD操作

该项目纯粹用 Servlet 编写&#xff0c;理解跳转过程。理解原理..... 一、准备数据库脚本 USE test;DROP TABLE IF EXISTS dept;CREATE TABLE dept (deptno int(2) NOT NULL,dname varchar(14) DEFAULT NULL,loc varchar(13) DEFAULT NULL,PRIMARY KEY (DEPTNO) ) ENGINEInnoD…