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:良好的编码风格在适当的地方使用空格。
我发现 运行 从 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:良好的编码风格在适当的地方使用空格。