我正在用nls((函数运行一个非线性多元回归,该函数有一个因变量(一次生产总值(GPP((和三个自变量(太阳辐照度(RAD(、绿色部分覆盖率(GFC(和体积含水量(VWC((。我正试图遵循Magnani等人(2022(的模型,即:GPP=(Fα0RAD/F+α0RAD(*(A0+A1GFC+A2VWC(+ε,其中F,α0,A0,A1,A2是要估计的参数。
这是我使用的代码:
nls.3<- nls(GPP~(F*α0*RAD/(F+α0*RAD))*(A0+(A1*GFC)+(A2*VWC)), data = SCALED,start=list(F=-2.16, α0=-0.031, A0=0.021, A1=7.31, A2=0.0024),control=nls.control( minFactor=2^-148, warnOnly=TRUE,maxiter=10000))
在这次尝试中,我将引用模型的估计参数作为起始值(我的数据来自同一个站点,但年份不同(。
这是我得到的输出:
Formula: GPP ~ (F * α0 * RAD/(F + α0 * RAD)) *
(A0 + (A1 * GFC) + (A2 * VWC))
Parameters:
Estimate Std. Error t value Pr(>|t|)
F -4.063e+00 2.488e+08 0 1
α0 -5.831e-02 3.571e+06 0 1
A0 2.508e-03 1.536e+05 0 1
A1 8.720e-01 5.341e+07 0 1
A2 2.864e-04 1.754e+04 0 1
Residual standard error: 1.003 on 278 degrees of freedom
Number of iterations till stop: 10000
Achieved convergence tolerance: 0.5849
Reason stopped: il numero di iterazioni ha superato il massimo di 10000
------
Residual sum of squares: 279
------
t-based confidence interval:
------
Correlation matrix:
a b L d e
a 1 1 1 1 1
b 1 1 1 1 1
L 1 1 1 1 1
d 1 1 1 1 1
e 1 1 1 1 1
我从来没有看到过类似的输出,所有的t统计数据都为0,所有的p值都为1。
有人能告诉我我做错了什么吗?
[或者还有其他方法可以运行此模型?]
以下是我的数据头的样本(所有变量都是标准化的(:
RAD GFC VWC GPP
1 -0.2491831 -1.0107985 1.4436443 0.3294411
2 -0.2171896 -0.8891009 -1.2268249 0.8456750
3 -0.1498026 0.9968661 -0.8714393 -0.4678534
4 0.2738084 -1.0062102 -1.6228261 0.3982723
5 -0.5789165 -0.6060990 -0.9932858 0.6449174
6 0.1203928 -0.6509521 -0.4957459 0.1057398
这不是软件问题。这是模型的一个根本问题,因为它是不可识别的。如果(F,a0,A1,A2,A3(是一个解,那么用(F/s,a0/s,sA1,sA2,s*A3(替换它,对于任何非零标量s都会给出相同的拟合值。用其他软件获得的答案有点误导,因为有无限多的解。
例如,对i=0,1,2进行以下转换:a0=b0*F
和Ai=Bi/(b0*F)
。然后右手边变成下面的4个参数,而不是5个参数。
(RAD/(1 + b0 * RAD)) * (B0 + (B1 * GFC) + (B2 * VWC))
使用nls的plinear算法,我们只需要为非线性输入的参数提供起始值,因此只有b0需要起始值。为了使用它,在右侧提供一个矩阵,每个线性参数有一列,如图所示。您可能需要一个不同的起始值。
nls(GPP ~ RAD/(1 + b0 * RAD) * cbind(B0 = 1, B1 = GFC, B2 = VWC),
data = SCALED, start = list(b0 = 1), algorithm = "plinear")