无法使用emmeans进行arcsin反向转换

hyrbngr7  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(111)

我用我的响应变量作为百分比来做一个GAM(0-100)。我使用了反正弦变换来改进模型拟合(asin(sqrt(myvariable/100)))。我现在想在原始尺度上评估解释因子变量水平之间的对比。我一直在尝试使用emmeans,并按照Transformations and link functions vignette中的步骤以emmeans可以读取的格式设置我的模型。然而,当我运行emmeans函数时,我得到以下错误:链接$mu.eta(object@bhat[estble])中出错:尝试应用非功能。
我这样设置转换对象:

tran <- make.tran("asin.sqrt", 100)

我相信bit可以工作,因为当我用emmeans在线性模型上尝试时,它工作了:

warp.t <- with(tran, lm(linkfun(breaks)~wool*tension, warpbreaks))
emmeans(warp.t, ~wool|tension, type="response")
tension = L:
 wool response   SE df lower.CL upper.CL
 A        44.2 4.00 48     36.3     52.3
 B        27.7 3.61 48     20.8     35.3

tension = M:
 wool response   SE df lower.CL upper.CL
 A        23.5 3.41 48     17.0     30.7
 B        28.4 3.63 48     21.4     35.9

tension = H:
 wool response   SE df lower.CL upper.CL
 A        23.9 3.43 48     17.4     31.1
 B        18.6 3.13 48     12.7     25.3

Confidence level used: 0.95 
Intervals are back-transformed from the asin(sqrt(mu/100)) scale

然而,如果我在游戏中尝试它(直接进入emmeans()或使用regrid()),它不起作用:

dat <- data.frame("x" = rep(1:3, times=12), 
                  "y" = rep(4:6, times=12), 
                  "z" = runif(36, 0, 100), 
                  "m" = rep(1:12, times=3))

gam.t <- with(tran, gam(linkfun(z) ~ x * y + s(m), data=dat))

emmeans(gam.t, ~x|y, type="response")
Error in linkinv(result[[cnm[1]]]) : could not find function "linkinv"

#or
regrid(emmeans(gam.t, ~x|y), transform="response")
Error in flink$mu.eta(object@bhat[estble]) : 
  attempt to apply non-function

这就像它在gam中寻找反向链接函数,但它不在emmeans期望的位置。我可以以某种方式将其分配给gam吗?它对gams无效吗?我做错了什么吗?

laawzig2

laawzig21#

按照标题为“指定事后转换”的小插曲中的说明,我认为会给你你想要的结果:

gam.t2 <- gam(asin(sqrt(z/100)) ~ x * y + s(m), data = dat)

refgrid_gam.t2 <- update(ref_grid(gam.t2), tran = tran)

emmeans(refgrid_gam.t2, ~ x | y, type = "response")

响应变量在调用gam()时被转换,然后我们在参考网格上调用update()来指定使用了什么转换。我得到的输出再次以百分比表示:

y = 5:
 x response   SE df lower.CL upper.CL
 2       52 10.3 32     31.5     72.2

Confidence level used: 0.95 
Intervals are back-transformed from the asin(sqrt(mu/100)) scale

相关问题