首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BCNPower变换(car)和emmeans

使用BCNPower变换(car)和emmeans
EN

Stack Overflow用户
提问于 2019-10-12 02:06:09
回答 1查看 122关注 0票数 2

R中的car包实现了带非正的Box-Cox (BCN)。这不是标准的Box-Cox变换,尽管它是在此基础上构建的。

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

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

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

只是简单地创建一个包含适当内容的新列表(就像make.tran指定的那样)并在调用emmeans的环境中使用它吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-30 04:09:34

下面是一些有效的方法。您需要将全局变量lambdagamma设置为等于car::bcnPower()文档中记录的相应参数值。

代码语言:javascript
复制
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时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58347645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档