我所要做的应该是相当容易的:我使用R包Zelig估计一个tobit模型。由此,我希望使用texreg创建一个tex输出。但我得到的是错误信息:
错误(函数(类、fdef、mtable):无法找到用于签名的函数‘提取’的继承方法“Zelig-tobit”
这是相当奇怪的,因为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,文本记录版本为1.36.4,Zelig版本为5.0-11。
这个问题似乎与我的问题密切相关:texreg-ing Tobit output from zelig package (R)
然而,根据这一点,它应该是几个版本前,这不是我的情况。
提前感谢您的帮助!
(顺便说一句,我还尝试使用星凝星器而不是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而不是摘要(模型),就像在示例中一样。我的主要问题似乎是我无法得到所需的统计数据(日志-可能性,wald .)因为我不知道该如何迁就他们。str()等的输出对我没有帮助。除了根本不知道统计数字的“名字”之外,如何输入统计数据似乎也有问题。
当我尝试像“模型$coef”这样的东西时,我得到:
envRefInferField(x,什么,getClass(类(X)),selfEnv)中的错误: “‘coef”不是引用类“Zelig-tobit”的有效字段或方法名。
关于“模特@coef”,我得到:
错误:"Zelig-tobit“类的对象没有名为"coef”的位置。
模型1让我:
modelt6中的错误,1:类型为“S4”的对象不可替换
有人知道如何使提取函数工作吗?或者另一种让模型输出到Latex的更简单的方法?
发布于 2016-04-01 12:06:14
看起来,在Zelig-tobit包中定义的Zelig对象仅仅是包含AER包中定义的tobit对象的容器。因此,您应该能够在包含在texreg中的tobit对象上运行model。
screenreg(model$zelig.out$z.out[[1]])产量:
==========================
Model 1
--------------------------
(Intercept) -18.42
(16.34)
b 0.49
(0.36)
c 17.51
(11.49)
Log(scale) 1.76 ***
(0.49)
--------------------------
AIC 33.55
BIC 34.34
Log Likelihood -12.78
Deviance 9.46
Total 9
Left-censored 3
Uncensored 3
Right-censored 3
Wald Test 2.35
==========================
*** p < 0.001, ** p < 0.01, * p < 0.05可以编写一个extract方法来自动完成这一任务。下面是一个示例:
# extension for Zelig-tobit objects (Zelig package)
extract.Zeligtobit <- function(model, include.aic = TRUE, include.bic = TRUE,
include.loglik = TRUE, include.deviance = TRUE, include.nobs = FALSE,
include.censnobs = TRUE, include.wald = TRUE, ...) {
e <- extract(model$zelig.out$z.out[[1]], include.aic = include.aic,
include.bic = include.bic, include.loglik = include.loglik,
include.deviance = include.deviance, include.nobs = include.nobs,
include.censnobs = include.censnobs, include.wald = include.wald, ...)
return(e)
}
setMethod("extract", signature = className("Zelig-tobit", "Zelig"),
definition = extract.Zeligtobit)现在你可以写:
screenreg(model)它产生的输出与上面的输出相同。
我从来不太明白为什么人们使用Zelig而不是AER这样的原始包。Zelig只是为其他现有的估计函数提供了包装器,从而使数据结构变得不必要的复杂。例如,你为什么不直接使用AER包?
https://stackoverflow.com/questions/36310796
复制相似问题