不是
用户指定时,
glm.nb()
会自动计算init.theta
。
但是我似乎无法恢复用户指定的
init.theta
。当查询 model
对象时,我获得 init.theta
作为 5.028696
。这与用户未指定init.theta
时使用的值一致。
如何恢复自己指定的值?在这种情况下,它是
10^6
。
set.seed(54321)
n <- 500
initial_theta <- 10^6
input_data <- data.frame(
group = sample(letters[1:4], size = n, replace = TRUE),
y = rnbinom(n, size = 5, mu = 2)
)
user_model <- MASS::glm.nb(
formula = y ~ group,
data = input_data,
init.theta = initial_theta
)
auto_model <- MASS::glm.nb(
formula = y ~ group,
data = input_data
)
user_model$call$init.theta
#> [1] 5.028696
auto_model$call$init.theta
#> [1] 5.028696
创建于 2024-07-16,使用 reprex v2.1.0
查看源代码,这似乎不可能,
init.theta
参数只是被覆盖:
Call$init.theta <- signif(as.vector(th), 10)
其中
th
是最初估计的 theta,由 theta.ml()
提供
init.theta
用于初始拟合,并且可以跟踪整个迭代过程,但令人烦恼的是,返回的Initial value for 'theta':
又是th
。这对我来说似乎很奇怪,但我不是专家。如果这里没有其他人可以判断这是否是故意的,以及在这种情况下为什么,您可以尝试一下 R-devel 邮件列表。
user_model2 <- MASS::glm.nb(
formula = y ~ group,
data = input_data,
init.theta = initial_theta,
control = glm.control(trace=2)
)
# Initial fit:
# Deviance = 870.37355 Iterations - 1
# Deviance = 756.80908 Iterations - 2
# Deviance = 754.42813 Iterations - 3
# Deviance = 754.42665 Iterations - 4
# Deviance = 754.42665 Iterations - 5
# Initial value for 'theta': 4.929440
# Deviance = 578.94259 Iterations - 1
# Theta(1) = 4.929440, 2(Ls - Lm) = 578.943000
(您可以设置
trace=3
以获得更详细的信息,但这对我们没有帮助)