R语言 Anova函数在mblogit模型上不起作用?

jhkqcmku  于 2023-05-20  发布在  Git
关注(0)|答案(1)|浏览(118)

我使用mblogit函数运行一个多项模型,狩猎季节作为混合效应。模型运行得很好,但我无法运行Anova函数(car包)来获得偏差表的分析。我得到以下错误:
SS[n.terms + 1] <- if(missing(error))sumry$sigma^2 * mod$df.residual else error中的错误。SS:替换长度为零
我的代码如下

library(mclogit)
modeldata$Hunting_season <- modeldata$`Hunting season`
modeldata$Age_class <- modeldata$`Age class`
model_mult <- mblogit( formula = Age_class ~ Group*Sex + Period,  
              random = ~ 1|Hunting_season , 
              data = modeldata)
summary(model_mult)
Anova(model_mult)

关于什么可能导致错误,或者我可以使用哪个替代函数,有什么建议吗?

aemubtdh

aemubtdh1#

要立即获得满足感并不容易(Anova()函数会自动为模型中每个预测变量的效果提供假设检验)。

library(mclogit)
library(car)  ## for Anova
data("housing", package = "MASS")
house.mblogit <- mblogit(Sat ~ Infl*Type + Cont, weights = Freq,
                              data = housing)

您可以尝试methods("Anova"),看看car::Anova()可以适应哪些类型的模型(对象)(不幸的是,不是mblogitmclogit对象)。你也可以试试

lapply(class(house.mblogit), function(c) methods(class = c))

查看哪些方法可用于您拟合的模型(尽管最后一组条目,即类lm,可能并不真正相关...)
有一个anova()方法,但它只适用于比较已经拟合的模型的嵌套集-而不是分解单个模型。
不过,您可以通过拟合嵌套模型(通过在公式右侧添加/减去项或替换RHS)手动完成此操作。坏消息是,你只能用这种方式比较模型的嵌套序列,并得出关于该序列中包含/排除的项的重要性的结论。
下面是一个例子:

## infl, type, and interaction (drop cont)
m_infltype <- update(house.mblogit, . ~ . - Cont)
## additive effects of infl and type (and cont), no interaction
m_infltypeadd <- update(house.mblogit, . ~ . - Infl*Type + Infl + Type)
m_infl <- update(house.mblogit, . ~ . - Infl*Type + Infl)
m_type <- update(house.mblogit, . ~ . - Infl*Type + Type)
## Cont only
m_cont <- update(house.mblogit, . ~ Cont)
m_null <- update(house.mblogit, . ~ 1)
anova(house.mblogit, m_infltypeadd, m_infl, m_cont, m_null,
       test = "Chisq")

计算复杂模型中项的显著性的困难在于(在平衡实验设计中的线性模型之外)显著性取决于评估项的顺序。car::Anova()有更好的方法来做到这一点(它的“类型2”Anova评估模型中包含的所有其他项的焦点项,除了涉及该项的高阶相互作用;其“类型3”不同-请参阅?car::Anova中的“详细信息”和“警告”部分)。
替代方案将是计算AIC表,例如关于MuMIn::dredge

h2 <- update(house.mblogit, na.action = na.fail) ## required for dredge()
MuMIn::dredge(h2)

相关问题