【问题标题】:Using BCNPower Transform (car) and emmeans使用 BCNPower Transform (car) 和 emmeans
【发布时间】:2020-02-09 08:36:37
【问题描述】:

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

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

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

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

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

谢谢

【问题讨论】:

    标签: r lsmeans


    【解决方案1】:

    这是可行的。您需要将全局变量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)) 提供。

    【讨论】:

      猜你喜欢
      • 2022-06-14
      • 2022-08-20
      • 2023-01-02
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      相关资源
      最近更新 更多