【发布时间】:2016-03-30 13:47:19
【问题描述】:
我想要做的应该相当简单:我使用 R 包 Zelig 估计一个 tobit 模型。由此我想使用 texreg 创建一个 tex 输出。但我得到的是错误信息:
(function (classes, fdef, mtable) 中的错误:无法找到 签名“Zelig-tobit”的函数“extract”的继承方法
这很奇怪,因为 texreg 确实 有用于 tobit 模型的提取方法。我也尝试自己指定一个函数,但无法让它工作。这是一个示例代码:
library(Zelig)
library(texreg)
a <- c(2, 2, 2, 4, 3, 5, 9, 9, 9)
b <- c(18, 20, 19, 17, 22, 48, 12, 22, 37)
c <- c(0.1, 0.02, 0.5, 1.2, 0.9, 0.1, 1.1, 0.7, 0.6)
dat <- data.frame(a, b, c)
model <- zelig(a ~ b + c, below = 2, above = 9, model = "tobit", data = dat)
texreg(model)
我在 Windows 电脑上使用 R Studio,texreg 版本是 1.36.4,Zelig 版本是 5.0-11。
这个问题似乎与我的问题密切相关: texreg-ing Tobit output from zelig package (R)
但是,根据这个,它应该在几个版本之前就已经修复了,对我来说不是这样。
提前感谢您的帮助!
(顺便说一句,我也尝试使用 stargazer 而不是 texreg,这只是给我带来了另一个错误消息。)
我尝试编写自己的提取函数,但由于我在函数编写方面的业余性,无法使其正常工作。这是我所做的:
extract.tob <- function(model, include.iterations = TRUE, include.loglik = TRUE,
include.wald = TRUE, ...) {
s <- model
names <- rownames(s$coef)
co <- s$coef[, 1]
se <- s$coef[, 2]
pval <- s$coef[, 4]
gof <- numeric()
gof.names <- character()
gof.decimal <- logical()
if (include.iterations == TRUE) {
it <- s$iterations
gof <- c(gof, it)
gof.names <- c(gof.names, "Number of\\iterations")
gof.decimal <- c(gof.decimal, TRUE)
}
if (include.loglik == TRUE) {
ll <- s$logLik
gof <- c(gof, ll)
gof.names <- c(gof.names, "Log-\\likelihood")
gof.decimal <- c(gof.decimal, TRUE)
}
if (include.wald == TRUE) {
wd <- s$wald
gof <- c(gof, wd)
gof.names <- c(gof.names, "Wald-\\statistic")
gof.decimal <- c(gof.decimal, TRUE)
}
tr <- createTexreg(
coef.names = names,
coef = co,
se = se,
pvalues = pval,
gof.names = gof.names,
gof = gof,
gof.decimal = gof.decimal
)
return(tr)
}
setMethod("extract", signature = className("Zelig-tobit", "Zelig"),
definition = extract.tob)
在我看来,zelig 模型已经“汇总”,这就是为什么我设置 s 如何处理它们似乎也存在问题。
当我尝试“model$coef”之类的东西时,我得到:
envRefInferField(x, what, getClass(class(x)), selfEnv) 中的错误:
“coef”不是引用类的有效字段或方法名称 “Zelig-tobit”
使用“model@coef”我得到:
错误:“Zelig-tobit”类的这个对象没有名称为“coef”的槽
而模型[,1] 产生了我:
modelt6[, 1] 中的错误:“S4”类型的对象不是子集
有人知道如何使提取功能起作用吗? 或者另一种更简单的方法将模型输出到 Latex 中?
【问题讨论】:
-
Tobit 模型过去在 Zelig 中实现为类
zelig和子类tobit。这显然不再是这种情况,因为您正在创建的模型具有类签名Zelig-tobit。您需要为 texreg 编写一个扩展,即extract方法。 Journal of Statistical Software(更新版:cran.r-project.org/web/packages/texreg/vignettes/v55i08.pdf)中 texreg 文章的第 6 节提供了一些指导和示例。 -
感谢您的帮助!我已经尝试编写一个提取函数,但无法开始工作。请参阅上面我编辑的问题。有人对此有任何想法吗?我真的越来越绝望了。
-
另见这篇文章,我提供了关于如何编写提取方法的详细教程:stackoverflow.com/questions/38894044/…
标签: r stargazer texreg r-zelig