R: gls 错误 "false convergence (8)" 和 glsControl 函数

R: gls error "false convergence (8)" and glsControl function

我发现 运行 从 R 中的 nlme 包中获取广义最小二乘法 (gls) 时的一个常见错误是 "false convergence (8)"。我正在尝试 运行 gls 模型来解释残差的空间依赖性,但我遇到了同样的问题。例如:

library(nlme)

set.seed(2)
samp.sz<-400
lat<-runif(samp.sz,-4,4)
lon<-runif(samp.sz,-4,4)
exp1<-rnorm(samp.sz)
exp2<-rnorm(samp.sz)

resp<-1+4*exp1-3*exp2-2*lat+rnorm(samp.sz)
mod.cor<-gls(resp~exp1+exp2,correlation=corGaus(form=~lat,nugget=TRUE))

Error in gls(resp ~ exp1 + exp2, correlation = corGaus(form = ~lat, nugget = TRUE)) : 
  false convergence (8)

(上面的数据模拟是从here复制的,因为它产生了我面临的同样问题)。

然后,我读到函数 glsControl 有一些参数(maxIter、msMaxIter、returnObject)可以在分析之前设置 运行,这可以解决这个错误。为了理解发生了什么,我将上面的三个参数调整为 500、2000 和 TRUE,并且 运行 与上面相同的代码,但错误仍然出现。我认为 glsControl 根本不起作用,因为 none 结果显示了,即使我已经要求了。

glsControl(maxIter = 500, msMaxIter=2000, returnObject = TRUE)
mod.cor<-gls(resp~exp1+exp2,correlation=corGaus(form=~lat,nugget=TRUE))

为了比较,如果我 运行 具有相同变量的不同模型,它工作正常并且没有显示错误。

例如,仅包含一个解释变量的模型。

mod.cor2<-gls(resp~exp1,correlation=corGaus(form=~lat,nugget=TRUE))
mod.cor3<-gls(resp~exp2,correlation=corGaus(form=~lat,nugget=TRUE))

我真的深入了几个网站,fo运行s 和书籍,拼命搜索试图解决它,然后我才知道 'false convergence' 是一个经常出现的错误,很多用户面对过。但是,以前的帖子中的 none 似乎为我解决了这个问题。我真的认为 glsControl 可以提供替代方案,但事实并非如此。你们知道我该如何解决吗?

非常感谢任何帮助。提前致谢。

问题是金块效应非常小。提供更好的起始值:

mod.cor <- gls(resp ~ exp1 + exp2, 
  correlation = corGaus(c(200, 0.1), form = ~lat, nugget = TRUE))
summary(mod.cor)
#<snip>
#Correlation Structure: Gaussian spatial correlation
# Formula: ~lat 
# Parameter estimate(s):
#       range       nugget 
#2.947163e+02 5.209379e-06
#</snip>

请注意,即使没有错误或警告,此模型也可能对起始值敏感。

我想引用 library(lme4); help("convergence"):

The lme4 package uses general-purpose nonlinear optimizers (e.g. Nelder-Mead or Powell's BOBYQA method) to estimate the variance-covariance matrices of the random effects. Assessing reliably whether such algorithms have converged is difficult.

我相信类似的情况也适用于此。这个模型显然是有问题的,你应该感谢得到这个错误。您至少应该检查拟合如何随着不同的起始值而变化,并尝试增加迭代次数或降低公差。最后,我建议寻找一个更适合数据的模型(我们知道这将是一个 OLS 模型,其中包括 lat 作为线性预测变量)。

PS:良好的编码风格在适当的地方使用空格。