我试图将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
非常感谢任何建议。
答案 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*b
是a + b + a:b
的简写,其中a:b
是互动字词。如果我正确地阅读它,你只需要region*treatment*day
,它将扩展到包括所有简单的效果和交互。其他条款是多余的。
另一个注意事项:如果你的结果是长度,那么逻辑回归可能并不完全合适(虽然长度没有进入你的csv,所以我无法确定)。 Logistic回归意味着响应的范围在0和1之间,响应是结果的概率,例如。如上所述,CBPP案例在一段时间内的比例。您是否考虑过非线性回归(橙树生长的例子here和here)?