我注意到,与library(MASS)和glm.nb相比,使用MASS::glm.nb会得到不同的结果。我认为package::function()将是避免名称空间冲突(在同一脚本中使用的不同包中具有相同名称的函数)的好方法,并且其结果将等同于library(package)和function。
谁能给我解释一下为什么这些选项会导致不同的结果?这是一个与MASS有关的特殊问题,还是我们可以期望在其他包中出现类似的行为?
fm_nb_1 <- MASS::glm.nb(mpg ~ cyl+hp, data = mtcars)
library(MASS)
fm_nb_2 <- glm.nb(mpg ~ cyl+hp, data = mtcars)
identical(fm_nb_1,fm_nb_2)
[1] FALSE此外,第一个版本不能使用stargazer打印,而第二个版本可以。
stargazer::stargazer(
fm_nb_1
, type = "text"
)这给出了:% Error: Unrecognized object type.
然而,这给出了一个很好的输出:
stargazer::stargazer(
fm_nb_2
, type = "text"
)输出:
==============================================
Dependent variable:
----------------------------
mpg
----------------------------------------------
cyl -0.102**
(0.043)
hp -0.001
(0.001)
Constant 3.790***
(0.146)
----------------------------------------------
Observations 32
Log Likelihood -84.287
theta 894,228.600 (23,863,364.000)
Akaike Inf. Crit. 174.574
==============================================
Note: *p<0.1; **p<0.05; ***p<0.01发布于 2019-10-21 17:42:42
如果你使用all.equal(fm_nb_1, fm_nb_2),你会得到:
[1] "Component “call”: target, current do not match when deparsed"当您检查对象时,您可以看到调用是不同的:
Call: MASS::glm.nb(formula = mpg ~ cyl + hp, data = mtcars, init.theta = 894228.647,
link = log)和
Call: glm.nb(formula = mpg ~ cyl + hp, data = mtcars, init.theta = 894228.647,
link = log)否则,模型是相同的:
anova(fm_nb_1, fm_nb_2)
Likelihood ratio tests of Negative Binomial Models
Response: mpg
Model theta Resid. df 2 x log-lik. Test df LR stat. Pr(Chi)
1 cyl + hp 894228.6 29 -166.5738
2 cyl + hp 894228.6 29 -166.5738 1 vs 2 0 0 1发布于 2019-10-21 17:51:50
唯一的区别是fm_nb_1$call和fm_nb_2$call,在前者中出现后缀MASS::。看起来stargazer有问题,而texreg::screenreg没有。试试texreg::screenreg(fm_nb_1)。或者先尝试fm_nb_1$call <- fm_nb_2$call,然后再使用stargazer。
https://stackoverflow.com/questions/58483517
复制相似问题