【问题标题】:Why do I get different results when using library(MASS) vs. MASS::?为什么在使用 library(MASS) 与 MASS:: 时会得到不同的结果?
【发布时间】:2019-10-21 09:33:32
【问题描述】:

我注意到使用MASS::glm.nblibrary(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

【问题讨论】:

    标签: r function-call


    【解决方案1】:

    如果你使用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
    

    【讨论】:

    • 感谢您抽出宝贵时间回答这个问题。但我认为我的问题没有得到回答:存在差异——可能是结构性的,而不是模型的内容。这些差异确实会产生后果,例如,在尝试使用 stargazer 打印信息时。所以这不是微不足道的。我真的很想知道为什么会发生这种情况以及这些差异导致问题的频率。
    • 正如@jay.sf 提到的,问题是由stargazer 如何处理这些不同的调用引起的。这不是与模型或MASS 库相关的问题。另一方面,如果不查看stargazer 的源代码,则很难判断到底是什么问题。
    • 谢谢,同意,这不是MASS 库的问题。但我仍然难以理解为什么MASS::glm.nb(或此包的任何其他函数)返回的对象与library(MASS)glm.nb 不同。这对我来说似乎很奇怪,很高兴知道为什么会发生这种情况以及这可能导致问题的频率。
    【解决方案2】:

    唯一的区别是fm_nb_1$callfm_nb_2$call,前者出现了后缀MASS::。似乎stargazer 有问题,而texreg::screenreg 没有。试试texreg::screenreg(fm_nb_1)。或者尝试fm_nb_1$call &lt;- fm_nb_2$call,然后再使用stargazer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      相关资源
      最近更新 更多