为什么 joint_tests 函数(emmeans 包)的结果没有显示模型的交互作用之一?
why the results from the joint_tests function (emmeans package) do not show one of the interactions of the model?
我 运行 一个 GLMM_adaptive 模型(我正在做一个资源选择函数)并且我正在使用 joint_tests 函数(emmeans 包)来计算术语的联合测试该模型。问题是其中一种交互没有出现在结果中。
型号是:
mod.hinc <- mixed_model(fixed = Used ~ scale(ndvi) * season * vegfactor +
scale(ndvi^2) + scale(distance^2) + scale(distance) * season,
random = ~ 1 | id, data = hin.c,
family = binomial(link="logit"))
在 运行 模型我 运行 joint_tests 函数之后:
install.packages("emmeans")
library(emmeans)
joint_tests(mod.hinc)
这是结果:
joint_tests(mod.hinc)
model term df1 df2 F.ratio p.value
ndvi 1 Inf 36.465 <.0001
season 3 Inf 22.265 <.0001
vegfactor 4 Inf 4.548 0.0011
distance 1 Inf 33.939 <.0001
ndvi:season 3 Inf 13.826 <.0001
ndvi:vegfactor 4 Inf 8.500 <.0001
season:vegfactor 12 Inf 6.544 <.0001
ndvi:season:vegfactor 12 Inf 5.165 <.0001
我找不到交互比例(距离)*季节没有出现在结果中的原因。
欢迎就此问题提供任何帮助。如果需要,我可以提供有关模型的更多详细信息。
非常感谢您。
胡安
简短的回答是 distance:season
没有显示,因为它得出了零 d.f。对于相关的交互对比。您可以通过 运行 joint_tests(mod.hinc, show0df = TRUE)
.
来验证这一点
为什么它有 0 d.f。不太清楚。然而,这不是这里唯一的问题。使用 joint_tests()
时,您必须非常小心数字预测器;它不做模型方差分析;相反,如文档所述,它从拟合模型构建参考网格,并执行与预测变量相关的交互对比的联合测试。对于数值预测变量,结果取决于所使用的参考网格。
在此特定实例中,模型包括 ndvi
和 distance
的二次效应;但是,默认参考网格是使用协变量的范围构建的——只有两个不同的值。因此,我们可以了解整体线性趋势的影响,但无法了解二次项隐含的曲率影响。这就是为什么只有 1 d.f。这些因素的主要影响进行了测试。真的有2个d.f。在 ndvi
和 distance
的影响下。为了捕获所有这些影响,我们需要在参考网格中至少具有这些协变量的三个不同值。 实现这一目标的一种方法(不是唯一的方法)是将协变量减少到它们的均值,加上或减去 1 SD -- 这可以通过以下代码完成:
meanpm1sd <- function(x)
c(mean(x) - sd(x), mean(x), mean(x) + sd(x))
joint_tests(mod.hinc, cov.reduce = meanpm1sd)
这将产生一组不同的联合测试,其中可能包括 2-d.f。 ndvi
和 distance
的测试。但是我不知道你是否还会因为零d.f而缺少一些交互。维度。
如果您对这些影响是什么有任何疑问,可以直接查看正在详细测试的估计值。例如,对于 season:distance
、
### construct the needed reference grid once and for all
RG <- ref_grid(mod.h1nc, cov.reduce = meanpm1sd)
EMM <- emmeans(RG, ~ season * distance)
CON <- contrast(EMM, interaction = "consec")
EMM ### see estimates
CON ### see interaction contrasts
test(CON, joint = TRUE)
我希望这有助于阐明正在发生的事情。
我 运行 一个 GLMM_adaptive 模型(我正在做一个资源选择函数)并且我正在使用 joint_tests 函数(emmeans 包)来计算术语的联合测试该模型。问题是其中一种交互没有出现在结果中。
型号是:
mod.hinc <- mixed_model(fixed = Used ~ scale(ndvi) * season * vegfactor +
scale(ndvi^2) + scale(distance^2) + scale(distance) * season,
random = ~ 1 | id, data = hin.c,
family = binomial(link="logit"))
在 运行 模型我 运行 joint_tests 函数之后:
install.packages("emmeans")
library(emmeans)
joint_tests(mod.hinc)
这是结果:
joint_tests(mod.hinc)
model term df1 df2 F.ratio p.value
ndvi 1 Inf 36.465 <.0001
season 3 Inf 22.265 <.0001
vegfactor 4 Inf 4.548 0.0011
distance 1 Inf 33.939 <.0001
ndvi:season 3 Inf 13.826 <.0001
ndvi:vegfactor 4 Inf 8.500 <.0001
season:vegfactor 12 Inf 6.544 <.0001
ndvi:season:vegfactor 12 Inf 5.165 <.0001
我找不到交互比例(距离)*季节没有出现在结果中的原因。
欢迎就此问题提供任何帮助。如果需要,我可以提供有关模型的更多详细信息。
非常感谢您。
胡安
简短的回答是 distance:season
没有显示,因为它得出了零 d.f。对于相关的交互对比。您可以通过 运行 joint_tests(mod.hinc, show0df = TRUE)
.
为什么它有 0 d.f。不太清楚。然而,这不是这里唯一的问题。使用 joint_tests()
时,您必须非常小心数字预测器;它不做模型方差分析;相反,如文档所述,它从拟合模型构建参考网格,并执行与预测变量相关的交互对比的联合测试。对于数值预测变量,结果取决于所使用的参考网格。
在此特定实例中,模型包括 ndvi
和 distance
的二次效应;但是,默认参考网格是使用协变量的范围构建的——只有两个不同的值。因此,我们可以了解整体线性趋势的影响,但无法了解二次项隐含的曲率影响。这就是为什么只有 1 d.f。这些因素的主要影响进行了测试。真的有2个d.f。在 ndvi
和 distance
的影响下。为了捕获所有这些影响,我们需要在参考网格中至少具有这些协变量的三个不同值。 实现这一目标的一种方法(不是唯一的方法)是将协变量减少到它们的均值,加上或减去 1 SD -- 这可以通过以下代码完成:
meanpm1sd <- function(x)
c(mean(x) - sd(x), mean(x), mean(x) + sd(x))
joint_tests(mod.hinc, cov.reduce = meanpm1sd)
这将产生一组不同的联合测试,其中可能包括 2-d.f。 ndvi
和 distance
的测试。但是我不知道你是否还会因为零d.f而缺少一些交互。维度。
如果您对这些影响是什么有任何疑问,可以直接查看正在详细测试的估计值。例如,对于 season:distance
、
### construct the needed reference grid once and for all
RG <- ref_grid(mod.h1nc, cov.reduce = meanpm1sd)
EMM <- emmeans(RG, ~ season * distance)
CON <- contrast(EMM, interaction = "consec")
EMM ### see estimates
CON ### see interaction contrasts
test(CON, joint = TRUE)
我希望这有助于阐明正在发生的事情。