簡體   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