繁体   English   中英

我如何克服执行lmer函数时遇到的错误:if(REML)p else 0L中的错误:参数不能解释为逻辑?

[英]How do I overcome this error in execution of lmer function: Error in if (REML) p else 0L : argument is not interpretable as logical?

我已经检查了这篇文章中讨论的防御方法,以防止出现此错误,但仍然无法解决。

model<-lmer(Proportion~Plot+Treatment+(1|Plot/Treatment),binomial,data=data)

if(REML)p else 0L中的错误:参数不可解释为逻辑

tl; dr您应该改用glmer 因为您尚未命名参数,所以R会按位置(顺序)对其进行解释。 lmer的第三个参数是REML ,因此R认为您指定的是REML=binomial ,这不是合法值。 family glmer的第三个参数,因此,如果您使用glmer ,这会起作用(类似:请参见下文),但是如果有可能混淆,通常更安全地明确命名参数。

一个可重现的示例会很好,但是:

model <- glmer(Proportion~Plot+Treatment+(1|Plot/Treatment),
    family=binomial,data=data)

是一个起点。 我预计会有更多问题:

  • 如果您的数据不是伯努利(0/1)(我猜不是因为您的回答称为Proportion ),那么您需要包括每次试验中采样的总数,例如通过指定weights参数
  • 您的模型中的PlotTreatment既是固定的,又是随机效果的分组变量; 那行不通。 我看到Crawley 确实在R书 (google图书链接) 中建议了这一点

不要按照他的建议去做,这没有任何意义 复制:

library(RCurl)
url <- "https://raw.githubusercontent.com/jejoenje/Crawley/master/Data/insects.txt"
dd <- read.delim(text=getURL(url),header=TRUE)
## fix typo because I'm obsessive:
levels(dd$treatment) <- c("control","sprayed") 
library(lme4)
model <- glmer(cbind(dead,alive)~block+treatment+(1|block/treatment),
               data=dd,family=binomial)

如果我们看一下组间标准差,我们会发现两个组的标准差均为零。 对于block正好为零,因为block已包含在固定效果中。 它不一定是针对treatment:block相互作用(我们具有treatment ,但没有固定作用下的blocktreatment之间的相互作用),但这是因为治疗之间的差异很小:

VarCorr(model)
##  Groups          Name        Std.Dev.  
##  treatment:block (Intercept) 2.8736e-09
##  block           (Intercept) 0.0000e+00

从概念上讲,将块视为随机效果更有意义:

dd <- transform(dd,prop=dead/(alive+dead),ntot=alive+dead)
model1 <- glmer(prop~treatment+(1|block/treatment),
               weights=ntot,
               data=dd,family=binomial)
summary(model)
## ...
## Formula: prop ~ treatment + (1 | block/treatment)
## Random effects:
##  Groups          Name        Variance Std.Dev.
##  treatment:block (Intercept) 0.02421  0.1556  
##  block           (Intercept) 0.18769  0.4332  
## Number of obs: 48, groups:  treatment:block, 12; block, 6
## 
## Fixed effects:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)       -1.1640     0.2042  -5.701 1.19e-08 ***
## treatmentsprayed   3.2434     0.1528  21.230  < 2e-16 ***

有时您可能希望将其视为固定效果:

model2 <- update(model1,.~treatment+block+(1|block:treatment))
summary(model2)
## Random effects:
##  Groups          Name        Variance  Std.Dev. 
##  block:treatment (Intercept) 5.216e-18 2.284e-09
## Number of obs: 48, groups:  block:treatment, 12
## 
## Fixed effects:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)       -0.5076     0.0739  -6.868 6.50e-12 ***
## treatmentsprayed   3.2676     0.1182  27.642  < 2e-16 ***

现在,逐块处理的交互方差实际上为零(因为如果将块视为固定效应,则块会吸收更多的可变性)。 但是,估计的喷涂效果几乎相同。

如果您担心过度分散,则可以添加单个级别的随机效果(或使用MASS::glmmPQLlme4不再适合于拟似然模型)

dd <- transform(dd,obs=factor(seq(1:nrow(dd))))
model3 <- update(model1,.~.+(1|obs))

## Random effects:
##  Groups          Name        Variance  Std.Dev. 
##  obs             (Intercept) 4.647e-01 6.817e-01
##  treatment:block (Intercept) 1.138e-09 3.373e-05
##  block           (Intercept) 1.813e-01 4.258e-01
## Number of obs: 48, groups:  obs, 48; treatment:block, 12; block, 6
## 
## Fixed effects:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)       -1.1807     0.2411  -4.897 9.74e-07 ***
## treatmentsprayed   3.3481     0.2457  13.626  < 2e-16 ***

观察水平的影响已有效取代了逐块治疗(目前接近零)。 同样,估计的喷涂效果几乎没有改变(但是其标准误差原来的两倍...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM