首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MuMIn::疏浚时,模型无法收敛

使用MuMIn::疏浚时,模型无法收敛
EN

Stack Overflow用户
提问于 2016-07-30 18:37:35
回答 1查看 1.4K关注 0票数 2

我从R中的MuMIn::dredge函数中得到了一些错误,不知道如何解决它。

这里是我的数据。

代码语言:javascript
复制
library(lme4)
library(MuMIn)
library(arm)

我建立了一个全球模型:

代码语言:javascript
复制
options(na.action = "na.fail") 
global.model<-lmer(yld.res ~ rain + brk+ act + 
    onset + wid + (1|state),data=dat,REML=FALSE)
stdz.model <- standardize(global.model,standardize.y = FALSE)
model.set <- dredge(stdz.model)

我得到以下错误,我不知道为什么会发生。为了澄清起见,yld.res是从yld对每个stateyear线性回归中得到的残差。如果我使用dredge作为响应,那么yld可以正常工作。如有任何帮助或建议,将不胜感激。

代码语言:javascript
复制
Fixed term is "(Intercept)"
Warning messages:
1: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
 unable to evaluate scaled gradient
2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
 Model failed to converge: degenerate  Hessian with 1 negative eigenvalues
3: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
 unable to evaluate scaled gradient
4: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
 Model failed to converge: degenerate  Hessian with 1 negative eigenvalues
5: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
 unable to evaluate scaled gradient
6: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
 Model failed to converge: degenerate  Hessian with 1 negative eigenvalues
7: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
unable to evaluate scaled gradient
8: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
Model failed to converge: degenerate  Hessian with 1 negative eigenvalues
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-01 19:55:48

博士,我认为这些是假阳性。我看不出数据和模型有什么可疑之处。在估计空间的边缘,似然曲线是完全平坦的,这会破坏收敛性检查(这是不寻常的,但没有任何问题)。

复制设置:

代码语言:javascript
复制
dd <- read.csv("SOtmpdat.csv")
library(lme4)
library(MuMIn)
library(arm)
options(na.action = "na.fail") 
global.model <- lmer(yld.res ~ rain + brk+ act + onset +
                   wid + (1|state), data=dd,REML=FALSE)
stdz.model <- standardize(global.model,standardize.y = FALSE)
model.set <- dredge(stdz.model)

查看数据:

代码语言:javascript
复制
library(ggplot2); theme_set(theme_bw())
library(reshape2)
mm <- melt(dd,id.var=c("year","state","yld.res"))
ggplot(mm,aes(value,yld.res,colour=state))+geom_point()+
    facet_wrap(~variable,scale="free")+geom_smooth(method="lm")

这里没什么可说的,但也没什么特别的。

看看标准化模型的系数:

代码语言:javascript
复制
library(dotwhisker)
dwplot(stdz.model)+geom_vline(xintercept=0,lty=2)

预测因素之间没有巨大的两两相关:

代码语言:javascript
复制
cor(as.matrix(dd[,3:8]))
pairs(as.matrix(dd[,3:8]),gap=0,cex=0.5)

让我们找出其中一个打破的模型:

代码语言:javascript
复制
options(warn=1)
model.set <- dredge(stdz.model,trace=TRUE)

试一试:

代码语言:javascript
复制
test1 <- lmer(formula = yld.res ~ z.brk + z.onset + (1 | state),
       data = model.frame(stdz.model),
       REML = FALSE)

更仔细地看:

代码语言:javascript
复制
mf <- transform(model.frame(stdz.model),
                z.onset.cat=cut_number(z.onset,4))
ggplot(mf,
       aes(z.brk,yld.res,
           colour=state))+geom_point()+
    facet_wrap(~z.onset.cat)

再说一次,没什么好搞笑的。

让我们手工探索适合的模型:只有一个显式参数(州际标准差)。

代码语言:javascript
复制
tt <- as.function(test1)
tvec <- seq(0,1,length=501)
dvec <- sapply(tvec,tt)
par(las=1,bty="l")
plot(tvec,dvec,type="l")

看上去很好。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38677310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档