Was ich versuche zu tun, sollte ziemlich einfach sein: Ich schätze ein Tobit-Modell mit dem R-Paket Zelig. Daraus möchte ich eine Tex-Ausgabe unter Verwendung Texreg erstellen. Aber was bekomme ich wieder die Fehlermeldung:R: Erstellen Tex-Ausgabe von Zelig Tobit-Modell mit Texreg
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘extract’ for signature ‘"Zelig-tobit"’
Das ist ziemlich seltsam texreg tut ein Extraktionsverfahren für Tobit-Modelle haben. Ich habe auch versucht, eine Funktion selbst zu spezifizieren, aber ich konnte es nicht zum Laufen bringen. Hier ist ein Beispiel-Code:
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)
Ich verwende R Studio auf einem Windows-Computer, die texreg Version 1.36.4 und die Zelig Version 5,0-11.
Diese Frage schien eng mit meinem Problem zu tun: texreg-ing Tobit output from zelig package (R)
Dies ist jedoch nach noch vor einigen Versionen behoben worden sein, was für mich nicht der Fall ist.
Vielen Dank im Voraus für Ihre Hilfe!
(Btw, ich habe auch versucht, Stargazer statt texreg verwendet, die mir nur eine andere Fehlermeldung ergab.)
Ich habe versucht, meine eigene Extrakt Funktion zu schreiben, aber aufgrund meiner Dilettantismus in Funktion Schreiben kann es nicht zum Funktionieren bringen. Hier ist, was ich getan habe:
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)
Wie ich es sehe, ist das zelig Modell bereits „zusammengefasst“, deshalb habe ich s eingestellt < - Modell statt Zusammenfassung (Modell), wie im Beispiel. Mein Hauptproblem scheint zu sein, dass ich die benötigten Statistiken (Log-Likelihood, Wald ...) nicht aus dem Modell herausholen kann, da ich nicht weiß, wie ich sie ansprechen soll. Die Ausgabe von str() und so weiter hilft mir dabei nicht weiter. Abgesehen davon, dass man die "Namen" der Statistiken einfach nicht kennt, scheint es auch ein Problem mit wie zu geben, sie zu adressieren.
Wenn ich so etwas wie "-Modell $ Koef" versuchen, erhalte ich:
Error in envRefInferField(x, what, getClass(class(x)), selfEnv) :
‘coef’ is not a valid field or method name for reference class “Zelig-tobit”
Mit "Modell @ Koef" Ich bekomme:
Error: no slot of name "coef" for this object of class "Zelig-tobit"
Und Modell [1] liefert mir:
Error in modelt6[, 1] : object of type 'S4' is not subsettable
Hat jemand eine Idee, wie man die Extraktfunktion arbeiten lässt? Oder ein anderer, einfacherer Weg, die Modellausgabe in Latex zu bekommen?
Tobit-Modelle wurden in Zelig als Klasse '' zelig'' mit Unterklasse '' tobit'' implementiert. Dies ist offensichtlich nicht mehr der Fall, da das Modell, das Sie erstellen, die Klassensignatur "Zelig-Tobit" hat. Sie müssen eine Erweiterung schreiben, d. H. Eine '' extract''-Methode für texreg. Abschnitt 6 des Texreg-Artikels im Journal of Statistical Software (aktualisierte Version: https://cran.r-project.org/web/packages/texreg/vignettes/v55i08.pdf) bietet einige Anleitungen und ein Beispiel. –
Danke für die Hilfe! Ich habe bereits versucht, eine Extraktfunktion zu schreiben, kann aber nicht zur Arbeit kommen. Siehe meine bearbeitete Frage oben. Hat jemand irgendwelche Ideen dazu? Ich werde wirklich verzweifelt. – meatexample
Siehe auch diesen Post, wo ich eine detaillierte Anleitung zum Schreiben einer Methode zum Extrahieren bieten: http://stackoverflow.com/questions/38894044/print-beautiful-tables-for-h2o-models-in-r –