登录论坛

查看完整版本 : [求助]用nlinfit回归参数计算结果中的误差问题~~~


veronicascut
2008-10-07, 13:58
刚刚用matlab不久 请各位高手指教啊~~~

我在回归几个参数的时候, 用nlinfit函数进行回归, 计算之后返回的结果是:参数值、y计算值、以及残差r。但是残差r值很奇怪,是从小到大排列的…………第一个r大概是0.001,到最后一个都已经增大到0.3多了…………

不知道怎么会这样,请高手指导一下啊 ~~ 小妹不胜感激!!!

谢谢大家!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

meteora1005
2008-10-08, 00:40
很晚了才看到:confused: 首先第二个输出参数才是残差,第三个输出参数是Jacobian矩阵,它们都是估计预测误差需要的数据,关于这个雅可比矩阵是干什么的,我也不太清楚,但作一般的问题好像用不到它。至于你说的从小到大排列的输出量是有点奇怪,不行你把程序贴上来帮你看看。

veronicascut
2008-10-08, 10:27
谢谢~~~可是我程序超级长的……能不能给个联系方式我传给你?Email之类的~~~

还有,我只要它输出了两个参数,就是参数值和残差。在程序里面又要求将计算了的参数带入求出y值。不过结果就比较奇怪了~~~

slgu
2008-10-08, 11:39
若能将数据(x,y)置上,可以看看问题所在。nlinfit作非线性回归,本不要很长程序,但须给定合适的初值(beta0),否则结果可能离最优结果相距甚远。至于其中的Jacobian矩阵,是所估参数的标准化的方差协方差阵,即对角线元素是相应参数标准化的方差,非对角线元素是相应(两个)参数的标准化的协方差。所谓标准化是将离回归方差视为1。

veronicascut
2008-10-08, 16:53
这个是我程序的第一个部分:

m = zeros(1);
x=[0.7219 0.0058 0.2723
0.7221 0.0049 0.2730
0.7134 0.0039 0.2827
0.7327 0.0029 0.2644
0.7244 0.0022 0.2734
0.7247 0.0010 0.2473];
for i=1:1:6
n(i)=(x(i,2)/853.92)/(x(i,1)/44.01+x(i,2)/853.92+x(i,3)/89.93);
end
n
n1 = (x(:,2)./853.92)./(x(:,1)./44.01+x(:,2)./853.92+x(:,3)./89.93);
t0 = [0 0 0 0 0 0];
zx = zeros(1);
%y = Obj(t0, zx)
[t,r]=nlinfit(x,n1,@Obj,t0)
t=t'

就是回归参数 t,这里面给了初值了。

这个里面 t 是另一个表达式 y 中的参数,
而上面程序里面的 n1 是实验值, y 是计算值。
也就是说,我要把 y 的值与这个程序里面的 n1 值用nlinfit函数运算之后拟合出参数 t
所以我后面还有一个很长的程序 Obj,是关于 t 和 y 的计算
那个程序Obj在上面调用了~

然后结果是这个样子的:

实验值:
n1 =

1.0e-003 *

0.3494
0.2950
0.2359
0.1733
0.1321
0.0609

计算值:
y =

1.0e-003 *

0.0001
0.0008
0.0029
0.0206
0.0261
0.1236

残差:
r =

1.0e-003 *

0.3493
0.2943
0.2330
0.1527
0.1060
-0.0627

我个人认为既然是拟合回归,那么 计算值y 和 实验值 n1 应该很接近吧。
但是实际结果却是 n1 值与 r值很接近……
y的值也很奇怪……

请指教一下 这个到底是怎么回事啊!!!

我刚刚开始学习matlab 还有很多基本的概念不懂 这个是不是我把什么理解错了???

非常感谢~~~