我正在尝试运行零膨胀负二项式混合模型。我进行了一项实验,给成年蜗牛提供富磷饮食和贫磷饮食 (
P
)。这些蜗牛都来自不同的科;有10个家庭(Lineages
)。我们还有 3 个倍性水平(二倍体、三倍体、四倍体)。谱系是一个随机因素,并且总是嵌套在倍性水平之下。例如,谱系 A 只能是二倍体。它永远不可能是三倍体或四倍体。我的因变量是胚胎计数,它是零膨胀的,最高胚胎数量是 49。我们测量了成年长度 (Length
),因为它与胚胎数量有显着的线性关系。
这是我的代码:
model5 <- zeroinfl(Embryonumber ~ (Ploidy/1|Lineage) + P:Ploidy + Length,
data = x, dist = "negbin")
summary(model5)
我认为我要求 R 运行的是一个零膨胀负二项式混合模型。依赖的是胚胎数量。倍性和 P 是固定因素,我将它们作为独立因素及其相互作用包括在内。长度是一个协变量。谱系是随机的并且嵌套在倍性中 - 谱系不能也不应该是独立的。
但是我收到此错误:
Error in Ploidy/1 : non-numeric argument to binary operator
我这里有两个想法:1)我的数据格式错误或2)编码嵌套在固定因子错误中的随机因子。
当我运行数据摘要时 (
summary (data)
),我收到:
Lineage Ploidy P SnailLetterSymbol Length Embryonumber
Length:99 Length:99 Length:99 Length:99 Min. :3.500 Min. : 0.000
Class :character Class :character Class :character Class :character 1st Qu.:4.000 1st Qu.: 2.000
Mode :character Mode :character Mode :character Mode :character Median :4.100 Median : 6.000
Mean :4.219 Mean : 9.364
3rd Qu.:4.500 3rd Qu.:14.000
Max. :5.000 Max. :49.000
Presence Standardized residuals
Min. :0.0000 Min. :-1.405440
1st Qu.:1.0000 1st Qu.:-0.706935
Median :1.0000 Median :-0.299980
Mean :0.7879 Mean :-0.000001
3rd Qu.:1.0000 3rd Qu.: 0.593960
Max. :1.0000 Max. : 3.461570
我需要将我的倍性或谱系重新编码为向量吗?
这是有问题的两列,但如果您需要更多,请告诉我:
我不确定我是否使用了正确的嵌套和随机因子语法。我看到大多数小插图中随机和嵌套因素总是在两个因素前面都有 (1 | 。我没有这样做,因为倍数不是随机的,只有谱系是随机的。我已经就如何嵌套随机因素提出了建议: 1 )https://stats.stackexchange.com/questions/228800/crossed-vs-nested-random-effects-how-do-they-differ-and-how-are-they-specified?noredirect=1&lq=1 2) https://www.muscardinus.be/statistics/nested.html 3)https://rdoodles.rbind.io/2019/11/nested-random-factors-in-mixed-multilevel-or-hierarchical-models/ 4)https://ourcodingclub.github.io/tutorials/mixed-models/#nested
然后我尝试使用普通语法(如链接 2 中所述),但收到错误。代码:
model5 <- zeroinfl(Embryonumber ~ (Ploidy:1|Lineage) + P:Ploidy + Length,
data = x, dist = "negbin")
summary(model5)
错误:
Error in Ploidy:1 : NA/NaN argument
大家有什么建议吗? 谢谢!
更新:我已尝试使用以下代码,但仍然收到
Error in Ploidy/Lineage : non-numeric argument to binary operator.
model4 <- zeroinfl(Embryonumber ~ (1 | Ploidy / Lineage) + P:Ploidy + Length| Presence,
data = x, dist = "negbin")
summary(model4)
正如评论者建议的那样,我删除了嵌套因子,这对于我的数据来说不是一个合适的模型,但我想至少测试一下该函数是否有效。代码:
model4 <- zeroinfl(Embryonumber ~ (1 | Lineage) + (1 | Ploidy) + P:Ploidy + Length| Presence,
data = x, dist = "negbin")
summary(model4)
错误:
Error in 1 | Lineage :
operations are possible only for numeric, logical or complex types
zeroinfl
不处理随机效应,因此公式中唯一的条形 (|
) 应该是从零通胀模型中分离条件的条形,例如 Embryonumber ~ Lineage + P*Ploidy + Length| Presence
glmmTMB
,例如 library(glmmTMB)
glmmTMB(Embryonumber ~ P*Ploidy + Length + (1|Lineage),
ziformula = ~ Presence,
data = x, family = "nbinom2")
Ploidy
作为随机效应分组变量;对于随机效应分组变量,您需要 (1) 足够的水平来估计组间方差(≥ 5 是典型的经验法则),并且 (2) 您需要水平是可交换的,即可以在不改变模型含义的情况下切换水平,我怀疑这对于倍性来说是不正确的。