Stargazer produziert sehr schöne Latex-Tabellen für lm (und andere) Objekte. Angenommen, ich habe ein Modell mit maximaler Wahrscheinlichkeit angepasst. Ich möchte, dass Stargazer einen lm-ähnlichen Tisch für meine Schätzungen produziert. Wie kann ich das machen?Erhalten von Koeffizienten, die durch maximale Wahrscheinlichkeit in eine Stargazer-Tabelle geschätzt werden
Obwohl es ein bisschen hacky ist, könnte ein Weg sein, ein "gefälschtes" LM-Objekt zu erstellen, das meine Schätzungen enthält - ich denke, das würde so lange funktionieren, wie eine Zusammenfassung (mein.Fakes.lm.Objekt) funktioniert. Ist das leicht machbar?
Ein Beispiel:
library(stargazer)
N <- 200
df <- data.frame(x=runif(N, 0, 50))
df$y <- 10 + 2 * df$x + 4 * rt(N, 4) # True params
plot(df$x, df$y)
model1 <- lm(y ~ x, data=df)
stargazer(model1, title="A Model") # I'd like to produce a similar table for the model below
ll <- function(params) {
## Log likelihood for y ~ x + student's t errors
params <- as.list(params)
return(sum(dt((df$y - params$const - params$beta*df$x)/params$scale, df=params$degrees.freedom, log=TRUE) -
log(params$scale)))
}
model2 <- optim(par=c(const=5, beta=1, scale=3, degrees.freedom=5), lower=c(-Inf, -Inf, 0.1, 0.1),
fn=ll, method="L-BFGS-B", control=list(fnscale=-1), hessian=TRUE)
model2.coefs <- data.frame(coefficient=names(model2$par), value=as.numeric(model2$par),
se=as.numeric(sqrt(diag(solve(-model2$hessian)))))
stargazer(model2.coefs, title="Another Model", summary=FALSE) # Works, but how can I mimic what stargazer does with lm objects?
genauer zu sein: mit lm Objekten, stargazerlilie die abhängige Variable druckt gut an der Spitze der Tabelle, SEs umfasst unterhalb der entsprechenden Schätzwerte in Klammern, und hat die R^2 und Anzahl der Beobachtungen am unteren Ende der Tabelle. Gibt es einen (einfachen) Weg, um das gleiche Verhalten mit einem "benutzerdefinierten" Modell zu erreichen, das wie oben beschrieben mit maximaler Wahrscheinlichkeit geschätzt wird?
Hier sind meine schwachen Versuche an meinen optim Ausgang als lm Objekt Verkleiden:
model2.lm <- list() # Mimic an lm object
class(model2.lm) <- c(class(model2.lm), "lm")
model2.lm$rank <- model1$rank # Problematic?
model2.lm$coefficients <- model2$par
names(model2.lm$coefficients)[1:2] <- names(model1$coefficients)
model2.lm$fitted.values <- model2$par["const"] + model2$par["beta"]*df$x
model2.lm$residuals <- df$y - model2.lm$fitted.values
model2.lm$model <- df
model2.lm$terms <- model1$terms # Problematic?
summary(model2.lm) # Not working
Ich habe versucht, ähnlich mit dem 'texreg' Paket. Aufgrund der Faulheit habe ich die Koeffizienten und Standardfehler eines anderen Modells überschrieben, was mir die gewünschte Ausgabe lieferte. In Ihrem Fall könnten Sie z.B. Überschreiben Sie die Koeffizienten und Standardfehler von 'model1'. Dies ist zwar keine ausgeklügelte Lösung, aber es sollte funktionieren. Unnötig zu sagen, dass ich gespannt bin, ob es bessere Lösungen gibt ... – coffeinjunky
Sie können sich die Stargazer-Funktion ansehen, die mit 'stargazer :::. Stargazer.wrap' schwer belastet. Es sieht aus wie ein Container mit einer Reihe anderer Funktionen zusätzlich zu dem Code, der die Tabellen formatiert. Und es sieht so aus, als ob es einige Komponenten für 'lm' (und' glm') auswertet, die es sehr schwer machen würden, Ihre 'optim()' Ergebnisse zu verkleiden. – andybega
In '' texreg'' würde es ausreichen, ein '' texreg''-Objekt mit Hilfe der Funktion 'createTexreg'' zu erstellen. Du gibst im Grunde nur die Koeffizienten, SEs usw. aus. Siehe '' createTexreg''. Das "texreg" -Objekt kann dann in die Funktionen "texreg", "htmlreg", "screenreg" und "plot reg" eingegeben werden. Alternativ beschreibt Abschnitt 6 des JSS-Artikels das Schreiben und Registrieren von Methoden für neue Modelltypen, falls Sie die gleiche Vorlage später wiederverwenden möchten. –