首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >emmeans的后向变换

emmeans的后向变换
EN

Stack Overflow用户
提问于 2022-06-12 10:14:00
回答 1查看 197关注 0票数 1

为了满足lmer中线性模型的假设,我必须转换变量响应(例如变量1),使用这里建议的重尾数据的https://www.r-bloggers.com/2020/01/a-guide-to-data-transformation/方法,并演示如下:

代码语言:javascript
复制
TransformVariable1 <- sqrt(abs(Variable1 - median(Variable1))

然后,我将数据与以下示例模型相匹配:

代码语言:javascript
复制
fit <- lmer(TransformVariable1 ~ x + y + (1|z), data = dataframe) 

接下来,我更新引用网格,以便按照这里的建议对转换进行解释( Specifying that model is logit transformed to plot backtransformed trends )

代码语言:javascript
复制
rg <- update(ref_grid(fit), tran = "TransformVariable1")

但是,在使用以下命令后,to方法不会被转换回原来的比例:

代码语言:javascript
复制
fitemm <- as.data.frame(emmeans(rg, ~ x + y, type = "response"))

我的问题是:我怎样才能把教育手段转变成原来的规模?

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-12 13:02:25

这里有两个主要问题。

其中较少的是指定tran。您需要指定少数已知的转换(如"log" )中的一个,或者需要一个具有所需函数的列表来撤消转换并实现增量方法。请参阅make.linkmake.tranvignette("transformations", "emmeans")的帮助。

更严重的问题是,这里使用的转换不是单调函数,因此不可能对结果进行反向转换。每个转换后的响应值对应于原始变量中值两边的两个可能值。我们这里的模型并不估计对给定变量的影响,而是对该变量的分散性的影响。这就像试图用速度计代替导航系统一样。

我建议使用不同的模型,或者至少使用不同的响应变量。

可能的补救办法

再看看这个,我想知道这是否是对称平方根变换--用sign(Variable1 - median(Variable1))表示的。此转换可在emmeans::make.tran()中使用。你需要重新安装模型。

我建议的是首先创建转换对象,然后在整个过程中使用它:

代码语言:javascript
复制
require(lme4)
requre(emmeans)

symsqrt <- make.tran("sympower", param = c(0.5, median(Variable1)))

fit <- with(symsqrt, 
    lmer(linkfun(Variable1) ~ x + y + (1|z), data = dataframe)
)

emmeans(fit, ~ x + y, type = "response")

symsqrt包含实现转换所需的函数列表。转换本身是symsqrt$linkfun意味着当响应转换命名为linkfun时,包知道查找其他内容。

顺便说一句,请改掉用emmeans()as.data.frame()的习惯。这使得一些不可见的重要注释变得不可见,并且也禁止了对对比和比较进行跟踪的可能性。如果您认为您希望看到比所显示的更高的精度,您可以在调用之前使用emm_options(opt.digits = FALSE);但实际上,如果您认为这些额外的数字提供了有用的信息,那么您就是在自欺欺人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72591265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档