R: Расширьте вывод plm () и coeftest (), напечатанный через texreg () - PullRequest
0 голосов
/ 20 июня 2019

Рассмотрим следующий упрощенный пример регрессий с фиксированными эффектами:

# 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.

Я пытался сделать этот пример таким простым и последовательным, каквозможно и с нетерпением жду любых комментариев и предложений.

...