Stargazer tworzy bardzo ładne lateksowe tabele dla lm (i innych) obiektów. Załóżmy, że dopasowałem model według największego prawdopodobieństwa. Chciałbym, aby Stargazer utworzył tabelę podobną do lm do moich szacunków. Jak mogę to zrobić?
Chociaż jest to trochę skomplikowane, jednym ze sposobów może być utworzenie „fałszywego” obiektu lm zawierającego moje szacunki - myślę, że będzie to działać tak długo, jak długo będzie działać podsumowanie (my.fake.lm.object). Czy jest to łatwe do wykonania?
Przykład:
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?
Dokładniej: z obiektami lm, Stargazer ładnie drukuje zmienną zależną na górze tabeli, zawiera SE w nawiasach poniżej odpowiednich oszacowań i ma R ^ 2 i liczbę obserwacji na dole tabeli. Czy istnieje (n łatwy) sposób na uzyskanie takiego samego zachowania z „niestandardowym” modelem szacowanym według największego prawdopodobieństwa, jak powyżej?
Oto moje słabe próby ubierania mojego wyjścia optymalnego jako obiektu 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
pakietem. Z powodu lenistwa nadpisałem współczynniki i błędy standardowe innego modelu, co dało mi pożądany wynik. W Twoim przypadku możesz np. Nadpisać współczynniki i błędy standardowemodel1
. Chociaż nie jest to wyrafinowane rozwiązanie, powinno działać. Nie trzeba dodawać, że jestem ciekawy, czy pojawią się lepsze rozwiązania ...