[英]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)
是一個起點。 我預計會有更多問題:
Proportion
),那么您需要包括每次試驗中采樣的總數,例如通過指定weights
參數 Plot
和Treatment
既是固定的,又是隨機效果的分組變量; 那行不通。 我看到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
,但沒有固定作用下的block
與treatment
之間的相互作用),但這是因為治療之間的差異很小:
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::glmmPQL
; lme4
不再適合於擬似然模型)
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.