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

eve*_*lyn 5 r gam lsmeans emmeans

我正在使用我的响应变量作为百分比(0-100)进行 GAM。我使用反正弦变换来改进模型拟合(asin(sqrt(myvariable/100)))。我现在想评估原始规模上解释因子变量水平之间的对比。我一直在尝试使用 emmeans 并按照转换和链接函数小插图中的步骤来设置我的模型,并以 emmeans 可以读取的格式进行转换。但是,当我运行 emmeans 函数时,出现以下错误: link$mu.eta(object@bhat[estble]) 中的错误:尝试应用非函数。

我这样设置转换对象:

tran <- make.tran("asin.sqrt", 100)
Run Code Online (Sandbox Code Playgroud)

我相信 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 

Run Code Online (Sandbox Code Playgroud)

但是,如果我在游戏中尝试它(直接进入 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
Run Code Online (Sandbox Code Playgroud)

就好像它在 gam 中寻找反向链接函数,但它并不是 emmeans 期望的地方。我可以以某种方式将其分配给游戏吗?不支持游戏吗?难道我做错了什么?

qdr*_*ead 2

按照“事后指定转换”标题下的小插图中的说明进行操作,我认为会给您带来您正在寻找的结果:

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")
Run Code Online (Sandbox Code Playgroud)

响应变量在对 的调用中进行转换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 
Run Code Online (Sandbox Code Playgroud)