问题描述
当我使用带重量的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 (将#修改为@)