为什么我在运行零膨胀负二项式混合模型时收到“二元运算符的非数字参数”错误?

问题描述 投票:0回答:1

我正在尝试运行零膨胀负二项式混合模型。我进行了一项实验,给成年蜗牛提供富磷饮食和贫磷饮食 (

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
r random nested mixed-models
1个回答
0
投票
  • zeroinfl
    不处理随机效应,因此公式中唯一的条形 (
    |
    ) 应该是从零通胀模型中分离条件的条形,例如
Embryonumber ~ Lineage + P*Ploidy + Length| Presence
  • 如果您确实想在 ZINB 模型中加入随机效应,您可以尝试
    glmmTMB
    ,例如
library(glmmTMB)
glmmTMB(Embryonumber ~ P*Ploidy + Length + (1|Lineage),
    ziformula = ~ Presence,
  data = x, family = "nbinom2")
  • 建议使用
    Ploidy
    作为随机效应分组变量;对于随机效应分组变量,您需要 (1) 足够的水平来估计组间方差(≥ 5 是典型的经验法则),并且 (2) 您需要水平是可交换的,即可以在不改变模型含义的情况下切换水平,我怀疑这对于倍性来说是不正确的。
  • 您无需担心倍性水平内谱系的嵌套,这会自动处理
© www.soinside.com 2019 - 2024. All rights reserved.