86

Stargazer は、lm (およびその他の) オブジェクト用の非常に優れたラテックス テーブルを生成します。モデルを最尤法で当てはめたとします。stargazer に見積もり用の lm のようなテーブルを作成してもらいたいです。これどうやってするの?

少しハックですが、1 つの方法として、私の見積もりを含む「偽の」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 と観測数をテーブルの下部に表示します。上記のように、最尤法で推定された「カスタム」モデルで同じ動作を得る簡単な方法はありますか?

最適な出力を 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
4

3 に答える 3

2

私はちょうどこの問題を抱えていて、スターゲイザー内のcoef se、 および関数を使用してこれを克服しました...例omit

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="")
于 2015-12-09T00:37:14.110 に答える
0

stargazer の使用にどれだけコミットしているかはわかりませんが、broom と xtable パッケージを使用してみてください。問題は、最適なモデルの標準エラーが得られないことです。

library(broom)
library(xtable)
xtable(tidy(model1))
xtable(tidy(model2))
于 2015-06-29T18:54:17.863 に答える