Рассмотрим следующий упрощенный пример регрессий с фиксированными эффектами:
# Load packages
packs <- list("texreg", "plm", "lmtest")
lapply(packs, require, character.only = T)
# Load mtcars data set
d <- mtcars
# Run fixed effects regressions
fe_results <- lapply(c("hp", "drat", "qsec", "vs"), function(x) {
plm_eq <- paste0("mpg ~ wt + ", x)
plm_outp <- plm(plm_eq, index = "cyl", data = d, model = "within")
return(plm_outp)
})
# Print via texreg
texreg(fe_results, stars = c(0.01, 0.05, 0.1), include.rsquared = F, include.rmse = F, include.adjrsq = T)
Последняя строка создает эту таблицу:
\begin{table}
\begin{center}
\begin{tabular}{l c c c c }
\hline
& Model 1 & Model 2 & Model 3 & Model 4 \\
\hline
wt & $-3.18^{***}$ & $-3.24^{***}$ & $-3.89^{***}$ & $-3.30^{***}$ \\
& $(0.72)$ & $(0.83)$ & $(0.91)$ & $(0.78)$ \\
hp & $-0.02^{*}$ & & & \\
& $(0.01)$ & & & \\
drat & & $-0.14$ & & \\
& & $(1.32)$ & & \\
qsec & & & $0.50$ & \\
& & & $(0.38)$ & \\
vs & & & & $0.86$ \\
& & & & $(1.64)$ \\
\hline
Adj. R$^2$ & 0.39 & 0.30 & 0.34 & 0.31 \\
Num. obs. & 32 & 32 & 32 & 32 \\
\hline
\multicolumn{5}{l}{\scriptsize{$^{***}p<0.01$, $^{**}p<0.05$, $^*p<0.1$}}
\end{tabular}
\caption{Statistical models}
\label{table:coefficients}
\end{center}
\end{table}
Однако я хотел бы изменить стандартные ошибки на гетероскедастичность- стандартные ошибки.Поэтому я добавляю coeftest
к данной функции:
fe_results <- lapply(c("hp", "drat", "qsec", "vs"), function(x) {
plm_eq <- paste0("mpg ~ wt + ", x)
plm_outp <- plm(plm_eq, index = "cyl", data = d, model = "within")
plm_outp <- coeftest(plm_outp, vcov = vcovHC(plm_outp, type = "HC1"))
return(plm_outp)
})
К сожалению, coeftest
имеет нежелательный эффект отбрасывания информации на Adj. R$^2$
и Num. obs.
, что затем также удаляет ее извывод texreg
:
\begin{table}
\begin{center}
\begin{tabular}{l c c c c }
\hline
& Model 1 & Model 2 & Model 3 & Model 4 \\
\hline
wt & $-3.18^{***}$ & $-3.24^{***}$ & $-3.89^{***}$ & $-3.30^{***}$ \\
& $(0.95)$ & $(0.83)$ & $(1.29)$ & $(1.08)$ \\
hp & $-0.02^{*}$ & & & \\
& $(0.01)$ & & & \\
drat & & $-0.14$ & & \\
& & $(0.72)$ & & \\
qsec & & & $0.50^{***}$ & \\
& & & $(0.10)$ & \\
vs & & & & $0.86$ \\
& & & & $(0.63)$ \\
\hline
\multicolumn{5}{l}{\scriptsize{$^{***}p<0.01$, $^{**}p<0.05$, $^*p<0.1$}}
\end{tabular}
\caption{Statistical models}
\label{table:coefficients}
\end{center}
\end{table}
Одно решение, которое обнаружило обход обходов Adj. R$^2$
и Num. obs.
с помощью:
fe_results <- lapply(c("hp", "drat", "qsec", "vs"), function(x) {
plm_eq <- paste0("mpg ~ wt + ", x)
plm_outp <- plm(plm_eq, index = "cyl", data = d, model = "within")
plm_outp_s <- summary(plm_outp)
plm_outp_s$coefficients <- unclass(coeftest(plm_outp, vcov = vcovHC(plm_outp, type = "HC1")))
return(plm_outp_s)
})
Недостатком является то, что возвращаемый вывод теперь находится в *Формат 1023 * и не может быть напечатан texreg
(Error in (function (classes, fdef, mtable): unable to find an inherited method for function ‘extract’ for signature ‘"summary.plm"’
).Как это исправить?Как распечатать вывод регрессии вкл.Adj. R$^2$
, Num. obs.
и устойчивые стандартные ошибки гетероскедастичности с использованием texreg
?
Кроме того, я хотел бы добавить «перехват» в стиле Stata.Я подумал, что решение может опираться на within_intercept()
, но не уверен, как использовать его таким образом, чтобы оно было включено в вывод texreg
.
Я пытался сделать этот пример таким простым и последовательным, каквозможно и с нетерпением жду любых комментариев и предложений.