r-为什么我在nls()输出中得到如此奇怪的t统计数据和p值



我正在用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*FAi=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")

相关内容

  • 没有找到相关文章

最新更新