joint_tests 省略通过 make.tran() 使用 asin(sqrt()) 进行变换的协变量

问题描述 投票:0回答:1

关于 joint_tests 无法通过 make.tran() 识别 asin.sqrt 转换 我有

emmeans
1.8.8

set.seed(83)
library(emmeans)
dummy <- expand.grid(
  covar  = runif(72, min = 0, max = 1),
  resp = runif(72, min = 0, max = 2),
  site = c("a", "b", "c", "d", "e", "g"),
  C = 1:4,
  R = c("i", "j", "k")
)

as.tran <- make.tran("asin.sqrt")


mod <- with(as.tran, lm(sqrt(resp) ~ site  +  C * R * linkfun(covar), data = dummy))

这个

joint_tests
命令没有给出任何涉及 covar 的行。
联合测试(mod)

model term df1    df2 F.ratio p.value
 site         5 373231   0.000  1.0000
 C            1 373231   0.000  1.0000
 R            2 373231   0.000  1.0000
 C:R          2 373231   0.000  1.0000

切换

resp
covar
,下面的
joint_tests(mod2)
给出了完整的 ancova 模型

mod2 <- with(as.tran, lm( linkfun(covar) ~ site  +  C * R * sqrt(resp), data = dummy))
joint_tests(mod2)
 model term df1    df2 F.ratio p.value
 site         5 373231   0.000  1.0000
 C            1 373231   0.000  1.0000
 R            2 373231   0.000  1.0000
 resp         1 373231   0.000  1.0000
 C:R          2 373231   0.000  1.0000
 C:resp       1 373231   0.000  1.0000
 R:resp       2 373231   0.000  1.0000
 C:R:resp     2 373231   0.000  1.0000

使用

asin
joint_tests
可以识别
make.tran()

外部协变量的即时变换
mod3 <- lm( sqrt(resp) ~ site  +  C * R * asin(covar), data = dummy)

joint_tests(mod3)
 model term df1    df2 F.ratio p.value
 site         5 373231   0.000  1.0000
 C            1 373231   0.000  1.0000
 R            2 373231   0.000  1.0000
 covar        1 373231   0.000  1.0000
 C:R          2 373231   0.000  1.0000
 C:covar      1 373231   0.000  1.0000
 R:covar      2 373231   0.000  1.0000
 C:R:covar    2 373231   0.000  1.0000

但不在

make.tran()

a.tran = make.tran("asin")

mod4 <- with(a.tran, lm(sqrt(resp) ~ site  +  C * R * linkfun(covar), data = dummy))

joint_tests(mod4)

 model term df1    df2 F.ratio p.value
 site         5 373231   0.000  1.0000
 C            1 373231   0.000  1.0000
 R            2 373231   0.000  1.0000
 C:R          2 373231   0.000  1.0000

感谢您的光临。

r transformation emmeans ancova
1个回答
0
投票

正如相关 GitHub 问题页面 中所解释的,问题是默认情况下,协变量被缩减为相差 2 的两个值的区间。这将两端抛出到 [0,1] 的合法区间之外变换,导致

NaN
值和协变量项被隐藏,因为它们的 d.f 为 0。如果您这样做,您就会看到结果,例如,

joint_tests(mod4, cov.reduce = function(x) mean(x) + c(-1,1)/10)

...以便使用更短的间隔,将所有内容都放在界限内。

© www.soinside.com 2019 - 2024. All rights reserved.