R中glmer在数据顺序打乱时的不同结果

如何解决R中glmer在数据顺序打乱时的不同结果

我发现 lme4 包中的 glmer 有时会给出略有不同的结果,例如AIC/BIC 和/或固定/随机因素,当模型有点复杂并且数据顺序被打乱时。因此,我在 AIC 或 BIC 方面获得了最佳结果。这有意义吗?

第二个问题是分歧从何而来?理论上,只要 i.i.d 假设成立,数据的顺序就无关紧要。不同的结果表明 glmer 使用(可能是迭代)依赖于初始值的算法。

如果您能提供任何反馈或建议,我将不胜感激。

为了您的信息,这里是我测试的示例代码,假设多个从业者根据医学图像中的四种类型的特征进行二元诊断。

# data generation
nPracts <- 40 # number of practitioners
nImages <- 100 # number of medial images
var1 <- rep(seq(-20,20,10),20) # 4 image features
var2 <- c(rep(-20,20),rep(-10,rep(0,rep(10,rep(20,20))
var3 <- rep(seq(-20,25,5),10)
var4 <- c(rep(10,rep(-20,20))
fix1 <- 0.05 # 4 fixed factors
fix2 <- 0.5
fix3 <- 0.1
fix4 <- 0.3
rand1 <- rnorm(nPracts,mean=0,sd=0.1) # 4 random factors (practitioner-dependent)
rand2 <- rnorm(nPracts,sd=0.05)
rand3 <- rnorm(nPracts,sd=0.01)
rand4 <- rnorm(nPracts,sd=0.03)

data <- data.frame()
for (j in 1:nPracts){
  for (i in 1:nImages){
    z <- var1[i]*(fix1+rand1[j])+var2[i]*(fix2+rand2[j])+var3[i]*(fix3+rand3[j])+var4[i]*(fix4+rand4[j])
    pr <- 1/(1+exp(-z))
    y <- rbinom(1,1,pr) # binary diagnosis
    data<- rbind(data,c(j,var1[i],var2[i],var3[i],var4[i],y))
  }
}
colnames(data) <- c('practitioner','var1','var2','var3','var4','diagnosis')
data$diagnosis<- factor(data$diagnosis)
data$practitioner <- factor(data$practitioner)

# refit model 5 times to see the divergence
for (k in 1:5){
  set.seed(123+k)
  data2 <- data[sample(nrow(data)),] # change data order
  fit <- glmer(diagnosis~ var1+var2+var3+var4+(0+var1|practitioner)+(0+var2|practitioner)+(0+var3|practitioner)+(0+var4|practitioner),data=data2,family=binomial(link="logit"))
  print(fit)
}

这是来自最后一个块的两个样本结果。它们略有不同。

      AIC       BIC    logLik  deviance  df.resid 
 511.9535  568.5999 -246.9767  493.9535      3991 
Random effects:
 Groups         Name Std.Dev.
 practitioner   var1 0.099567
 practitioner.1 var2 0.080622
 practitioner.2 var3 0.002188
 practitioner.3 var4 0.046851
Number of obs: 4000,groups:  practitioner,40
Fixed Effects:
(Intercept)         var1         var2  
    0.39222      0.05796      0.56366  
       var3         var4  
    0.10046      0.31254 
      AIC       BIC    logLik  deviance  df.resid 
 512.0151  568.6616 -247.0076  494.0151      3991 
Random effects:
 Groups         Name Std.Dev.
 practitioner   var1 0.100646
 practitioner.1 var2 0.080578
 practitioner.2 var3 0.006207
 practitioner.3 var4 0.044535
Number of obs: 4000,40
Fixed Effects:
(Intercept)         var1         var2  
    0.26154      0.05492      0.54916  
       var3         var4  
    0.10028      0.30373  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?