Stargazer создает очень красивые латексные таблицы для объектов lm (и других). Предположим, я подобрал модель по максимальной вероятности. Я бы хотел, чтобы звездочет составил для моих оценок таблицу в стиле lm. Как я могу это сделать?
Хотя это немного взломано, одним из способов может быть создание «фальшивого» объекта lm, содержащего мои оценки - я думаю, это будет работать, пока работает summary (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 простой) способ получить такое же поведение с «заказной» моделью, оцененной по максимальной вероятности, как указано выше?
Вот мои слабые попытки нарядить свой optim output как объект 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
. Хотя это не изощренное решение, оно должно работать. Излишне говорить, что мне любопытно посмотреть, появятся ли какие-нибудь лучшие решения ...stargazer:::.stargazer.wrap
. Это похоже на контейнер с кучей других функций в дополнение к коду, форматирующему таблицы. И похоже, что он оценивает довольно много компонентов дляlm
(иglm
), из-за которых очень сложно оформить вашиoptim()
результаты.texreg
достаточно создатьtexreg
объект, используяcreateTexreg
функцию. Вы в основном просто передать коэффициенты, SES и т.д. См?createTexreg
.texreg
Объект может затем быть подан вtexreg
,htmlreg
,screenreg
, иplotreg
функции. В качестве альтернативы, раздел 6 статьи JSS описывает, как писать и регистрировать методы для новых типов моделей на случай, если вы захотите повторно использовать тот же шаблон позже.Ответы:
У меня просто была эта проблема, и я решил ее с помощью функций
coef
se
, иomit
в Stargazer ... например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="")
источник
Вам нужно сначала создать экземпляр фиктивного
lm
объекта, а затем нарядить его:#... 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
(а затем, конечно, убедитесь, что остальная сводная статистика верна)
источник
Я не знаю, насколько вы привержены использованию stargazer, но вы можете попробовать использовать пакеты broom и xtable, проблема в том, что они не выдадут вам стандартные ошибки для модели optim
источник