将模型中的所有变量与R中的{plm}一起使用

杜恩·博根

我使用不同的来源编写了一个小函数,该函数创建了一个表,该表包含线性回归模型后根据组变量“集群”聚集的标准误差,t统计量和标准误差。代码如下

cl1 <- function(modl,clust) {
 # model is the regression model
 # clust is the clustervariable
 # id is a unique identifier in ids
    library(plm)
    library(lmtest)
        #  Get Formula
    form <- formula(modl$call)
        # Get Data frame
    dat <- eval(modl$call$data)
    dat$row <- rownames(dat)
    dat$id <- ave(dat$row, dat[[deparse(substitute(clust))]], FUN =seq_along)       
    pdat <- pdata.frame(dat, 
         index=c("id", deparse(substitute(clust)))
         , drop.index= F, row.names= T)
    # # Regression
      reg <- plm(form, data=pdat, model="pooling")  
    # # Adjustments
     G <- length(unique(dat[, deparse(substitute(clust))]))
     N <- length(dat[,deparse(substitute(clust))])
    # # Resid degrees of freedom, adjusted
     dfa <- (G/(G-1))*(N-1)/reg$df.residual
     d.vcov <- dfa* vcovHC(reg, type="HC0", cluster="group", adjust=T)
    table <- coeftest(reg, vcov=d.vcov)
    # #  Output: se, t-stat and p-val
     cl1out <- data.frame(table[, 2:4])
     names(cl1out) <- c("se", "tstat", "pval")
    # # Cluster VCE
     return(cl1out)

}

对于像这样的回归reg1 <- lm (y ~ x1 + x2 , data= df),调用函数cl1(reg1, cluster)就可以了。

但是,如果我使用的模型reg2 <- lm(y ~ . , data=df),则会收到错误消息:

Error in terms.formula(object) : '.' in formula and no 'data' argument

经过一些测试,我猜测我不能使用“。” 为{plm}发出信号“使用数据帧中的所有变量”。我可以用{plm}做到这一点吗?否则,关于如何不使用{plm}并接受线性模型的所有可能规格的方式改善功能的任何想法吗?

研究

实际上,您不能.plmpacakge中为公式使用符号

data("Produc", package = "plm")
plm(gsp ~ .,data=Produc)
Error in terms.formula(object) : '.' in formula and no 'data' argument

一个想法是当您拥有一个时扩展公式.这是完成此任务的自定义函数(肯定在其他软件包中完成):

expand_formula <- 
  function(form="A ~.",varNames=c("A","B","C")){
  has_dot <- any(grepl('.',form,fixed=TRUE))
  if(has_dot){
    ii <- intersect(as.character(as.formula(form)),
          varNames)
    varNames <- varNames[!grepl(paste0(ii,collapse='|'),varNames)]

   exp <- paste0(varNames,collapse='+')
   as.formula(gsub('.',exp,form,fixed=TRUE))

  }
  else as.formula(form)
}

现在测试一下:

(eform = expand_formula("gsp ~ .",names(Produc)))
#    gsp ~ state + year + pcap + hwy + water + util + pc + emp + unemp

plm(eform,data=Produc)

# Model Formula: gsp ~ state + year + pcap + hwy + water + util + pc + emp + unemp
# <environment: 0x0000000014c3f3c0>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在R中带有{plm}的模型中使用所有变量

来自分类Dev

尝试使用R中的plm在stata中重现xtreg

来自分类Dev

R:在plm中过滤数据

来自分类Dev

在R中使用plm进行广告素材转换

来自分类Dev

将QTableView与模型一起使用

来自分类Dev

将表格与模型一起使用

来自分类Dev

将“ -Filter”与变量一起使用

来自分类Dev

将NameOf与变量一起使用

来自分类Dev

将getJSON与变量一起使用

来自分类Dev

将R与forloop一起使用

来自分类Dev

将R中的same()与多个向量一起使用

来自分类Dev

将callCC与R中的高阶函数一起使用

来自分类Dev

在R中仅将lm()与一个变量一起使用

来自分类Dev

在C中与atoi()一起使用

来自分类Dev

是否可以将预测函数与 r 中的随机森林模型一起使用?

来自分类Dev

当“plm”中的固定效应模型没有截距时解释分类变量

来自分类Dev

将Apache Spark中的所有资源与Yarn一起使用

来自分类Dev

将PowerMock与黄瓜一起使用

来自分类Dev

将XhtmlTextWriter与XmlTextReader一起使用

来自分类Dev

将Scrapyd与参数一起使用

来自分类Dev

将AngularJS与Liferay一起使用

来自分类Dev

将Magicline与Flexslider一起使用

来自分类Dev

将CMAttitude与CMCalibratedMagneticField一起使用

来自分类Dev

将findall与arg一起使用

来自分类Dev

将StaticPagedList与PagedListRenderOptions一起使用

来自分类Dev

将Redis与SignalR一起使用

来自分类Dev

将阵列与渗透一起使用

来自分类Dev

将ctypes与typedef一起使用

来自分类Dev

将regex与replaceAll一起使用