使用 BCNPower 变换(汽车)和 emmeans

Using BCNPower Transform (car) and emmeans

R 中的汽车包实现了具有非正数 (BCN) 的 Box-Cox。这不是标准的 Box-Cox 变换,尽管它建立在它的基础上。

emmeans 包可以处理转换后的数据。如果定义了适当的函数,它可以反向转换。 make.tran 下有内置转换。这是 emmeans 使用的界面。

make.tran returns 包含变换、其逆、雅可比和测试域的函数的列表。

如何将 BCN 转换添加到内置转换?

是否只需创建一个包含适当内容(如 make.tran 指定)的新列表并在调用 emmeans 的环境中使用它?

谢谢

这是有用的东西。您需要将全局变量 lambdagamma 设置为等于 car::bcnPower().

记录的相应参数值
tran = list (
   linkfun = function(mu) {
       s = sqrt(mu^2 + gamma^2)
       if (abs(lambda) < 1e-10) log(.5*(mu + s))
       else ((0.5 * (mu + s))^lambda - 1) / lambda  },
   linkinv = function(eta) {
       q = if (abs(lambda) < 1e-10) 2 * exp(eta)
       else 2 * (lambda * eta + 1) ^ (1/lambda)
       (q^2 - gamma^2) / (2 * q) },
   mu.eta = function(eta) {
       if (abs(lambda) < 1e-10) { q = 2 * exp(eta); dq = q }
       else { q = 2 * (lambda * eta + 1) ^ (1/lambda)
       dq = 2 * (lambda * eta + 1)^(1/lambda - 1) }
       0.5 * (1 + (gamma/q)^2) * dq },
   valideta = function(eta) all(eta > 0),
   param = c(lambda, gamma),
   name = paste0("bcnPower(", signif(lambda,3), ", ", signif(gamma,3), ")")
)

然后使用 tran,就好像您是通过 make.tran() 创建的一样。

这将在一个月或更长时间后通过 make.tran("bcnPower, c(lambda, gamma)) 的方式提供,当下一个版本上传到 CRAN 时。