【问题标题】:R-squared value in Excel with the 'addtrendline' function?Excel中带有'addtrendline'函数的R平方值?
【发布时间】:2014-08-20 16:11:16
【问题描述】:

我已经为此苦苦挣扎了一段时间; 简而言之,我找不到 Excel 用于 R2 的方程式。

  • 这是我的数据:
    x:1 2 3 4 5 6 7 8 9 10
    y: 4 9 1 2 1 1 8 5 5 1

  • 我绘制数据,拟合幂律函数(“添加趋势线”)并使用“添加趋势线 > 选项 > 在图表上显示 R 平方值”

显示的值:
R2 = 0.03008

问题 1

如果我使用 'RSQ()' 函数在 Excel 中计算它(获取 Excel 为拟合函数找到的参数值),或者使用定义(维基百科)手动计算...
R2 = 0.0272

问题 2

在Matlab中,使用'fit'函数,拟合函数的参数(当然还有R2)不是EXCEL找到的。

问题:

所以这是我的主要问题:
Excel 如何计算“添加趋势线”函数中的 R2,因为它显然不是定义中的那个(维基百科)?

还有额外的问题:
为什么 Excel 和 Matlab 的拟合参数不一样?

非常感谢!

%%%%%% 在下面编辑! %%%%
作为对评论的回答; 这是我使用的 Matlab 代码:

%% R-squared with the fit function
% use the fit function in Matlab, yobs being the data
[param, results] = fit(x,yobs,'power1');   

% R-squared from the fit function :
r_sq_from_fit = results.rsquare;

%% here I calculate "by hand" the R-squared, from the general definition (wikipedia!)
% calculates the fitting data yfit
yfit = (p_powerlaw.a).*x.^p_powerlaw.b;

% mean of the yobs, total sum of squares, and residual sum of squares
yobs_mean = mean(yobs);
SStot = sum((yobs-yobs_mean).^2);
SSres = sum((yobs-yfit).^2);

r_sq_hand = 1-SSres/SStot;

无论我从 Matlab 中的 fit 函数得到 R 平方还是“手动”计算它,我都能找到相同的值。 Matlab 似乎是一致的,显然在其函数中使用了 R-squared 的严格定义......

但是;当我比较时:

  • Excel 由RSQ() 函数给出的 R 平方值
  • 以及我通过从定义中手动计算 R 平方获得的值(当然是 Excel 返回给我的 yfit 值,而不是 Matlab 返回的值,因为 Excel 和 Matlab 不同意关于拟合参数!)

...我得到不同的值! Excel:0.027,正如我之前所说,手工计算:-0.1109(!)

【问题讨论】:

  • 你是如何精确到 0.0272 的?
  • 我采用 Excel 为拟合找到的参数(3.6153 和 -0.217),计算拟合值(我们称它们为 yfit)并使用数据参数计算 RSQ 函数(y) 和拟合值 (yfit)。

标签: excel matlab regression curve-fitting trendline


【解决方案1】:

这个问题(Excel 中的“添加趋势线”究竟是如何工作的?)也让我困惑了很长时间,因为在研究中我需要确定我的数字的来源。因为我在网上没有找到太多关于这个的,所以我尝试了几种手动R^2(确定系数)评估,以获得与Excel相同的结果。

我做了与问题中提到的相同的观察。当使用“添加趋势线”进行线性(以及对数)函数拟合时,生成的 R^2 和回归参数与手动计算的参数相同。但是,当使用“添加趋势线”进行其他非线性函数拟合(例如指数)时,生成的 R^2 和回归参数与手动计算的参数不同。

这里的讨论中已经部分提到了这个问题的解决方案。似乎为了将非线性趋势拟合到提供的数据中,Excel 主要将问题线性化。例如,为了拟合指数函数 y=a* exp(b * x),它主要将其转换为函数 ln(y)=ln(a)+b*x。那么 ln(y) 和 x 之间的关系是线性的。然后使用最小化残差平方和的常用策略将线性化函数拟合到转换后的数据中。从而得到回归参数ln(a)和b。 R^2 也是从线性化形式计算出来的。因为是线性相关,所以 Excel 可以使用 RSQ() 函数来计算 R^2。

