emmeans中joint_tests无法识别make.tran()转换的协变量问题
问题:使用
make.tran()转换协变量后joint_tests无法识别该变量 使用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")
构建模型并执行joint_tests:
mod <- with(as.tran, lm(sqrt(resp) ~ site + C * R * linkfun(covar), data = dummy))
执行结果中完全没有出现涉及covar的行:
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
对比测试
- 交换响应变量与协变量
将转换后的协变量作为响应变量,原响应变量作为预测变量:
mod2 <- with(as.tran, lm( linkfun(covar) ~ site + C * R * sqrt(resp), data = dummy)) joint_tests(mod2)
此时joint_tests能输出完整的ANCOVA结果,包含resp相关项:
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
- 直接使用转换函数而非
make.tran()
不通过make.tran(),直接在模型中用asin()转换协变量:
mod3 <- lm( sqrt(resp) ~ site + C * R * asin(covar), data = dummy) joint_tests(mod3)
此时joint_tests能正常识别covar及其交互项:
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("asin")转换协变量
即便改用asin类型的转换,结果依然无法识别covar:
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
需求
寻求解决该问题的方法,让joint_tests能识别通过make.tran()转换后的协变量。
内容的提问来源于stack exchange,提问作者hnguyen
相关产品推荐
相关产品推荐

