为什么计算Rsquare不同嵌入的适应函数和EzyFit函数(从文件交换)?

42视图(30天)

接受的答案

约翰D 'Errico
约翰D 'Errico 2023年5月22日11:26里
编辑:约翰D 'Errico 2023年5月22日12:18
你知道R ^ 2是无效的,当计算模型没有常数项?相反,我记得有变化的R ^ 2更有效的模型,而没有常数项。
你有没有注意到其中一个计算R ^ 2是负的?这清楚地表明一个问题。你的模型没有常数项也表明存在问题的原因。
你的数据有一个例外,这将严重影响健康是另一个问题。我不会进入。
简单的一个数字措施R ^ 2是一个问题。他们是一个更大的问题,如果你不明白他们在告诉你什么。如果你是担心R ^ 2,在一个没有常数项的问题,然后你不理解R ^ 2。
让我花些时间写作和解释…
x1 = [
1734.46674110029
1721.86718990168
1456.18495599912
1748.16876863704
1262.25401459449
1584.17734249873
1859.79267910209
864.395721875175
1952.12705609501
1503.45890484099
1976.60164096334
3862.90470480267
1914.88763478115
1373.87007296104
1826.95766710343
1515.55469767365
1765.08584136511
1318.10668583756);
日元= [
4289.03428582923
2246.49016736711
1540.98595650498
2038.68253981628
3541.64494736076
4039.09183624669
3602.87690315152
1747.01379244271
4285.91071657769
2935.38381778387
2432.46183991586
4121.49502991896
2455.73593671295
4682.44200564969
3633.35882024405
1763.8042370884
1803.2292759675
3724.18628227003);
实际上,R ^ 2是一个非常简单的措施,比较数据本身的变化,如果我们基本上没有模型。我们可以从方差。
var(日元)
ans = 1.1056 e + 06
请注意,数据的均值方差减去。它隐式假设模型,这一过程是一个常数模型,添加了高斯噪声。的隐式模型方差计算是公正的
y = a0 +噪音
和我们可以恢复最好的最小二乘估计的a0的意思。
a0 =意味着(日元)
a0 = 3.0491 e + 03
但你适合什么?你试图把一个模型,缺乏一个常数项。
y = a1 * x
我们可以直接从反斜杠,或者我们可以使用。因为我们将做这些手工计算本质上,我将使用反斜杠。
格式长g
a1 = x1 \ y1
a1 =
1.62650678745712
不过,我也可以使用适合说服你,反斜杠是正确的。
mdl = fittype (“a1 * x1”,“它”,x1的);
(fittedmdl G) =适合(x1, y1, mdl)
警告:起点不提供,选择随机起始点。
fittedmdl =
通用模型:fittedmdl a1 (x1) = * x1系数(95%置信界限):a1 = 1.627 (1.289, 1.964)
G =结构体字段:
上交所:26350446.5536834 rsquare: -0.401930869730069教育部:17 adjrsquare: -0.401930869730069 rmse: 1245.00050918212
fittedmdl.a1
ans =
1.6265067878172
所以相同的值,实际上应该是有点不准确,因为适合使用一个迭代过程。因此,污水在于收敛公差。
你会注意到返回- R ^ 2。再一次,这应该是一个提示。没有常数项。
现在,R ^ 2告诉我们什么?R ^ 2比较当前模型如何减少变化的数据,没有模型相比更复杂的比假设prcess仅仅是一个常数,加上噪声。
SSbase =总和((y1 -意味着(日元)。^ 2)
SSbase =
18795824.4751091
SSmdl =总和((y1 - a1 * x1)。^ 2)
SSmdl =
26350446.5536833
正如您可以看到的,基本的平方和,我只减去较小的意思是那么平方和当我减去了这个模型的估计。R ^ 2计算现在是一个简单的例子。
R2bad = 1 - SSmdl / SSbase
R2bad =
-0.401930869730068
所以,- R ^ 2告诉我们,你的模型不适合数据比如果你刚刚使用一个常数近似的过程。
最后,我们可能会考虑如果一个更好meaure(这一过程)是如何适应减少数据的简单的平方和,我们没有减去了的意思。
R2nocon = 1 - SSmdl /笔(y1。^ 2)
R2nocon =
0.858439152113143
这假定默认模型的过程
y =噪音
的假定是零。这可能是ezyfit计算,因为它显然知道该模型没有常数项。
最后,我将情节的各种模型。
情节(x1, y1,“莫”)
持有
情节(fittedmdl“r”)
yline(平均(日元)“b”)
蓝色的水平线是一个模型的过程没有信号,只是随机噪声。事实上,实际数据吻合得更好的解释误差的平方和,相对于线性符合没有常数项。
最后,mono-numerosis是一件坏事。从不依靠一个简单的数字告诉你如果你的模型是什么好,当然不是如果你不理解的数量。我甚至会更进一步,告诉你依靠你的眼睛,你的大脑,不是任何数量。如果适合看起来正确,它是正确的。至少,思考你在做什么。适合适合你需要的东西吗?
1评论
Sim卡
Sim卡 2023年5月22日19:40
编辑:Sim卡 2023年5月23日在31
非常感谢 @John D 'Errico 你的回答!
我试着理解和复制你所做的,执行配件/线性回归对下列情形:
  • (一)只有斜率,原始方程R ^ 2(手动完成)
  • (b)只有斜率,修正方程R ^ 2(手动完成)
  • (c)斜率和截距,原始方程R ^ 2(手动完成)
  • (d)是一个额外的情况,我在这里添加,只是比较其他情况下:斜率和截距自动检测自动计算R ^ 2以“fitlm”(自动完成)
clc;密切所有;
%的输入
x1 = [
1734.46674110029
1721.86718990168
1456.18495599912
1748.16876863704
1262.25401459449
1584.17734249873
1859.79267910209
864.395721875175
1952.12705609501
1503.45890484099
1976.60164096334
3862.90470480267
1914.88763478115
1373.87007296104
1826.95766710343
1515.55469767365
1765.08584136511
1318.10668583756);
日元= [
4289.03428582923
2246.49016736711
1540.98595650498
2038.68253981628
3541.64494736076
4039.09183624669
3602.87690315152
1747.01379244271
4285.91071657769
2935.38381778387
2432.46183991586
4121.49502991896
2455.73593671295
4682.44200564969
3633.35882024405
1763.8042370884
1803.2292759675
3724.18628227003);
%(1)手工配件/回归
%发现斜坡(和拦截)
b1 = x1 \ y1;% <——(a和b)只有斜率
yfit1 x1 = b1 *;
x2 =[(长度(x1)、1)的x1);
b2 = x2 \日元;斜率和截距% <——(c)
yfit3 = x2 * b2;
%画一个图
持有
散射(x1, y1, [],“b”,“填充”)
情节(x1, yfit1,“同意”)
情节(x1, yfit3,“- r”)
持有
包含(x1的)
ylabel (“日元”)
传奇(“数据”,“(a和b)只有坡”,(c)斜率和截距的,“位置”,“最佳”);
%计算R ^ 2和RMSE统计数据
Rsq1 = 1 - sum ((y1 - yfit1) ^ 2) /笔((y1 -意味着(日元)。^ 2);% <——(一)坡,与原方程R ^ 2
MSE1 =总和((y1 - yfit1) ^ 2) /元素个数(y1);
RMSE1 =√MSE1);
Rsq2 = 1 - sum ((y1 - yfit1) ^ 2) / ((y1) ^ 2)总和;% <——(b)唯一的斜坡,修正方程R ^ 2
MSE2 = MSE1;% <——MSE和RMSE之前的情况是一样的因为不依赖意味着(日元)
RMSE2 = RMSE1;
Rsq3 = 1 - sum ((y1 - yfit3) ^ 2) /笔((y1 -意味着(日元)。^ 2);% <——(c)斜率和截距,与原方程R ^ 2
MSE3 =总和((y1 - yfit3) ^ 2) /元素个数(y1);
RMSE3 =√MSE3);
%做一个总结
表(t1 = {“一个”},{“南”},b1, Rsq1、MSE1 RMSE1);
t2 =表({“b”},{“南”},b1, Rsq2、MSE2 RMSE2);
t3({=表“c”},b2 (1) b2 (2), Rsq3, MSE3, RMSE3);
t1.Properties。VariableNames = {“案例”,“拦截”,“坡”,“R ^ 2”,MSE的,“RMSE”};
t2.Properties。VariableNames = t1.Properties.VariableNames;
t3.Properties。VariableNames = t1.Properties.VariableNames;
(t1, t2、t3)
ans =3×6表
情况下 拦截 R ^ 2 均方误差 RMSE _____ 是_____________ ______ ________ __________ ______{a}{‘南’}1.6265 -0.40193 1.4639 1209.9 e + 06 {b}{‘南’}1.6265 0.85844 1.4639 1209.9 e + 06 {' c '} {[2.2105 e + 03]} 0.4832 0.076757 9.6406 981.87 e + 05
% (2)matlab函数线性回归
mdl = fitlm (x1, y1)% <——(d)的斜率,拦截和R ^ 2自动计算
mdl =
线性回归模型:y ~ 1 + x1估计系数:估计 SE tStat pValue ________ _________ ______ ________ (拦截)2210.5 767.46 2.8802 0.010878x10.4832 0.41896 1.1533 0.26571数量的观察:18日误差自由度:16根均方误差:1.04 e + 03平方:0.0768,调整平方:0.0191 f统计量与常数模型:1.33,p = 0.266
plotAdded (mdl)
总而言之:
  • 是的,在我的例子中,与原R ^ 2的定义,我得到R ^ 2 = -0.4,因为周围的方差最小二乘拟合线大于周围的方差的意思。这是明确的,但我不知道这是有关缺乏拦截,我不明白为什么Ezyfit正在给一个不同的结果。
  • 我不知道R ^ 2如果没有拦截失去意义。我明白,因为这种情况下,我们需要使用一个slithgly不同定义R ^ 2,即。
Rsq2 = 1 - sum ((y1 - yfit1) ^ 2) / ((y1) ^ 2)总和;% <——(b)唯一的斜坡,修正方程R ^ 2
  • 然而,我仍然不明白为什么不能减去均值(y)的情况。什么解释删除显著线性模型的截距项增加2,但是我没有抓住。
  • 我明白,因为我的情况,通过使用R ^ 2的修正方程,即,一个均值(y)没有减去,我会“y =噪音”作为默认的模式。但是,如果我不减的意思(y)的方程R ^ 2,它就相当于说这意味着(y) = 0。但(y)是3000年左右,当你显示在你的阴谋。我不懂这一部分。
  • 也可能是Ezyfit计算R ^ 2 = 0.84396没有减去意味着(y)的方程R ^ 2,即使有小修改,我们得到R ^ 2 = 0.85844。一盏灯的区别。
  • 例(c)和(d)产生相同的输出,即相同的斜率,拦截和R ^ 2。这意味着嵌入函数”fitlm“认为——很明显——计算线性回归的拦截。好的,很好。
  • 除了R ^ 2,我可以使用其他统计指标,MSE和RMSE,因为它们不依赖于”的意思是(y)”,但只有在方差least-sqaures线。是的,通过添加拦截的配件/线性回归,女士的错误和它的平方根减少,这是一个好迹象。然而,如何interpet……?

登录置评。

更多的答案(0)

类别

找到更多的在创建和连接矩阵帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!