2

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

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

make.tran 返回一个列表,其中包含变换、它的逆、雅可比和一个用于测试域的函数。

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

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

谢谢

4

1 回答 1

0

这是可行的。您需要设置全局变量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().

当下一个版本上传到 CRAN 时,这将make.tran("bcnPower, c(lambda, gamma))在一个月或更长时间后可用。

于 2019-10-29T20:09:34.193 回答