嵌套设置中的混合效应模型或多元回归比较
Mixed effect model or multiple regressions comparison in nested setup
我有一个回复 Y
,它是一个介于 0-1 之间的百分比。我的数据按分类学或进化关系嵌套,比如 phylum/genus/family/species
,我有一个连续协变量 temp
和一个分类协变量 fac
,级别为 fac1
和 fac2
。
我有兴趣估价:
fac1
和 fac2
(截距)之间的 Y
有区别吗?
- fac 的每个级别对
temp
的响应是否不同(线性斜率)
- 我的分类法的每个级别在
Y
中是否存在差异以及这些差异解释了多少差异(参见 varcomp)
- 我的分类法的每个级别对
temp
的响应是否不同(线性斜率)
一个蛮力的想法是将我的数据分成最低的分类这里的物种,对每个物种 i 作为 betareg(Y(i)~temp)
进行线性 beta 回归。然后提取每个物种的斜率和截距,并将它们分组到每个 fac 的更高分类水平,并比较斜率(截距)的分布,比如通过 Kullback-Leibler 散度与我在引导我的 Y 值时得到的分布。或者比较分类水平或我的因子 fac respectively.Or 之间斜率(或截距)的分布,只比较分类水平或我的因子水平之间的平均斜率和截距。
不确定这是个好主意。也不确定如何回答我的分类水平解释了多少方差的问题,就像在嵌套随机混合效应模型中一样。
另一种选择可能只是那些混合模型,但我怎样才能在一个模型中包含我想测试的所有方面
说我可以使用“gamlss”包来做:
library(gamlss)
model<-gamlss(Y~temp*fac+re(random=~1|phylum/genus/family/species),family=BE)
但在这里我看不到合并随机斜率的方法,或者我可以这样做:
model<-gamlss(Y~re(random=~temp*fac|phylum/genus/family/species),family=BE)
但是对 lme 的内部调用在这方面有一些问题,我猜这不是正确的表示法。
有什么方法可以实现我想要测试的结果,不一定是使用 gamlss,而是使用任何其他包含嵌套结构和 beta 回归的包?
谢谢!
在 glmmTMB
中,如果 您的响应中没有确切的 0 或 1 值,这样的事情应该有效:
library(glmmTMB)
glmmTMB(Y ~ temp*fac + (1 + temp | phylum/genus/family/species),
data = ...,
family = beta_family)
- 如果您的价值观为零,您将需要做一些事情。例如,您可以在
glmmTMB
中添加一个零 inflation 项; brms
可以处理 0-1-inflated Beta 响应;您可以稍微“挤压”0/1 值(请参阅 Smithson 和 Verkuilen 关于 Beta 回归的论文的附录)。如果你只有几个 0/1 值,那么你做什么都无关紧要。如果你有很多,你需要花一些认真的时间思考它们的含义,这将影响你处理它们的方式。它们是否代表审查(即不完全为 0/1 但过于接近边界而无法衡量差异的值)?它们是质量不同的反应吗?等等...)
- 正如我在评论中所说,计算 GLMM 的方差分量非常棘手 - 不一定是简单的分解,例如参见 here。但是,您可以计算每个分类级别的截距和斜率的方差并进行比较(您可以使用标准差与固定效应的大小进行比较...)
- 此处给出的模型可能要求很高,具体取决于系统发育的大小 - 例如,您可能在门级没有足够的复制(在这种情况下,您可以适合模型
~ temp*(fac + phylum) + (1 + temp | phylum:(genus/family/species))
,即拉出门效应作为固定效应)。
- 这是假设您愿意假设
fac
的影响及其与 temp
的相互作用,不系统发育...
我有一个回复 Y
,它是一个介于 0-1 之间的百分比。我的数据按分类学或进化关系嵌套,比如 phylum/genus/family/species
,我有一个连续协变量 temp
和一个分类协变量 fac
,级别为 fac1
和 fac2
。
我有兴趣估价:
fac1
和fac2
(截距)之间的Y
有区别吗?- fac 的每个级别对
temp
的响应是否不同(线性斜率) - 我的分类法的每个级别在
Y
中是否存在差异以及这些差异解释了多少差异(参见 varcomp) - 我的分类法的每个级别对
temp
的响应是否不同(线性斜率)
一个蛮力的想法是将我的数据分成最低的分类这里的物种,对每个物种 i 作为 betareg(Y(i)~temp)
进行线性 beta 回归。然后提取每个物种的斜率和截距,并将它们分组到每个 fac 的更高分类水平,并比较斜率(截距)的分布,比如通过 Kullback-Leibler 散度与我在引导我的 Y 值时得到的分布。或者比较分类水平或我的因子 fac respectively.Or 之间斜率(或截距)的分布,只比较分类水平或我的因子水平之间的平均斜率和截距。
不确定这是个好主意。也不确定如何回答我的分类水平解释了多少方差的问题,就像在嵌套随机混合效应模型中一样。
另一种选择可能只是那些混合模型,但我怎样才能在一个模型中包含我想测试的所有方面
说我可以使用“gamlss”包来做:
library(gamlss)
model<-gamlss(Y~temp*fac+re(random=~1|phylum/genus/family/species),family=BE)
但在这里我看不到合并随机斜率的方法,或者我可以这样做:
model<-gamlss(Y~re(random=~temp*fac|phylum/genus/family/species),family=BE)
但是对 lme 的内部调用在这方面有一些问题,我猜这不是正确的表示法。 有什么方法可以实现我想要测试的结果,不一定是使用 gamlss,而是使用任何其他包含嵌套结构和 beta 回归的包? 谢谢!
在 glmmTMB
中,如果 您的响应中没有确切的 0 或 1 值,这样的事情应该有效:
library(glmmTMB)
glmmTMB(Y ~ temp*fac + (1 + temp | phylum/genus/family/species),
data = ...,
family = beta_family)
- 如果您的价值观为零,您将需要做一些事情。例如,您可以在
glmmTMB
中添加一个零 inflation 项;brms
可以处理 0-1-inflated Beta 响应;您可以稍微“挤压”0/1 值(请参阅 Smithson 和 Verkuilen 关于 Beta 回归的论文的附录)。如果你只有几个 0/1 值,那么你做什么都无关紧要。如果你有很多,你需要花一些认真的时间思考它们的含义,这将影响你处理它们的方式。它们是否代表审查(即不完全为 0/1 但过于接近边界而无法衡量差异的值)?它们是质量不同的反应吗?等等...) - 正如我在评论中所说,计算 GLMM 的方差分量非常棘手 - 不一定是简单的分解,例如参见 here。但是,您可以计算每个分类级别的截距和斜率的方差并进行比较(您可以使用标准差与固定效应的大小进行比较...)
- 此处给出的模型可能要求很高,具体取决于系统发育的大小 - 例如,您可能在门级没有足够的复制(在这种情况下,您可以适合模型
~ temp*(fac + phylum) + (1 + temp | phylum:(genus/family/species))
,即拉出门效应作为固定效应)。 - 这是假设您愿意假设
fac
的影响及其与temp
的相互作用,不系统发育...