在lmer对象上运行参数引导(PBmodcomp)时出错

在lmer对象上运行参数引导(PBmodcomp)时出错,r,lme4,lmer,statistics-bootstrap,R,Lme4,Lmer,Statistics Bootstrap,我正在尝试使用pbkrtest包中的函数PBmodcomp对两个lmer模型进行模型比较。但是,我得到了以下错误 Error in `[<-.data.frame`(`*tmp*`, , rcol, value = c(0.318337014579985, : replacement has 4080 rows, data has 4458 我正在运行的代码是 library(lme4) library(pbkrtest) m2 <- lmer(cognition ~ ag

我正在尝试使用pbkrtest包中的函数PBmodcomp对两个lmer模型进行模型比较。但是,我得到了以下错误

Error in `[<-.data.frame`(`*tmp*`, , rcol, value = c(0.318337014579985,  : 
  replacement has 4080 rows, data has 4458
我正在运行的代码是

library(lme4)
library(pbkrtest)
m2 <- lmer(cognition ~ age + (age | Subject), data = dat, REML = FALSE, na.action = na.omit, control = lmerControl(optimizer = "Nelder_Mead"))
m3 <- lmer(cognition ~ age + gender + (age | Subject), data = dat, REML = FALSE, na.action = na.omit, control = lmerControl(optimizer = "Nelder_Mead"))
pb <- PBmodcomp(m3, m2)
库(lme4)
图书馆(pbkrtest)

m2按照罗兰的建议解决这个问题

dat2 <-dat[complete.cases(dat[,3:4]),] #remove cases with missing values

m2 <- lmer(cognition ~ age + (age | Subject), data = dat2, REML = FALSE, na.action = na.omit, control = lmerControl(optimizer = "Nelder_Mead"))
m3 <- lmer(cognition ~ age + gender + (age | Subject), data = dat2, REML = FALSE, na.action = na.omit, control = lmerControl(optimizer = "Nelder_Mead"))

pb <- PBmodcomp(m3, m2, nsim = 10)

pb
Parametric bootstrap test; time: 3.93 sec; samples: 10 extremes: 0;
large : cognition ~ age + gender + (age | Subject)
small : cognition ~ age + (age | Subject)
         stat df   p.value    
LRT    15.629  1 7.706e-05 ***
PBtest 15.629      0.09091 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

dat2您是否尝试过和
traceback()
debug()
问题?您是否尝试过在安装模型之前删除NAs?我在lmer模型中指定了na.action=na.omit,因此我认为应该删除na。是的,它们是。但这可能导致
m2
m3
的数据不同。因此,我建议在创建模型之前尝试删除它们。感谢罗兰,这解决了这个具体问题。
dat2 <-dat[complete.cases(dat[,3:4]),] #remove cases with missing values

m2 <- lmer(cognition ~ age + (age | Subject), data = dat2, REML = FALSE, na.action = na.omit, control = lmerControl(optimizer = "Nelder_Mead"))
m3 <- lmer(cognition ~ age + gender + (age | Subject), data = dat2, REML = FALSE, na.action = na.omit, control = lmerControl(optimizer = "Nelder_Mead"))

pb <- PBmodcomp(m3, m2, nsim = 10)

pb
Parametric bootstrap test; time: 3.93 sec; samples: 10 extremes: 0;
large : cognition ~ age + gender + (age | Subject)
small : cognition ~ age + (age | Subject)
         stat df   p.value    
LRT    15.629  1 7.706e-05 ***
PBtest 15.629      0.09091 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#first loop with the reduced model
fitlmer.strings.01 <- function(X){
    s <- colnames(X)
    lapply(s, function(.s){
    y <- dat[, .s]
    index <- complete.cases(cbind(y, dat[, "age"]))
    dat <- data.frame(dat[index, ])
    y <- y[index]
    out <- with(dat, lmer(y ~ age + (age | Subject), REML = FALSE, control = lmerControl(optimizer = "Nelder_Mead")))    
    out  
    })
    } 
output.01 <- fitlmer.strings.01(dat[4:5])

#second loop with the full model 
fitlmer.strings.02 <- function(X){
    s <- colnames(X)
    lapply(s, function(.s){
    y <- dat[, .s]
    index <- complete.cases(cbind(y, dat[, "age"]))
    dat <- data.frame(dat[index, ])
    y <- y[index]
    out <- with(dat, lmer(y ~ age + gender + (age | Subject), REML = FALSE, control = lmerControl(optimizer = "Nelder_Mead")))    
    out  
    })
    } 

output.02 <- fitlmer.strings.02(dat[4:5])
pb <- PBmodcomp(output.02[[1]], output.01[[1]], nsim = 10)