MatchIt包:组合“最近邻居”匹配和“精确”匹配

时间:2016-09-17 17:46:21

标签: r matching exact-match

我正在尝试使用R中的MatchIt包进行PSM分析,对某些变量使用“完全匹配”,对同一数据集中的其他变量使用“最近邻”方法

出于这个问题的目的,我将使用示例数据集lalonde

test = matchit(treat ~ age + educ + married, method = "nearest", 
                                       exact  = c(married), data = lalonde)

我希望此代码能够对变量married(带01的二进制变量)执行精确匹配,然后对所有其他变量执行“最近”匹配该模型。

但是,我收到了以下警告信息:

  

警告消息:数据中未包含确切的变量。完全匹配   没做完。

查看matchit输出的摘要,仅使用“最近”的方法。我不知道错误在哪里,因为仅使用“精确”方法,该函数确定了完全匹配,但没有与其他匹配方法结合使用。

您是否知道如何在同一数据集中组合“精确”匹配和“最近邻居”匹配或知道我的错误在哪里?

1 个答案:

答案 0 :(得分:2)

发生的事情是您在该软件包的最近邻居文件中点击此循环:

  ## Now for exact matching within nearest neighbor
  ## exact should not equal T for this type of matching--that would get sent to matchit2exact
  if (!is.null(exact)){
    if(!sum(exact%in%names(data))==length(exact)) {
        warning("Exact variables not contained in data. Exact matching not done.",call.=FALSE)
        exact=NULL
    }
    else {
    ww <- exact%in%dimnames(X)[[2]]
    nw <- length(exact)
    exact <- data[,exact,drop=F]
    if(sum(ww)!=nw){
      X <- cbind(X,exact[!ww])
    }
   }
  }

我认为这取决于您指定married的方式。

以下版本不会抛出错误:

test = matchit(treat ~ age + educ + married, method = "nearest", 
               exact  = "married", data = lalonde)