То, что я пытаюсь сделать, должно быть довольно простым: я оцениваю модель тобита с помощью пакета R Zelig. Исходя из этого, я хочу создать текстовый вывод с помощью texreg. Но я получаю сообщение об ошибке:
Ошибка в (function (classes, fdef, mtable): невозможно найти унаследованный метод для функции «extract» для сигнатуры «Zelig-tobit» »
Это довольно странно, поскольку у texreg есть есть метод извлечения для моделей тобита. Я также пытался сам указать функцию, но не смог заставить ее работать. Вот пример кода:
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)
Я использую R Studio на компьютере под управлением Windows, версия texreg - 1.36.4, а версия Zelig - 5.0-11.
Этот вопрос казался тесно связанным с моей проблемой: вывод Tobit texreg -ing из zelig пакет (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)
На мой взгляд, модель зелига уже "суммирована", поэтому я установил s ‹- модель вместо резюме (модели), как в примере. Моя основная проблема, похоже, заключается в том, что я не могу получить необходимую статистику (логарифмическая вероятность, Wald ...) из модели, так как я не знаю, как их адресовать. Вывод str () и т. Д. Мне в этом не помогает. Помимо простого незнания "названий" статистических данных, также, похоже, существует проблема с как обращаться к ним.
Когда я пробую что-то вроде "model $ coef", я получаю:
Ошибка в envRefInferField (x, what, getClass (class (x)), selfEnv):
«coef» не является допустимым полем или именем метода для ссылочного класса «Zelig-tobit»
С "model @ coef" я получаю:
Ошибка: нет слота с именем «coef» для этого объекта класса «Зелиг-тобит».
И модель [, 1] дает мне:
Ошибка в modelt6 [, 1]: объект типа 'S4' не является подмножеством
Кто-нибудь знает, как заставить работать функцию извлечения? Или другой, более простой способ перевести модель в латекс?
zelig
с подклассомtobit
. Очевидно, это уже не так, поскольку модель, которую вы создаете, имеет сигнатуру классаZelig-tobit
. Вам нужно написать расширение, то естьextract
метод, для texreg. Раздел 6 статьи texreg в Journal of Statistical Software (обновленная версия: cran.r-project.org/web/packages/texreg/vignettes/v55i08.pdf) содержит некоторые рекомендации и пример. - person Philip Leifeld   schedule 31.03.2016