基于MATLAB的R方计算

article/2025/10/1 3:20:11

R方计算原理

什么是R方

R-square是你以后很多数据模型都需要用到的统计量,计量模型什么的,还有回归系数显著性检验,F检验,德斌沃森统计量检验。利用数据拟合一个模型时,模型肯定存在误差,那么回归方程对观测值拟合的好坏,就叫做拟合优度。这里的R方就是拟合优度的一个统计量,也可以叫做决定系数。R方计算方法为:
R 2 = 1 − ∑ ( y − y ^ ) 2 ∑ ( y − y ~ ) 2 R^2=1- \frac{\sum(y-\hat{y})^2}{\sum(y-\widetilde{y})^2} R2=1(yy )2(yy^)2
式中用1减去y对回归方程的方差与y的总方差的比值,y减去 y ^ \hat{y} y^也就是残差,是拟合方程中不能解释的部分,用1减去不能解释的部分,那么剩下的就是解释的部分,也就是说自变量解释了因变量变动的百分比的多少,那么r方的值肯定是越大越好,意味着该模型把y的变动解释得好,R方的范围显然是0到1,在预测实践中,人们往往采纳R方最高的模型。除此之外,拟合优度还有另一个测定指标是相关系数,相关系数的公式:

r = ∑ i = 1 n ( x i − x ~ ) ( y i − y ~ ) ∑ i = 1 n ( x i − x ~ ) 2 ∑ i = 1 n ( y i − y ~ ) 2 r=\frac{\sum_{i=1}^{n}(x_i-\widetilde{x})(y_i-\widetilde{y})}{\sqrt{\sum_{i=1}^{n}(x_i-\widetilde{x})^2\sum_{i=1}^{n}(y_i-\widetilde{y})^2}} r=i=1n(xix )2i=1n(yiy )2 i=1n(xix )(yiy )

从公式里面可以看出,可决系数只是相关系数的平方,它们存在的目的是为了提供互相补充的信息,它俩最著要的区别在于:相关系数有正负,正意味着因变量随自变量递增,拟合直线从左到右上升,反之意味着递减,从左到右下降。相关系数的意义不像可决系数那样明显,但也有类似的意义,与可决系数同理,它越接近于+1或者-1,拟合程度越好。

实例分析

基于MATLAB的R方计算函数(函数中有作者信息),返回 R 2 R^2 R2与RMSE

