使用 MuMIn::dredge 时模型无法收敛
Models fail to converge when using MuMIn::dredge
我在 R 中的 MuMIn::dredge
函数中遇到一些错误,不知道如何解决。
Here是我的数据...
library(lme4)
library(MuMIn)
library(arm)
我构建了一个全局模型:
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
对每个 state
的 year
的线性回归中获得的残差。如果我使用 yld
作为响应,dredge
工作正常。任何帮助或建议将不胜感激。
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
tl;dr 我认为这些是误报。我在数据或模型中没有发现任何可疑之处。似然曲线在估计 space 的边缘完全平坦,这搞砸了收敛检查(这很不寻常,但没有任何问题)。
正在复制您的设置:
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)
查看数据:
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")
这里发生的事情不多,但也没什么奇怪的。
查看标准化模型系数:
library(dotwhisker)
dwplot(stdz.model)+geom_vline(xintercept=0,lty=2)
预测变量之间没有巨大的成对相关性:
cor(as.matrix(dd[,3:8]))
pairs(as.matrix(dd[,3:8]),gap=0,cex=0.5)
让我们找出其中一个损坏的模型:
options(warn=1)
model.set <- dredge(stdz.model,trace=TRUE)
并尝试一下:
test1 <- lmer(formula = yld.res ~ z.brk + z.onset + (1 | state),
data = model.frame(stdz.model),
REML = FALSE)
仔细看:
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)
再说一次,没什么好笑的。
让我们手动探索模型拟合:只有一个显式参数(州间标准差)。
tt <- as.function(test1)
tvec <- seq(0,1,length=501)
dvec <- sapply(tvec,tt)
par(las=1,bty="l")
plot(tvec,dvec,type="l")
看起来不错。
我在 R 中的 MuMIn::dredge
函数中遇到一些错误,不知道如何解决。
Here是我的数据...
library(lme4)
library(MuMIn)
library(arm)
我构建了一个全局模型:
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
对每个 state
的 year
的线性回归中获得的残差。如果我使用 yld
作为响应,dredge
工作正常。任何帮助或建议将不胜感激。
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
tl;dr 我认为这些是误报。我在数据或模型中没有发现任何可疑之处。似然曲线在估计 space 的边缘完全平坦,这搞砸了收敛检查(这很不寻常,但没有任何问题)。
正在复制您的设置:
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)
查看数据:
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")
这里发生的事情不多,但也没什么奇怪的。
查看标准化模型系数:
library(dotwhisker)
dwplot(stdz.model)+geom_vline(xintercept=0,lty=2)
预测变量之间没有巨大的成对相关性:
cor(as.matrix(dd[,3:8]))
pairs(as.matrix(dd[,3:8]),gap=0,cex=0.5)
让我们找出其中一个损坏的模型:
options(warn=1)
model.set <- dredge(stdz.model,trace=TRUE)
并尝试一下:
test1 <- lmer(formula = yld.res ~ z.brk + z.onset + (1 | state),
data = model.frame(stdz.model),
REML = FALSE)
仔细看:
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)
再说一次,没什么好笑的。
让我们手动探索模型拟合:只有一个显式参数(州间标准差)。
tt <- as.function(test1)
tvec <- seq(0,1,length=501)
dvec <- sapply(tvec,tt)
par(las=1,bty="l")
plot(tvec,dvec,type="l")
看起来不错。