Как экспортировать таблицу регрессии для результатов с устойчивой стандартной ошибкой или кластерной стандартной ошибкой с пакетом lfe? - PullRequest
0 голосов
/ 22 мая 2018

Используя пакет lfe, я могу генерировать результаты регрессии либо с устойчивой стандартной ошибкой, либо с кластерной стандартной ошибкой, используя команду felm.

Для стандартной регрессии я могу экспортировать таблицу регрессии с пакетом texreg, используя функцию screenreg, texreg или htmlreg.Однако, если я хочу получить регрессию с устойчивой стандартной ошибкой в ​​пакете lfe, мне нужно добавить опцию robust=T в функцию summary, поэтому мне интересно, как я могу экспортировать таблицу регрессии, используя texreg пакет в случае, если я упоминал здесь?Ниже приведен демонстрационный код.

library(lfe);library(texreg)
OLS1<-felm(Sepal.Length~Sepal.Width |0|0|0, data = iris)
summary(OLS1, robust=TRUE)
summary(OLS1)

OLS2<-felm(Sepal.Length~Sepal.Width |0|0|Species, data = iris)
summary(OLS2)

screenreg(list(OLS1,OLS2),caption = "Linear regression")

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Вы можете изменить строку s <- summary(model) на s <- summary(model, ...) в функции извлечения в пакете texreg:

library("texreg")

extract.felm <- function(model, include.nobs = TRUE, include.rsquared = TRUE, 
                         include.adjrs = TRUE, include.fstatistic = FALSE, ...) {

  s <- summary(model, ...)
  nam <- rownames(s$coefficients)
  co <- s$coefficients[, 1]
  se <- s$coefficients[, 2]
  pval <- s$coefficients[, 4]

  gof <- numeric()
  gof.names <- character()
  gof.decimal <- logical()
  if (include.nobs == TRUE) {
    gof <- c(gof, s$N)
    gof.names <- c(gof.names, "Num.\ obs.")
    gof.decimal <- c(gof.decimal, FALSE)
  }
  if (include.rsquared == TRUE) {
    gof <- c(gof, s$r2, s$P.r.squared)
    gof.names <- c(gof.names, "R$^2$ (full model)", "R$^2$ (proj model)")
    gof.decimal <- c(gof.decimal, TRUE, TRUE)
  }
  if (include.adjrs == TRUE) {
    gof <- c(gof, s$r2adj, s$P.adj.r.squared)
    gof.names <- c(gof.names, "Adj.\ R$^2$ (full model)", 
                   "Adj.\ R$^2$ (proj model)")
    gof.decimal <- c(gof.decimal, TRUE, TRUE)
  }
  if (include.fstatistic == TRUE) {
    gof <- c(gof, s$F.fstat[1], s$F.fstat[4], 
             s$P.fstat[length(s$P.fstat) - 1], s$P.fstat[1])
    gof.names <- c(gof.names, "F statistic (full model)", 
                   "F (full model): p-value", "F statistic (proj model)", 
                   "F (proj model): p-value")
    gof.decimal <- c(gof.decimal, TRUE, TRUE, TRUE, TRUE)
  }

  tr <- createTexreg(
    coef.names = nam, 
    coef = co, 
    se = se, 
    pvalues = pval, 
    gof.names = gof.names, 
    gof = gof, 
    gof.decimal = gof.decimal
  )
  return(tr)
}

setMethod("extract", signature = className("felm", "lfe"), 
          definition = extract.felm)

Тогда вы сможете передать robust = TRUE аргумент screenreg или texreg звонки:

library("lfe")
OLS1 <- felm(Sepal.Length ~ Sepal.Width |0|0|0, data = iris
OLS2 <- felm(Sepal.Length ~ Sepal.Width |0|0|Species, data = iris)

# regular standard errors
screenreg(list(OLS1, OLS2), caption = "Linear regression")

# robust standard errors
screenreg(list(OLS1, OLS2), caption = "Linear regression", robust = TRUE)

# mixing regular and robust standard errors
tr1 <- extract(OLS1)
tr2 <- extract(OLS1, robust = TRUE)
screenreg(list(tr1, tr2))
0 голосов
/ 23 мая 2018

Возможно, вы можете обойти обходной путь, используя override.se и override.pvalues в функции screenreg.То есть мы сначала сохраняем устойчивую стандартную ошибку и соответствующие p-значения.При распечатке таблицы мы переопределяем значения по умолчанию.Вы обнаружите, что звезды, представляющие значение значимости, будут автоматически обновлены.

Ниже приведен воспроизводимый пример.Я специально создал iris2.При выполнении регрессии уровень значимости отличается для устойчивых (p = 0,004 - 2 звезды) и не устойчивых стандартных ошибок (p = 0,015 - 1 звезда).После переопределения стандартных ошибок и значений p screenreg дает 2 звезды.

library(lfe);library(texreg)
# Create the data iris2 which would have difference significance levels
# for robust and non-robust standard errors
iris2 = rbind(iris[1:100,], iris)
OLS1<-felm(Sepal.Length~Sepal.Width|0|0|0, data = iris2)

# you will see the difference in significance level below
summary(OLS1)
summary(OLS1, robust=TRUE)

###############################################
# Save the robust standard errors and p-values
###############################################
RSE1 = coef(summary(OLS1, robust=TRUE))[,"Robust s.e"]
RpVlaue1 = coef(summary(OLS1, robust=TRUE))[,"Pr(>|t|)"]

# the second regression
OLS2<-felm(Sepal.Length~Sepal.Width|0|0|0, data = iris)

RSE2 = coef(summary(OLS2, robust=TRUE))[,"Robust s.e"]
RpVlaue2 = coef(summary(OLS2, robust=TRUE))[,"Pr(>|t|)"]

screenreg(list(OLS1, OLS2), override.se = list(RSE1, RSE2),
          override.pvalues = list(RpVlaue1, RpVlaue2),
          caption = "Linear regression")

Для первой регрессии OLS1 вы обнаружите две звезды, возникшие из-за устойчивой стандартной ошибки!

Для кластеризованной стандартной ошибки, если вы указали кластеризацию в felm, как вы это сделали

OLS2<-felm(Sepal.Length~Sepal.Width |0|0|Species, data = iris)

Значением по умолчанию будет кластерная стандартная ошибка.То есть нет необходимости перевезти.

...