function [r2 rmse] = rsquare(y,f,varargin)
% Compute coefficient of determination of data fit model and RMSE
%
% [r2 rmse] = rsquare(y,f)
% [r2 rmse] = rsquare(y,f,c)
%
% RSQUARE computes the coefficient of determination (R-square) value from
% actual data Y and model data F. The code uses a general version of 
% R-square, based on comparing the variability of the estimation errors 
% with the variability of the original values. RSQUARE also outputs the
% root mean squared error (RMSE) for the user's convenience.
%
% Note: RSQUARE ignores comparisons involving NaN values.
% 
% INPUTS
%   Y       : Actual data
%   F       : Model fit
%
% OPTION
%   C       : Constant term in model
%             R-square may be a questionable measure of fit when no
%             constant term is included in the model.
%   [DEFAULT] TRUE : Use traditional R-square computation
%            FALSE : Uses alternate R-square computation for model
%                    without constant term [R2 = 1 - NORM(Y-F)/NORM(Y)]
%
% OUTPUT 
%   R2      : Coefficient of determination
%   RMSE    : Root mean squared error
%
% EXAMPLE
%   x = 0:0.1:10;
%   y = 2.*x + 1 + randn(size(x));
%   p = polyfit(x,y,1);
%   f = polyval(p,x);
%   [r2 rmse] = rsquare(y,f);
%   figure; plot(x,y,'b-');
%   hold on; plot(x,f,'r-');
%   title(strcat(['R2 = ' num2str(r2) '; RMSE = ' num2str(rmse)]))
%   
% Jered R Wells
% 11/17/11
% jered [dot] wells [at] duke [dot] edu
%
% v1.2 (02/14/2012)
%
% Thanks to John D'Errico for useful comments and insight which has helped
% to improve this code. His code POLYFITN was consulted in the inclusion of
% the C-option (REF. File ID: #34765).if isempty(varargin); c = true; 
elseif length(varargin)>1; error 'Too many input arguments';
elseif ~islogical(varargin{1}); error 'C must be logical (TRUE||FALSE)'
else c = varargin{1}; 
end% Compare inputs
if ~all(size(y)==size(f)); error 'Y and F must be the same size'; end% Check for NaN
tmp = ~or(isnan(y),isnan(f));
y = y(tmp);
f = f(tmp);if c; r2 = max(0,1 - sum((y(:)-f(:)).^2)/sum((y(:)-mean(y(:))).^2));
else r2 = 1 - sum((y(:)-f(:)).^2)/sum((y(:)).^2);if r2<0% http://web.maths.unsw.edu.au/~adelle/Garvan/Assays/GoodnessOfFit.htmlwarning('Consider adding a constant term to your model') %#ok<WNTAG>r2 = 0;end
endrmse = sqrt(mean((y(:) - f(:)).^2));

调用方式

clc
clear all
close all% 制作输入数据,y = a*x + b
x = 0:0.1:10;
y = 2.*x + 1 + randn(size(x));
p = polyfit(x,y,1)
f = polyval(p,x);
[r2 rmse] = rsquare(y,f);
figure
plot(x,y,'b.');
hold on; 
plot(x,f,'r-');
axis equal
title(strcat(['R2 = ' num2str(r2) '; RMSE = ' num2str(rmse)]))
str = ['y = ' num2str(p(1)) 'x + ' num2str(p(2))];
gtext(str)
% text(mean(x),mean(y),str)

计算结果

与cftool工具箱计算结果对比

函数拟合结果相同, R 2 R^2 R2计算结果相同,RMSE计算结果有差异。

自带计算方法

[R P] = corrcoef(x1,x2);
r = R(1,2)

引用
https://www.applysquare.com/topic-cn/SPt2Al6uO/


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

相关文章

数据科学 | 如何解释线性回归的R方

R方&#xff0c;即R-Squared&#xff0c;常用来衡量线性回归的拟合度。相关性“r"衡量两个变量间的相关性&#xff0c;相关性接近1表示变量间具有很强的正相关性&#xff0c;接近-1表示变量间具有很强的负相关性&#xff0c;接近0表示变量间没有太多的关系。R方与相关性”…

什么是R方?这6张图会让你终身难忘~

什么是R2 &#xff1f; 在回归模型中&#xff0c;因变量&#xff08;y&#xff09;总的方差&#xff08;信息&#xff09;可以被称作总平方和&#xff08;Total sum of squares&#xff0c;TSS&#xff09;&#xff0c;它由两部分组成[1]&#xff1a; 1. 模型可以解释的那部分信…

贝叶斯相关公式(Bayes)

这里只是记录一下&#xff0c;非常推荐马同学高等数学,文末有原文.点击这里看里面的例一应该是理解贝叶斯公式最好的例子 ,如果你稍微有一些基础&#xff0c;我觉得文末第二个链接中的例一更加适合你 代数推导 1. 贝叶斯公式 是根据条件概率推导的 P(A|B)P(AB)P(B)P(B|A)…

贝叶斯模型及其应用总结

本文参考整理众多资料而成。 http://blog.csdn.net/huaxi1902/article/details/24140061 http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/ http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.html http://www.ruanyifeng.com/blog/2011/08…

贝叶斯预测模型 (数学原理与推导)

1. 方差的两种计算方法 对于方差计算的一个重要结论&#xff1a; 2. 联合概率分布-条件概率分布 当然&#xff0c;利用联合概率分布也很容易推出边缘概率分布&#xff1b;只需要对其他变量进行全积分即可&#xff01; 条件概率分布直观想象还是有难度的&#xff0c;很多时候我…

朴素贝叶斯算法 — 超详细公式讲解+代码实例

本文收录于Github仓库&#xff0c;欢迎前来 star 呀~ https://github.com/Veal98/cs-wiki在线阅读地址/更好的阅读体验请移步&#xff1a;cswiki.top &#x1f454; 朴素贝叶斯算法 Naive Bayes &#x1f4a1; 思维导图 1. 朴素贝叶斯法概述 朴素贝叶斯法是基于贝叶斯定理与…

贝叶斯定理

贝叶斯定理 通常&#xff0c;事件A在事件B的条件下的概率&#xff0c;与事件B在事件A的条件下的概率是不一样的&#xff1b;然而&#xff0c;这两者是有确定的关系&#xff0c;贝叶斯法则就是这种关系的陈述。 贝叶斯法则又被称为贝叶斯定理、贝叶斯规则&#xff0c;是指概率统…

dbus 学习

和菜鸟一起学linux之DBUS基础学习记录 D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信。它是个3层架构的IPC 系统&#xff0c;包括&#xff1a; 1、函数库libdbus &#xff0c;用于两个应用程序互相联系和交互消息。 2、一个基于libdbus构造…

ubuntu DBUS 收集

ubuntu DBUS 收集 libdbus-1.so.3.19.11 是dbus-1.12.16.tar.gz 包编译出来的 参考文档: https://www.freedesktop.org/wiki/Software/dbus/ https://www.freedesktop.org/wiki/IntroductionToDBus/ https://dbus.freedesktop.org/doc/dbus-tutorial.html https://docs.gtk.…

Linux DBUS服务器端程序

DBus 服务器端接收方式 DBus 服务器端用来接收signal和method调用。从收集的资料中发现&#xff0c;主要有三种接收方式。 一&#xff0c;采用while循环&#xff0c;监听dbus_connection_read_write()函数。有消息到来时在循环内部进行处理。优点是结构简单&#xff0c;处理方…

Linux -dbus总线

下载编译dbus 下载https://dbus.freedesktop.org/releases/dbus/ dbussrc1.14.0-Linux文档类资源-CSDN下载 dbus-1.14.0.tar.xz xz -d dbus-1.14.0.tar.xz tar xvf dbus-1.14.0.tar2.配置编译 ./configure --prefix/data/opensrc/dbus #--prefix/data/opensrc/dbus 指定输…

DBus通讯

linux下进程间通信的方式主要有Pipe(管道)&#xff0c;FIFO(命名管道)&#xff0c;信号&#xff0c;共享内存&#xff0c;消息队列&#xff0c;信号灯等&#xff0c;这些方式各有 各得特点&#xff0c;如管道是linux下命令行中常用的&#xff0c;用于父子进程的通信。但是这些通…

Linux DBUS客户端程序

DBUS客户端程序&#xff0c;发送一个信号&#xff0c;信号携带int型数据。信号的object path为"/test/signal/server"&#xff0c;interface名为 "test.signal.Type"&#xff0c;信号名为"Test"。接收端可以根据这三个属性来判断是否是想接收的信…

四、QtDbus

文章目录 概述一、QtDBus模块Debug备忘单 二、QtDBus类型系统1、QtDBus类型系统简介2、原生类型3、复合类型4、扩展类型系统5、类型系统使用 三、QtDBus常用类1、QDBusMessage2、QDBusConnection3、QDBusInterface4、QDBusReply5、QDBusAbstractAdaptor6、QDBusAbstractInterfa…

Hello Qt——QtDBus快速入门

一、QtDBus简介 QtDBus是一个使用D-Bus协议进行进程间通信的仅在Unix运行的库&#xff0c;是对D-Bus底层API的封装实现。 QtDBus模块提供了使用Qt信号槽机制扩展的接口。要使用QtDBus模块&#xff0c;需要在代码中加入以下代码&#xff1a; #include <QtDBus> 如果使用…

DBUS

DBUS是一种高级的进程间通信机制。DBUS支持进程间一对一和多对多的对等通信&#xff0c;在多对多的通讯时&#xff0c;需要后台进程的角色去分转消息&#xff0c;当一个进程发消息给另外一个进程时&#xff0c;先发消息到后台进程&#xff0c;再通过后台进程将信息转发到目的进…

DBUS是什么 如何使用

DBus提供了一种低延时,低开销,高可用性的进程间通信方式,其以消息作为驱动,采用二进制的协议,实现一对一及多对多的对等通信,避免通信的序列化&#xff08;编码过程&#xff09;过程,提高通信效率.DBus进程通信的核心是提供了一个后台中转守护进程,需要通信的进程首先连接到DBu…

dbus总线通信的原理和使用

1.什么是D-Bus D-Bus是一种高级的进程间通信机制&#xff0c;它由freedesktop.org项目提供&#xff0c;使用GPL许可证发行。D-Bus最主要的用途是在Linux桌面环境为进程提供通信&#xff0c;同时能将Linux桌面环境和Linux内核事件作为消息传递到进程。注册后的进程可通过总线接…

制作maven-archeType

制作maven-archeType 项目背景 解决每次开发新项目&#xff0c;要创建很多目录结构或者从老项目中修改包名&#xff0c;pom等&#xff0c;所以就自己制作一个项目骨架&#xff0c;便于以后新项目目录结构生成。 制作maven-archeType 1.自己开发一个maven-archeType项目&…

[WARNING] No archetype found in remote catalog. Defaulting to internal catalog(已解决)

前言&#xff1a; 遇到问题后&#xff0c;首先&#xff0c;在网络上查找答案。结果告诉我&#xff0c;让我重启IDEA&#xff0c;可是我使用的是CMD命令行&#xff0c;根本没有使用IDEA。或者&#xff0c;告诉我如何操作&#xff0c;却没有解释问题发生的根本原因。于是&#xf…