首页 > 解决方案 > 指定该模型进行 logit 转换以绘制反向转换趋势

问题描述

我在 R 中安装了一个带有 logit 转换响应的 lme 模型。我无法找到执行 logit 转换的直接命令,所以我手动完成了。

logitr<-log(r/1-r)

然后,我将其用作我的 lme 模型中的响应,其中两个因素和一个数值变量之间存在相互作用。

model<-lme(logitr<-factor1*factor2*numeric,random=1|random)

现在,R 显然不知道这个模型是 logit 变换的。如何将其指定给 R?

我没有运气尝试过:

update(model, tran="logit")

我之所以要指定模型是 logit 变换的原因是因为我想使用 emmeans 包中的函数 emmip 绘制反向变换的结果,显示我的变量之间交互的趋势。

通常(如果我只有因素)我会使用:

update_refgrid_model<-update(ref_grid(model, tran="logit"))

但是当我想使用 emmip 来绘制数值变量和因子之间交互的趋势时,这种方法不起作用。如果我指定:

emmip(update_refgrid_model, factor1~numeric|factor2, cov.reduce = range, type = "response")

然后我没有绘制任何趋势,只有数值变量的平均水平的估计值。

那么,如何指定 logit 变换并绘制 lme 模型的反变换趋势,其中因子与数值变量相互作用?

标签: rtransformationnlmeemmeans

解决方案


您不更新模型对象,而是更新参考网格:

rg = update(ref_grid(model, cov.reduce = range), tran = "logit")
emmip(rg, factor1~numeric|factor2, type = "response")

可以用其他东西更新模型,而不是转换;那是在对象的update方法中emmGrid

更新

这是一个显示其工作原理的示例

require(emmeans)
## Loading required package: emmeans

foo = transform(fiber, p = (strength - 25)/25)
foo.lm = lm(log(p/(1-p)) ~ machine*diameter, data = foo)

emm = emmeans(foo.lm, ~diameter|machine, 
              tran = "logit", at = list(diameter = 15:32))
## Warning in ref_grid(object, ...): There are unevaluated constants in the response formula
## Auto-detection of the response transformation may be incorrect

emmip(emm, machine ~ diameter)

emmip(emm, machine ~ diameter, type = "r")

reprex 包于 2020-06-02 创建(v0.3.0)


推荐阅读