当手动执行此过程时,生成的回归参数和 R^2 值与 Excel 的“添加趋势线”提供的相同。

因此,通常在非线性回归的情况下,Excel 的“添加趋势线”提供的回归参数和 R^2 值不是真正的非线性,但很可能是在问题线性化后获得的。因此,这些参数与未经任何转换直接计算的参数略有不同。

关于 R^2 的注意事项:据我所知,线性情况下的 R^2(最好用小写字母表示:r^2)计算为相关系数的平方。 (RSQ()=CORREL()^2=PEARSON()^2)。由于这种关系,r^2 的值只能介于 0 - 1 之间。一组输入已知值可以通过截距和/或斜率改变,而不会改变 r^2 值。另一方面,非线性情况的 R^2(最好用大写字母表示)以不同的方式定义(参见 Wikipedia)。它的值不限于值 0,但最大值 1 仍然表示最佳拟合。通过截距和/或斜率改变一组输入已知值会改变 R^2 值。 R^2 在线性情况下也同样有效。

【讨论】:

    【解决方案2】:

    RSQ返回 power 趋势线的 r 平方值,而是返回线性趋势线的 r 平方值。 Excel 帮助显示“对于对数、幂和指数趋势线,Excel 使用转换的回归模型”,但我找不到该模型。

    另见How to Measure the goodness of a fit of a trendline to a power law

    【讨论】:

    • 好的,谢谢... Excel 在“添加趋势线”中使用自己的 R 方定义,这与 RSQ 函数中使用的不一样,这真是令人困惑! Excel和Matlab在拟合参数上的差异如何?与 y=ax^b; Excel : a=3.61, b = -0.23 VS Matlab a = 4.81 and b=-0.18...!
    • @user3789714 线性趋势线的结果是相同的,这也是 RSQ 函数的设计目的。而且,如果您尝试使用趋势线参数进行计算,您应该使用 a= 3.61530123330863 和 b = -0.216941129430519 而不是上面使用的四舍五入数字。可能还有一个问题,我认为您的数据不足以很好地拟合幂趋势线,但我认为链接中的文章可能会对此提供更多的见解。
    • 是的,我将参数四舍五入来计算拟合值yfit,因为直觉上我认为四舍五入时R平方值的差异不会显着(现在我再次计算了它使用非四舍五入的参数,它几乎是相同的值:0.02723398)。这个数据是编出来的。我的真实数据是一个巨大的矩阵。但最后一个问题是,如果我在 Excel 中比较幂律拟合和指数拟合,我选择幂律(更高的 R 平方),而在 Matlab 中,我使用指数。这是个大问题……
    • ...最后是的,还有其他方法 - 并且更好 - 来说明非线性配件的拟合优度(我的领域中的 Nash Sutcliffe,或者链接中的链接中的那个) ,问题在于,在一篇论文中,那些“其他方式”通常根本不被审稿人/读者理解……
    • @user3789714 Excel 的添加趋势线可能不是最好的优化。尝试使用 Excel 中的求解器查找参数,然后与 Matlab 进行比较
    【解决方案3】:

    这是因为您要求在图表中拟合幂函数的 R2(即 y = a(x)b),而 @987654321 Excel 中的 @ 函数为您提供线性拟合的 R2(即 y = a(x) + b)。我怀疑你在 Matlab 中有类似的问题。不过,您需要在 Matlab 中发布您的代码,否则我们都只是在猜测。

    【讨论】:

    • 嗨!谢谢,我已经用 Matlab 代码编辑了我的问题!希望你能帮忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2016-10-16
    • 2011-08-16
    • 2017-04-04
    • 1970-01-01
    • 2013-02-14
    相关资源
    最近更新 更多