这是可行的。您需要设置全局变量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()
.
当下一个版本上传到 CRAN 时,这将make.tran("bcnPower, c(lambda, gamma))
在一个月或更长时间后可用。