当在调用框架中修改数据对象时,避免confint.merMod在lme4中的加权模型上失败

问题描述

当我使用带重量的lme4 glmer函数时,如果修改传递给glmer的数据对象,某些功能(例如confint)将不再在模型上工作,那么我将面临一个问题。这是一个示例:

library(lme4)

set.seed(1)
n <- 1000
df <- data.frame(
  y=rbinom(n,1,.5),w=runif(n,1)*.1+.95,g=as.integer(round(runif(n,4)))
)
m <- glmer(cbind(y,1-y)~(1|g),data=df,weights=w,family=binomial())
confint(m)
df$w <- df$w*2
confint(m)

第二次调用confint会出现此错误:

Computing profile confidence intervals ...
Error in profile.merMod(object,which = parm,signames = oldNames,...) : 
  Profiling over both the residual variance and
fixed effects is not numerically consistent with
profiling over the fixed effects only

这似乎与profile函数有关,因为该函数在修改数据框后不起作用。

以下方法似乎可以消除对数据对象的依赖,但是我不知道是否可能会有不良的副作用,这让我有些不安:

glmer2 <- function(...){
  cl <- match.call()
  df <- eval.parent(cl$data)
  cl[1] <- call("glmer")
  cl$data <- as.name("df")
  eval(cl)
}
m <- glmer2(cbind(y,family=binomial())
confint(m)
df$w <- df$w*2
confint(m)

(冲突结果不变)

之所以需要这样的原因是因为我正在创建一系列模型,并且需要重新计算每个模型之间的权重,而保留所有数据对象将非常混乱。

为什么模型函数似乎依赖于调用环境中仍然存在且未更改的数据对象?还有解决这个问题的更好方法吗?

(R版本3.6.3(2020-02-29),x86_64-redhat-linux-gnu,lme4_1.1-21)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...