我正在使用包匹配(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的输出。
答案 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)