摘要中未包含假人

Dummies not included in summary

我想创建一个函数来执行包含 3 级虚拟变量的面板回归。

让我们在具有时间效应的模型中考虑:

library(plm)

fit_panel_lr <- function(y, x) {
  x[, length(x) + 1] <- y
 
  #adding dummies
  mtx <- matrix(0, nrow = nrow(x), ncol = 3)
  mtx[cbind(seq_len(nrow(mtx)), 1 + (as.integer(unlist(x[, 2])) - min(as.integer(unlist(x[, 2])))) %% 3)] <- 1
  colnames(mtx) <- paste0("dummy_", 1:3)
  #converting to pdataframe and adding dummy variables
  x <- pdata.frame(x)
  x <- cbind(x, mtx)

  #performing panel regression 
  varnames <- names(x)[3:(length(x))]
  varnames <- varnames[!(varnames == names(y))]
  form     <- paste0(varnames, collapse = "+")
  x_copy   <- data.frame(x)
  form     <- as.formula(paste0(names(y), "~", form,'-1'))
  params   <- list(
    formula = form, data = x_copy, model = "within",
    effect = "time"
  )
  pglm_env <- list2env(params, envir = new.env())

  model_plm <- do.call("plm", params, envir = pglm_env)

  model_plm
}

但是,如果我使用数据:

data("EmplUK", package="plm")
dep_var<-EmplUK['capital']
df1<-EmplUK[-6]

在输出中我将得到:

>  fit_panel_lr(dep_var, df1)

Model Formula: capital ~ sector + emp + wage + output + dummy_1 + dummy_2 + 
    dummy_3 - 1
<environment: 0x000001ff7d92a3c8>

Coefficients:
   sector       emp      wage    output 
-0.055179  0.328922  0.102250 -0.002912 

为什么在公式中考虑了虚拟变量而在系数中没有考虑?有什么合理的解释还是我做错了什么?

在输出中看不到虚拟变量的一点是因为它们与其他数据线性相关 固定效应时间变换之后。它们被丢弃,因此可以估计并输出可估计的内容。

在下面找到一些(不容易执行的)代码,从上面的示例中提取:

dat <- cbind(EmplUK, mtx) # mtx being the dummy matrix constructed in your question's code for this data set
pdat <- pdata.frame(dat)
rhs <- paste(c("emp", "wage", "output", "dummy_1", "dummy_2", "dummy_3"), collapse = "+")
form <- paste("capital ~" , rhs)
form <- formula(form)
mod <- plm(form, data = pdat, model = "within", effect = "time")
detect.lindep(mod$model) # before FE time transformation (original data) -> nothing offending
detect.lindep(model.matrix(mod)) # after FE time transformation -> dummies are offending

detect.lindep 的帮助页面(?detect.lindep 包含在包 plm 中)有一些关于有限元变换前后线性相关性的更好的例子。

一个建议: 至于构建虚拟变量,我建议使用三水平的R因子,而不是自己构建虚拟矩阵。使用因子通常更方便且不易出错。它通过使用模型的典型估计函数转换为二元虚拟变量(处理方式)。frame/model.矩阵框架。