我正在尝试使用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复杂矩阵。因此,发生错误的具体原因是加权雅可比矩阵不是实值。不知道为什么......
答案 0 :(得分:0)
经过大量挖掘后,我发现这个问题的答案非常明显。我没有意识到我的一个回归变量的某些值有时会变为负值。这个领先(向前跳了几步)到一个复杂的雅可比行列式。