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完成):

如何使用MATLAB在
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,则需要修改矩阵。看看我的答案。