在matlab中使用NonLinearModel.fit获取复值Jacobian矩阵

时间:2014-03-10 01:05:27

标签: matlab regression

我正在尝试使用Matlab中的NonLinearModel.fit()函数来回归两个变量。但是,我收到以下错误:

Error using internal.stats.getscheffeparam>ValidateParameters
(line 182)
If non-empty, JW must be a numeric, real matrix.

Error in internal.stats.getscheffeparam (line 110)
[J,VF,VP,JW,Intopt,TolSVD,TolE,VQ,usingJ] =
ValidateParameters(J,VF,VP,JW,Intopt,TolSVD,TolE,VQ,allowedIntopt);

Error in nlinfit (line 340)
    sch =
    internal.stats.getscheffeparam('WeightedJacobian',J(~nans,:),'Intopt','observation','VQ',VQ);

Error in NonLinearModel/fitter (line 1121)
               [model.Coefs,~,J_r,model.CoefficientCovariance,model.MSE,model.ErrorModelInfo,~]
            = ...

Error in classreg.regr.FitObject/doFit (line 219)
        model = fitter(model);

Error in NonLinearModel.fit (line 1484)
        model = doFit(model);

Error in getMatrix (line 101)
    nlm =
    NonLinearModel.fit(regressorMatrix',temp2',modelfun,beta0); 

我的regressorMatrix为2乘N(转置为N-by-2),temp2'为N-by-1,beta0和{{1}由下列人员给出:

model

有人可以帮我弄清楚造成这个错误的原因吗?

编辑:好的,到目前为止没有任何帮助,所以我会尝试更具体。我知道这个错误指的是加权雅可比矩阵。我只是不确定为什么这个雅各比派不会真正有价值。

以下是我的回归矩阵的前几行:

model =@(b,x)b(1).*x(:,1).*x(:,2).^b(2);
beta0=[.14 .6];
nlm = NonLinearModel.fit(regressorMatrix',temp2',model,beta0);

和我的回应矩阵:

regressorMatrix =

1.0e+07 *

0.000000000776613   3.762601240855837
0.000000001683014   3.762601240855837
0.000000001496807   3.762601240855837
0.000000000753495   3.762601240855837

我可以看到这里有些问题(我的回归矩阵的col2中的数量级是关闭的。我会解决这个问题,如果结果是原因,我会回过头来解释一下。我也正在打印J.和JW

EDIT2: 我能够在错误发生之前打印出JW并发现JW是Nx2复杂矩阵。因此,发生错误的具体原因是加权雅可比矩阵不是实值。不知道为什么......

1 个答案:

答案 0 :(得分:0)

经过大量挖掘后,我发现这个问题的答案非常明显。我没有意识到我的一个回归变量的某些值有时会变为负值。这个领先(向前跳了几步)到一个复杂的雅可比行列式。