R中的car包实现了带非正的Box-Cox (BCN)。这不是标准的Box-Cox变换,尽管它是在此基础上构建的。
emmeans包可以处理转换后的数据。如果定义了适当的函数,它可以进行反向变换。在make.tran下有内置的转换。这是emmeans使用的接口。
make.tran返回一个列表,其中包含变换、其逆、雅可比矩阵和用于测试域的函数。
如何将BCN转换添加到内置转换中?
只是简单地创建一个包含适当内容的新列表(就像make.tran指定的那样)并在调用emmeans的环境中使用它吗?
谢谢
发布于 2019-10-30 04:09:34
下面是一些有效的方法。您需要将全局变量lambda和gamma设置为等于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时。
https://stackoverflow.com/questions/58347645
复制相似问题