数学建模-回归问题

文章目录

    • 1.一元/多元线性回归
      • 1.1 regress
      • 1.2 fitlm
    • 2.一元/多元非线性回归
      • 2.1 polyfit
      • 2.2 fitnlm

1.一元/多元线性回归

1.1 regress

  • 拟合算法是最小二乘算法

  • regress 将 X或Y中的 NaN 值视为缺失值。regress 在回归拟合中忽略具有缺失值的观测值

  • 要计算具有常数项(截距)的模型的系数估计值,请在矩阵 X 中包含一个由1构成的列

% 加载数据
load carsmall
% 多元线性回归
X = [ones(size(Weight)) Weight Horsepower Weight.*Horsepower];
Y = MPG;
[coef,~,r,rint,stats] = regress(Y,X,0.05);% coef:多元线性回归的系数估计值
                                     % r:残差
                                     % rint:置信区间
                                     % status(1):R^2
                                     % 置信水平:100*(1-alpha)%
% 建立方程
syms x1 x2 x3
YFIT = coef(1) + coef(2)*x1 + coef(3)*x2 + coef(4)*x3;
YFIT = vpa(YFIT,3);
% 绘图
rcoplot(r,rint)

1.2 fitlm

  • 主拟合算法是 QR 分解
  • fitlm 将X和 Y 中的 NaN''"" 值视为缺失值。fitlm 在拟合中不使用具有缺失值的观测值
  • fitlm 创建的模型始终包含截距项,除非您使用 'Intercept'指定不包含它
% 加载数据
load carsmall
X = [Weight,Horsepower,Acceleration];
Y = MPG;
% 多元线性回归
mdl = fitlm(X,Y);
coef = mdl.Coefficients.Estimate;
% 建立方程
syms x1 x2 x3
YFIT = coef(1) + coef(2)*x1 + coef(3)*x2 + coef(4)*x3;
YFIT = vpa(YFIT,3);
% R^2
R2 = mdl.Rsquared.Ordinary;

2.一元/多元非线性回归

2.1 polyfit

  • p ( x ) = p 1 x n + p 2 x n − 1 + . . . + p n x + p n + 1 p(x)=p_1x^n+p_2x^{n-1}+...+p_nx+p_{n+1} p(x)=p1xn+p2xn1+...+pnx+pn+1
  • poyfit 在拟合中使用具有缺失值的观测值
% 加载数据
load carbig
X = Acceleration;
Y = MPG;
% 剔除NAN
D = [X,Y];
D = rmmissing(D,1);
X = D(:,1);
Y = D(:,2);
% 一元非线性回归
p=polyfit(X,Y,2);
% 建立方程
syms x
YFIT = p(1)*x^2 + p(2)*x + p(3);
YFIT = vpa(YFIT,3);
% R
R=corrcoef(X,Y);
% 绘图
x=linspace(min(X),max(X));
y=polyval(p,x);
plot(X,Y,'.',x,y,'-');

2.2 fitnlm

  • fitlm 将X和 Y 中的 NaN视为缺失值。fitnlm 在拟合中不使用具有缺失值的观测值
% 加载数据
load carbig
X = [Horsepower,Weight];
Y = MPG;
% 多元非线性回归
modelfun = @(b,x)b(1) + b(2)*x(:,1).^b(3) + b(4)*x(:,2).^b(5);
beta0 = [-50 500 -1 500 -1];
mdl = fitnlm(X,Y,modelfun,beta0);
coef = mdl.Coefficients.Estimate;
% 建立方程
syms x1 x2 x3
YFIT = coef(1) + coef(2)*x1 + coef(3)*x2 + coef(4)*x3;
YFIT = vpa(YFIT,3);
% R^2
R2 = mdl.Rsquared.Ordinary;

你可能感兴趣的:(数学建模,回归,matlab)