我想做的事情应该相当简单:我使用 R 包Zelig估计了一个 tobit 模型。从这里我想使用texreg创建一个 tex 输出。但我得到的是错误信息:
(function (classes, fdef, mtable) 中的错误:无法为签名 '"Zelig-tobit"' 的函数 'extract' 找到继承的方法</p>
这很奇怪,因为 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 而不是 summary(model) 示例中的原因。我的主要问题似乎是我无法从模型中获得所需的统计数据(对数似然,wald ...),因为我不知道如何处理它们。str() 等的输出对我没有帮助。除了根本不知道统计数据的“名称”之外,如何处理它们似乎也存在问题。
当我尝试类似“model$coef”的东西时,我得到:
envRefInferField(x, what, getClass(class(x)), selfEnv) 中的错误:
'coef' 不是参考类“Zelig-tobit”的有效字段或方法名称</p>
使用“model@coef”我得到:
错误:“Zelig-tobit”类的这个对象没有名称“coef”的槽
而模型 [,1] 产生了我:
modelt6[, 1] 中的错误:“S4”类型的对象不是子集
有谁知道如何使提取功能起作用?或者另一种更简单的方法将模型输出到 Latex 中?