【发布时间】:2014-04-12 23:35:44
【问题描述】:
我正在尝试使用 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×2),temp2' 是 N×1,beta0 和 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
和我的响应矩阵:
temp2 =
-0.011811061934317
0.987582922964869
0.010621342764736
0.135001167018444
0.091950680609212
我可以看到这里出了点问题(我的回归矩阵的 col2 中的数量级已关闭。我会解决这个问题,如果结果证明是原因,我会给出解释。我也在努力打印出 J. 和 JW
编辑2: 我能够在错误发生之前打印出 JW 并发现 JW 是一个 Nx2 复矩阵。所以发生错误的具体原因是加权雅可比矩阵不是实值。不知道为什么...
【问题讨论】:
-
什么是
NonLinearFit?它似乎不是标准 Matlab 或通用工具箱的一部分。您可能使用NonLinearModel.fit或nlinfit吗?请在您实际调用此函数的位置显示您的代码。 -
@horchler,是的,你是对的,我的意思是 NonLinearModel.fit。我相应地编辑了我的代码并添加了我调用该函数的行。
-
@Amir 在达到 2k 代表之前最好不要继续添加标签
标签: matlab regression