2

我一直在努力。简而言之,我找不到 Excel 用于 R 2的方程式。

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

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

显示值:
R 2 = 0.03008

问题 1

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

问题 2

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

问题:

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

还有一个额外的问题:
为什么 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 中的函数获得 R 平方fit还是“手动”计算它,我都能找到相同的值。Matlab 似乎是一致的,并且显然在其函数中使用了 R-squared 的严格定义......

然而;当我比较时:

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

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

4

3 回答 3

3

这个问题(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 在线性情况下也同样有效。

于 2015-07-05T15:08:58.437 回答
2

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

另请参阅 如何衡量趋势线与幂律的拟合度

于 2014-06-30T10:46:50.440 回答
1

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

于 2014-06-30T10:08:13.163 回答