matlab 多元线性回归regress和拟合ployfit

1.线性回归:

regress 顾名思义,就是一元多元方程的的拟合,y=c1*x1+c2*x2....或者y=c1*x1^2+c2*x2^2+c3*x1*x2....等等形式

[b,BINT] = regress(Y,X)
[b,BINT,R] = regress(Y,X)
[b,BINT,R,RINT] = regress(Y,X)
[b,BINT,R,RINT,STATS] = regress(Y,X)
[b,BINT,R,RINT,STATS] = regress(Y,X,ALPHA)

b [c1 c2 c3.....]
BINT 回归系数的估计区间 B的95%的置信区间矩阵,Bint 置信区间不大,说明有效性较好;若含零点,说明结果无效。
R 残差(因变量的真实值减去估计值)
RINT 置信区间 

STATS:向量,STATS中的4个值分别为:R2(判定系数),F(总模型的F测验值),P(总模型F的概率值P(F>Fz)),MSq(离回归方差或误差方差的估计值)

判定系数(the Coefficient of the Determination)R2:是判断回归模型拟合程度的一个指标,其取值范围为[0, 1];判定系数越大说明回归模型的拟合程度越高,回归方程越显著。

F>F(1-α)(k, n-k-1)时拒绝H0,F越大,说明回归方程越显著。
与F对应的概率P<α时拒绝H0,回归模型成立。

MSq:由于最小二乘法中不求误差方差σ2,其误差平方和Msq定义为SSR/自由度

funcPara=[ones(size(y,2))' x1' x2'];
[b,bint,r,rint,stats] =regress(y‘,funcPara); %注意: 函数内部使用的向量都要为列向量

2.拟合ployfit

polyfit函数基于最小二乘法,使用的基本格式为:

p = polyfit(x,y,n)
[p,S] = polyfit(x,y,n)
[p,S,mu] = polyfit(x,y,n)

其中每个命令中的n为多项式拟合的次数,当n为1时,即为一次拟合(很多情况下等价于一元线性回归)。p是n+1维参数向量p(1),p(2)….那么拟合后对应的多项式即为p(1)*x^n + p(2)*x^(n-1) +…+ p(n)*x + p(n+1)。S是规模为1×1的结构数组,包括R(系数矩阵的QR分解的上三角阵),df(自由度),normr(拟合误差平方和的算术平方根)。

例子1:拟合Sellmeier 

% -----------------Sellmeier
wavelength=[0.21000 0.37830 1.0330 2.2120 3.4700 4.1260 4.4220 4.7390 5.4430 6.0390 6.4720 6.7000];%波长
n=[1.5383576204905 1.4727046797948 1.4500069615101 1.4348196176837 1.4067782146466 1.3841208059058 1.3713701305288 1.3555262189157 1.3096384003386 1.2537289561387 1.19732567716307 1.1596494139777];%折射率
f=@(P,w)(sqrt(1+P(1)*w.^2./(w.^2-P(2))+P(3)*w.^2./(w.^2-P(4))+P(5)*w.^2./(w.^2-P(6))));%设置函数样式
P=[1;0;1;0;1;100]; %预估参数值
P=nlinfit(wavelength,n,f,P);%拟合参数值
wave=0.21:0.001:6.7;%横轴扩展
n1=f(P,wave);%纵轴计算
figure(1);
plot(wave,n1,wavelength,n,'o');
xlabel('Wavelength');
ylabel('n');

例子2:拟合正弦函数,详细的可以参见:https://ww2.mathworks.cn/help/matlab/ref/polyfit.html

x = linspace(0,4*pi,10);
y = sin(x);
p = polyfit(x,y,7);
x1 = linspace(0,4*pi);
y1 = polyval(p,x1);
figure
plot(x,y,'o')
hold on
plot(x1,y1)
hold off

结论:都可以进行线性回归拟合,但是第一种更直观,且能得到更多的信息,第二种的话使用起来比较简单。

你可能感兴趣的:(matlab)