Stargazer виробляє дуже гарні латексні столи для lm (та інших) об’єктів. Припустимо, я підігнав модель за максимальною ймовірністю. Я хотів би, щоб stargazer створив таблицю, подібну до lm, для моїх оцінок. Як я можу це зробити?
Хоча це трохи хакерсько, але одним із шляхів може бути створення "підробленого" об'єкта lm, що містить мої оцінки - я думаю, це буде працювати, доки працює резюме (my.fake.lm.object). Це легко здійснимо?
Приклад:
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?
Якщо бути точнішим: із об'єктами lm stargazer красиво друкує залежну змінну у верхній частині таблиці, включає SE в дужки нижче відповідних оцінок і має R ^ 2 та кількість спостережень внизу таблиці. Чи існує (n простий) спосіб отримати таку ж поведінку за допомогою "нестандартної" моделі, що оцінюється за максимальною вірогідністю, як вище?
Ось мої слабкі спроби переодягнути мій оптимальний результат як об'єкт 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
пакетом. Через лінь я закінчив переписувати коефіцієнти та стандартні помилки іншої моделі, що дало мені бажаний результат. У вашому випадку ви можете, наприклад, перезаписати коефіцієнти та стандартні помилкиmodel1
. Хоча це не складне рішення, воно має спрацювати. Само собою зрозуміло, мені цікаво побачити, чи з’являться якісь кращі рішення ...