在lmer对象上运行参数引导(PBmodcomp)时出错
我正在尝试使用pbkrtest包中的函数PBmodcomp对两个lmer模型进行模型比较。但是,我得到了以下错误在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
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)