MATLAB中的线性回归

时间:2016-01-29 13:35:40

标签: matlab linear-regression

如何使用MATLAB在add another上使用多个值等于线性回归?

现在,一个包含最少数据的例子(不是我使用的数据):

x

如果我使用y = [1,2,3,4,5,6,7,8,9,10]; x = [2,2,2,4,4,6,6,6,10,10]; polyfit

\

然后线性回归是错误的,因为(我想)他没有注意到几个值已经相同(x = temp(:,1); y = temp(:,2); b1 = x\y; yCalc1 = b1*x; plot(x,yCalc1,'-r'); )。

这是一张包含我的真实数据的图表。蓝点:我的数据。红线:线性回归(这是错误的)。不要专注于绿色虚线:

enter image description here

在这里,“相同”图表(使用Excel完成): 蓝点:我的数据。红线:线性回归(右边)

enter image description here

你认为如果我为每个具有相同x的y值做mean,那么它是数学上的吗?

2 个答案:

答案 0 :(得分:3)

如果您打算使用矩阵形式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示例here

答案 1 :(得分:0)

所以,Dan建议我function并且它现在正在工作。

如果你想做同样的事情,那就这样做: 使用fitlm函数(http://fr.mathworks.com/help/stats/fitlm.html?refresh=true#bunfd6c-2

示例数据:

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对应(Intercept)(贝娄等于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

再次感谢丹!