Stargazer produce tablas de látex muy agradables para objetos lm (y otros). Supongamos que encajo en un modelo por máxima probabilidad. Me gustaría que Stargazer produjera una tabla parecida a una película para mis estimaciones. ¿Cómo puedo hacer esto?
Aunque es un poco hacky, una forma podría ser crear un objeto lm "falso" que contenga mis estimaciones; creo que esto funcionaría siempre que el resumen (my.fake.lm.object) funcione. ¿Es eso fácilmente factible?
Un ejemplo:
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?
Para ser más precisos: con objetos lm, Stargazer imprime muy bien la variable dependiente en la parte superior de la tabla, incluye SE entre paréntesis debajo de las estimaciones correspondientes y tiene el R ^ 2 y el número de observaciones en la parte inferior de la tabla. ¿Existe una manera (n fácil) de obtener el mismo comportamiento con un modelo "personalizado" estimado por máxima verosimilitud, como el anterior?
Aquí están mis débiles intentos de disfrazar mi salida óptima como un objeto lm:
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
texreg
paquete. Debido a la pereza, terminé sobrescribiendo los coeficientes y errores estándar de un modelo diferente, lo que me dio el resultado deseado. En su caso, podría, por ejemplo, sobrescribir los coeficientes y errores estándar demodel1
. Si bien esta no es una solución sofisticada, debería funcionar. Ni que decir tiene, tengo curiosidad para ver si algunas soluciones mejores vienen ...