带有logit族的lme4中的qlogis(p)出错

时间:2016-03-10 00:51:34

标签: r distribution lme4

我试图将GLMM与不同温度下不同地区的鱼类幼虫的体型(体长)数据拟合。每个区域 - 温度组合具有至少10个个体和多达30个个体的测量值。有关数据是在生命的前30天收集的,在此期间,生长不是完全线性的。原始数据看起来像是逻辑(S形)曲线的下半部分。

我正在使用lme4和我想要的模型,如下所示:

length.mod1<-glmer(length~region+treatment+day+region*treatment+
  region*day+treatment*day+region*treatment*day+(1|aquarium)+(1|tub),
  data=lengthdata, family=logit)

我还指定了如下因素:

region<-factor(lengthdata$region)
day<-factor(lengthdata$day)
treatment<-lengthdata$treatment
length<-lengthdata$length

当我运行模型时,我得到以下错误,如下所示:

  

qlogis(p)中的错误:参数&#34; p&#34;缺少,没有默认

我已经尝试了Google,此论坛以及lme4的文档,并且未找到任何对此错误的引用。我知道它与使用family参数为数据指定的分布有关,但我不确定究竟是什么。

数据可在此处获取:length data

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

家庭电话有两个部分。一个是响应的概率分布(例如二项式,泊松,......),另一个是链接函数,它将响应与线性预测器联系起来。

family中的glmer()参数(如glm())非常灵活。引用?glm

  

对于glm,这可以是一个命名一个族函数的字符串,a   家庭功能或家庭功能呼叫的结果。

?family为我们提供了有效的系列和相应的链接功能。因此,对于具有logit链接功能的二项式族,binomial(link = logit)binomial(link = 'logit')'binomial'都是有效系列规范的示例。最后一个是有效的,因为默认情况下,链接函数是规范链接,即。 logit链接。在您的示例中,您(我认为)意味着指定链接函数,但R需要概率分布。

检查系列的代码是:

if (is.character(family)) 
    family <- get(family, mode = "function", envir = parent.frame(2))
if (is.function(family)) 
    family <- family()

错误指定家庭的典型错误如下:

library(lme4)
library(boot)
f1 <- cbind(incidence, size - incidence) ~ period + (1|herd)
m1 <- glmer(f1, data = cbpp, family = 'foo')
##Error in get(family, mode = "function", envir = parent.frame(2)) : 
##  object 'foo' of mode 'function' was not found

在您的情况下,logit是由boot导入的函数(并且不是有效的系列对象),因此在出错之前到达第四行(因为logit需要至少一个论点,并没有得到一个)。一个正确的家庭规范是:

m1 <- glmer(f1, data = cbpp, family = binomial(link = 'logit'))

另一个注意事项:如果您尝试在模型中指定互动,a*ba + b + a:b的简写,其中a:b是互动字词。如果我正确地阅读它,你只需要region*treatment*day,它将扩展到包括所有简单的效果和交互。其他条款是多余的。

另一个注意事项:如果你的结果是长度,那么逻辑回归可能并不完全合适(虽然长度没有进入你的csv,所以我无法确定)。 Logistic回归意味着响应的范围在0和1之间,响应是结果的概率,例如。如上所述,CBPP案例在一段时间内的比例。您是否考虑过非线性回归(橙树生长的例子herehere)?