原理
非线性回归分析是一种统计方法,用于研究因变量(响应变量)与一个或多个自变量之间的关系,当这种关系不是线性的而是曲线型时。在非线性回归中,因变量和自变量之间的关系通过一个非线性的函数来表达。这不同于多元线性回归,后者假设因变量是自变量的线性组合。
建立非线性回归模型的过程包括以下步骤:
- 选择模型:根据理论、经验或者数据探索选择适当的非线性函数形式。
- 参数估计:使用迭代算法(如高斯-牛顿法、Levenberg-Marquardt算法等)来寻找最佳拟合参数 ββ,使得预测值与实际观测值之间的差异最小化。
- 模型评估:检查模型的拟合优度,例如通过R平方、调整后的R平方、AIC(Akaike信息准则)、BIC(贝叶斯信息准则)等指标,并进行残差分析确保满足回归的基本假设。
- 假设检验:对模型参数进行显著性检验,以确定哪些自变量对于解释因变量是重要的。
- 诊断与验证:识别异常点、影响点以及可能存在的多重共线性问题;在独立的数据集上验证模型的泛化能力。
- 预测:利用最终模型对未来或未知数据的因变量进行预测。
非线性回归的应用非常广泛,从生物学中的生长曲线到经济学中的收益函数都可以用它来建模。由于非线性模型往往比线性模型更复杂,因此需要更多的计算资源和专业知识来进行准确的参数估计和模型评估。此外,非线性回归的结果解释也可能更加困难,因为系数不再具有直接的加成效应。
在实践中,如果怀疑存在非线性关系但不确定具体形式,可以考虑多项式回归作为简单的非线性扩展,或者是采用广义加性模型(GAMs),它们允许每个自变量对因变量有非线性的影响,而不需要指定具体的数学形式。








代码


volum.m
1 2
| function yhat=volum(beta,x) yhat=beta(1)*exp(beta(2)./x);
|
code3.m
1 2 3 4 5 6 7 8 9 10 11 12
| x=2:16; y=[6.42 8.20 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.60 10.80 10.60 10.90 10.76]; beta0=[8 2]';
[beta,r,J]=nlinfit(x',y','volum',beta0);
beta
[YY,delta]=nlpredci('volum',x',beta,r,J); plot(x,y,'k+',x,YY,'r')
|
code2.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| x1=[1000 600 1200 500 300 400 1300 1100 1300 300] ; x2=[5 7 6 6 8 7 5 4 3 9];y=[100 75 80 70 50 65 90 100 110 60]'; x=[x1' x2' ]; rstool(x ,y,'purequadratic') beta, rmse
X=[ones(10,1) x1' x2' (x1.^2)' (x2.^2)']; [b,bint,r,rint,stats]=regress(y,X); b,stats
|
code1.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| t = 1/30:1/30:14/30; s = [11.86 15.67 20.6 26.69 33.71 41.93 51.13 61.49 72.9 85.44 99.08 113.77 129.54 146.48]; [p, S] = polyfit(t, s, 2);
Y = polyconf(p, t, S); plot(t, s, 'k+', t, Y, 'r'); xlabel('t'); ylabel('s'); title('二次多项式回归'); legend('原始数据', '拟合曲线');
t = 1/30:1/30:14/30; s = [11.86 15.67 20.6 26.69 33.71 41.93 51.13 61.49 72.9 85.44 99.08 113.77 129.54 146.48];
T = [ones(14, 1), t', (t.^2)']; [b, bint, r, rint, stats] = regress(s', T);
|