Почему я получаю разные результаты при использовании библиотеки (MASS) и MASS ::? - PullRequest
1 голос
/ 21 октября 2019

Я заметил, что я получаю разные результаты при использовании MASS::glm.nb в отличие от library(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

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Если вы используете 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
1 голос
/ 21 октября 2019

Единственная разница - 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.

...