verosimilitud varias superponer studio resueltos para normal metodo graficos graficas estimador ejercicios distribucion r optimization lm stargazer

varias - Obtener coeficientes estimados por máxima verosimilitud en una tabla de estrellas



superponer graficas en r (3)

Stargazer produce muy buenas tablas de látex para objetos de lm (y otros). Supongamos que he ajustado un modelo por máxima verosimilitud. Me gustaría que Stargazer produzca una tabla tipo lm 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 funcionaría siempre que funcione el resumen (my.fake.lm.object). ¿Es eso 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. ¿Hay una (n fácil) forma de obtener el mismo comportamiento con un modelo "personalizado" estimado por máxima verosimilitud, como se indicó anteriormente?

Estos son mis débiles intentos de disfrazar mi salida optimizada 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


No sé qué tan comprometido está usted con el uso de Stargazer, pero puede intentar usar los paquetes de escoba y xtable, el problema es que no le dará los errores estándar para el modelo optim.

library(broom) library(xtable) xtable(tidy(model1)) xtable(tidy(model2))


Primero necesita crear una instancia de un objeto ficticio lm y luego vestirlo:

#... model2.lm = lm(y ~ ., data.frame(y=runif(5), beta=runif(5), scale=runif(5), degrees.freedom=runif(5))) model2.lm$coefficients <- model2$par model2.lm$fitted.values <- model2$par["const"] + model2$par["beta"]*df$x model2.lm$residuals <- df$y - model2.lm$fitted.values stargazer(model2.lm, se = list(model2.coefs$se), summary=FALSE, type=''text'') # =============================================== # Dependent variable: # --------------------------- # y # ----------------------------------------------- # const 10.127*** # (0.680) # # beta 1.995*** # (0.024) # # scale 3.836*** # (0.393) # # degrees.freedom 3.682*** # (1.187) # # ----------------------------------------------- # Observations 200 # R2 0.965 # Adjusted R2 0.858 # Residual Std. Error 75.581 (df = 1) # F Statistic 9.076 (df = 3; 1) # =============================================== # Note: *p<0.1; **p<0.05; ***p<0.01

(y luego, por supuesto, asegúrese de que las estadísticas resumidas restantes sean correctas)


Solo estaba teniendo este problema y lo supero mediante el uso del coef , y omit funciones dentro de stargazer ... por ejemplo

stargazer(regressions, ... coef = list(... list of coefs...), se = list(... list of standard errors...), omit = c(sequence), covariate.labels = c("new names"), dep.var.labels.include = FALSE, notes.append=FALSE), file="")