R:匹配包,匹配数据的输出数据集

时间:2014-02-10 18:03:13

标签: r

我正在使用包匹配(http://sekhon.berkeley.edu/matching/)。我设法匹配我的数据,但我不知道如何获得匹配和不匹配案例的数据集。在手动(http://cran.r-project.org/web/packages/Matching/Matching.pdf)页面20(值)包含mdata,index.treated和index.control但我不知道如何使用它们。有人可以帮帮我吗?

MDATA 包含Match生成的匹配数据集的列表。三个数据集 包括在此列表中:Y,Tr和X。

index.treated 包含来自原始数据集的观测数的矢量 处理匹配数据集中的观察结果。这个指数与 index.control可用于恢复Match生成的匹配数据集。 例如,Match使用的X矩阵可以通过rbind(X [index.treated,],X [index.control,])恢复。 用户通常应该检查mdata的输出。

index.control 包含来自对照的原始数据的观察数的向量 匹配数据中的观察结果。此索引与index.treated结合使用 可用于恢复Match生成的匹配数据集。例如, Match使用的X矩阵可以通过rbind(X [index.treated,],X [index.control,])恢复。 用户通常应该只检查mdata的输出。

2 个答案:

答案 0 :(得分:4)

我知道这是一个老帖子,但我想我会分享

给出以下示例直接匹配给定变量“age”(5年内)和匹配包中示例数据lalonde中的“已结婚”:

(这是一个更复杂的例子,对于像我这样没有发现类似例子的人的利益)

#install.packages("Matching")
library(Matching)
data(lalonde)
    X  <- cbind(lalonde$age,lalonde$married)
    colnames(X)<-c("age","married")
    Tr  <- lalonde$treat
#Define caliper for age within 5 years (see package documentation for caliper)
    5/sd(lalonde$age) #=0.7041973
# 5-to-one matching with replacement (the "M=5" option), with ties set to false to limit multiple matches
# Exact matching on "married" (the "exact=c(0,1)" option), corresponding to 0 (false) for age, 1 (true) for "married"
    rr  <- Match(Tr=Tr, X=X, M=2,ties=F,exact=c(0,1),caliper=0.7041973) #caliper set to match age within 5 years
    summary(rr)
#Put results (rownames of treated and controls) into a dataframe
    rr<-data.frame(rr$index.treated,rr$index.control)
    colnames(rr)<-c("cases","controls")
    lalonde$rowID<-as.numeric(rownames(lalonde))

要将您的案例和控件的原始特征加入到匹配的结果中,您可以(1)进行简单匹配或(2)使用sqldf包,必然会有更多选项

#Option 1 to join case control table to original characteristics
    rr$CaseMarried <- lalonde$married[match(rr$cases, lalonde$rowID)]
    rr$ControlMarried<-lalonde$married[match(rr$controls, lalonde$rowID)]
    rr$CaseAge <- lalonde$age[match(rr$cases, lalonde$rowID)]
    rr$ControlAge<-lalonde$age[match(rr$controls, lalonde$rowID)]
    rr

#Option 2 to join case control table to original characterisitcs using sqldf    
#install.packages("sqldf")
    library(sqldf)
    sqldf1<-sqldf(
      "SELECT a.cases, b.age AS CaseAge, b.married AS CaseMarried, 
      a.controls, c.age AS ControlAge, c.married AS ControlMarried
      FROM a
      INNER JOIN lalonde b
      ON a.cases=b.rowID
      INNER JOIN lalonde c
      ON a.controls=c.rowID")

答案 1 :(得分:1)

按照手册中的示例,如果您有:

gen1<-GenMatch(Tr=Tr,X=X,BalanceMatrix=BalanceMatrix,pop.size=1000)

mgen1<-Match(Y=Y,Tr=Tr,Weight.matrix=gen1)

然后您可以输入以下内容获取数据:

mgen1$mdata

您可以将其另存为data.frame

mgen1.data<-data.frame(mgen1$mdata)