MATLAB中的线性回归
如何使用MATLAB在MATLAB中的线性回归,matlab,linear-regression,Matlab,Linear Regression,如何使用MATLAB在x上进行几个值相等的线性回归 下面是一个数据最少的示例(不是我使用的数据): 如果我使用polyfit或\: x = temp(:,1); y = temp(:,2); b1 = x\y; yCalc1 = b1*x; plot(x,yCalc1,'-r'); 那么线性回归是错误的,因为(我想)他没有注意到有几个值是相同的(x) 这里是一张有我真实数据的图表。蓝点:我的数据。红线:线性回归(它是错误的)。不要聚焦到绿色虚线: 这里是“相同”的图表(使用Excel完成):
x
上进行几个值相等的线性回归
下面是一个数据最少的示例(不是我使用的数据):
如果我使用polyfit
或\
:
x = temp(:,1); y = temp(:,2);
b1 = x\y;
yCalc1 = b1*x;
plot(x,yCalc1,'-r');
那么线性回归是错误的,因为(我想)他没有注意到有几个值是相同的(x
)
这里是一张有我真实数据的图表。蓝点:我的数据。红线:线性回归(它是错误的)。不要聚焦到绿色虚线:
这里是“相同”的图表(使用Excel完成):
蓝点:我的数据。红线:线性回归(正确)
你认为如果我用相同的
x
对每个y值做平均值,它在数学上是正确的吗?因此,丹建议我做一个函数,它现在正在工作
如果你想做同样的事情,就这样做:
使用fitlm
功能()
示例数据:
y = [1,2,3,4,5,6,7,8,9,10];
x = [2,2,2,4,4,6,6,6,10,10];
tbl = table(x,y)
lm = fitlm(tbl,'linear')
你会有不同的价值观
线性回归是一个方程,如y=ax+b
。这里,根据结果,a
对应于x
(下面等于0.15663
),而b
对应于(截距)
(下面等于1.4377
)
对于其他值,Matlab将向您显示以下结果:
Linear regression model:
y ~ 1 + x
Estimated Coefficients:
Estimate SE tStat pValue
________ _________ ______ ___________
(Intercept) 1.4377 0.031151 46.151 5.8802e-290
x 0.15663 0.0054355 28.816 1.2346e-145
Number of observations: 1499, Error degrees of freedom: 1497
Root Mean Squared Error: 0.135
R-squared: 0.357, Adjusted R-Squared 0.356
F-statistic vs. constant model: 830, p-value = 1.23e-145
再次感谢丹 因此,Dan建议我使用一个函数
,它现在可以工作了
如果你想做同样的事情,就这样做:
使用fitlm
功能()
示例数据:
y = [1,2,3,4,5,6,7,8,9,10];
x = [2,2,2,4,4,6,6,6,10,10];
tbl = table(x,y)
lm = fitlm(tbl,'linear')
你会有不同的价值观
线性回归是一个方程,如y=ax+b
。这里,根据结果,a
对应于x
(下面等于0.15663
),而b
对应于(截距)
(下面等于1.4377
)
对于其他值,Matlab将向您显示以下结果:
Linear regression model:
y ~ 1 + x
Estimated Coefficients:
Estimate SE tStat pValue
________ _________ ______ ___________
(Intercept) 1.4377 0.031151 46.151 5.8802e-290
x 0.15663 0.0054355 28.816 1.2346e-145
Number of observations: 1499, Error degrees of freedom: 1497
Root Mean Squared Error: 0.135
R-squared: 0.357, Adjusted R-Squared 0.356
F-statistic vs. constant model: 830, p-value = 1.23e-145
再次感谢丹 如果您打算使用矩阵形式Y=XB和运算符\
求解简单线性回归,则需要在X中添加一列额外的1,以计算截距
y0 = [1,2,3,4,5,6,7,8,9,10];
x0 = [2,2,2,4,4,6,6,6,10,10];
X1 = [ones(length(x0),1) x0'];
b = X1\y0';
y = b(1) + x0*b(2)
plot(x0,y0,'o')
hold on
plot(x0,y,'--r')
您可以找到一个很好的Matlab示例如果您打算用矩阵形式Y=XB和运算符\
求解简单线性回归,则需要在X中添加一列额外的1来计算截距
y0 = [1,2,3,4,5,6,7,8,9,10];
x0 = [2,2,2,4,4,6,6,6,10,10];
X1 = [ones(length(x0),1) x0'];
b = X1\y0';
y = b(1) + x0*b(2)
plot(x0,y0,'o')
hold on
plot(x0,y,'--r')
您可以找到一个很好的Matlab示例您是否尝试拟合线性模型?我用建议编辑了我的信息。但我不知道这是不是个好主意。。。我不尝试你的功能。我要读一读。你可能想继续问这个问题,因为似乎你需要学习如何为每个点编写一个具有多个(并且可能有不同数量的值)的线性回归模型。b1=x\y
不是线性回归。你可以,但不是那么简单b1=x\y
是简单线性回归,假设模型为y=bx。如果要查找y=b1*x+b0,则需要修改矩阵。看我的答案。你试过拟合线性模型吗?我用建议编辑了我的信息。但我不知道这是不是个好主意。。。我不尝试你的功能。我要读一读。你可能想继续问这个问题,因为似乎你需要学习如何为每个点编写一个具有多个(并且可能有不同数量的值)的线性回归模型。b1=x\y
不是线性回归。你可以,但不是那么简单b1=x\y
是简单线性回归,假设模型为y=bx。如果要查找y=b1*x+b0,则需要修改矩阵。看看我的答案。