Stargazer with result from plm::pgmm() gives 'Error: Unrecognized object type.'
Stargazer with result from plm::pgmm() gives 'Error: Unrecognized object type.'
尽管据说 stargazer
可以处理由 plm::pgmm()
创建的对象(请参阅此处),但当 运行 以下代码时,我收到错误 Error: Unrecognized object type
:
require(pder)
require(plm)
require(stargazer)
data("DemocracyIncome", package = "pder")
abond_2step <- plm::pgmm(
formula = democracy ~ lag(democracy) + lag(income) | lag(democracy, 2:99) | lag(income, 2),
data = DemocracyIncome, subset = sample==1, index = c("country", "year"),
model = "twostep", effect = "twoways")
stargazer::stargazer(abond_2step) # yields 'Error: Unrecognized object type'
我做错了什么还是 stargazer
不再支持 plm::pgmm()
创建的对象?我的session相关规范如下:
R
: 4.0.4
(Mac)
plm
: 2.4-1
pder
: 1.0-1
stargazer
: 5.2.2
非常感谢您的帮助!
编辑:我发现在 pgmm
之前删除显式 plm::
代码有效,但我不知道为什么:
abond_2step_alt <- pgmm( # removed plm::
formula = democracy ~ lag(democracy) + lag(income) | lag(democracy, 2:99) | lag(income, 2),
data = DemocracyIncome, subset = sample==1, index = c("country", "year"),
model = "twostep", effect = "twoways")
stargazer::stargazer(abond_2step_alt) # This works!
回答
该程序包与 abond_2step$call[1]
进行字符串匹配。在你的情况下,那将是 plm::pgmm()
。该包被硬编码为寻找 pgmm()
,因此没有正确设置它。
另一个不起作用的代码示例
stargazer(stats::lm(Sepal.Length ~ ., iris))
理由
stargazer
写的很反常规。它在 stargazer::stargazer
中有很多函数定义,因此很难找到实际发生的事情。
在某个时候,调用了一个名为 .get.model.name
的函数,该函数又调用了 .model.identify
,如下所示:
.model.identify <-
function(object.name) {
if (class(object.name)[1]=="NULL") { #### !!!!! continue this
return("NULL")
}
if (class(object.name)[1]=="Arima") {
return("Arima")
}
if (class(object.name)[1]=="fGARCH") {
return("fGARCH")
}
if (class(object.name)[1]=="censReg") {
return("censReg")
}
if (class(object.name)[1]=="ergm") {
return("ergm")
}
.........
我们关心的代码:
else if (object.name$call[1]=="pgmm()") {
return("pgmm")
}
这也是问题所在:abond_2step$call[1]
returns plm::pgmm()
。这也正是您的替代调用有效的原因:abond_2step_alt$call[1]
returns pgmm()
.
尽管据说 stargazer
可以处理由 plm::pgmm()
创建的对象(请参阅此处),但当 运行 以下代码时,我收到错误 Error: Unrecognized object type
:
require(pder)
require(plm)
require(stargazer)
data("DemocracyIncome", package = "pder")
abond_2step <- plm::pgmm(
formula = democracy ~ lag(democracy) + lag(income) | lag(democracy, 2:99) | lag(income, 2),
data = DemocracyIncome, subset = sample==1, index = c("country", "year"),
model = "twostep", effect = "twoways")
stargazer::stargazer(abond_2step) # yields 'Error: Unrecognized object type'
我做错了什么还是 stargazer
不再支持 plm::pgmm()
创建的对象?我的session相关规范如下:
R
:4.0.4
(Mac)plm
:2.4-1
pder
:1.0-1
stargazer
:5.2.2
非常感谢您的帮助!
编辑:我发现在 pgmm
之前删除显式 plm::
代码有效,但我不知道为什么:
abond_2step_alt <- pgmm( # removed plm::
formula = democracy ~ lag(democracy) + lag(income) | lag(democracy, 2:99) | lag(income, 2),
data = DemocracyIncome, subset = sample==1, index = c("country", "year"),
model = "twostep", effect = "twoways")
stargazer::stargazer(abond_2step_alt) # This works!
回答
该程序包与 abond_2step$call[1]
进行字符串匹配。在你的情况下,那将是 plm::pgmm()
。该包被硬编码为寻找 pgmm()
,因此没有正确设置它。
另一个不起作用的代码示例
stargazer(stats::lm(Sepal.Length ~ ., iris))
理由
stargazer
写的很反常规。它在 stargazer::stargazer
中有很多函数定义,因此很难找到实际发生的事情。
在某个时候,调用了一个名为 .get.model.name
的函数,该函数又调用了 .model.identify
,如下所示:
.model.identify <-
function(object.name) {
if (class(object.name)[1]=="NULL") { #### !!!!! continue this
return("NULL")
}
if (class(object.name)[1]=="Arima") {
return("Arima")
}
if (class(object.name)[1]=="fGARCH") {
return("fGARCH")
}
if (class(object.name)[1]=="censReg") {
return("censReg")
}
if (class(object.name)[1]=="ergm") {
return("ergm")
}
.........
我们关心的代码:
else if (object.name$call[1]=="pgmm()") {
return("pgmm")
}
这也是问题所在:abond_2step$call[1]
returns plm::pgmm()
。这也正是您的替代调用有效的原因:abond_2step_alt$call[1]
returns pgmm()
.