2014-02-10 154 views
1

我正在使用包匹配(http://sekhon.berkeley.edu/matching/)。我設法匹配我的數據,但我不明白如何找出匹配和不匹配案例的數據集。在手冊(http://cran.r-project.org/web/packages/Matching/Matching.pdf)第20頁(值)包含mdata,index.treated和index.control,但我不知道如何利用它們。有誰能幫助我嗎?R:爲匹配的數據匹配包,輸出數據集

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的輸出。

回答

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) 
1

我知道這是一箇舊帖子,但我以爲我會分享

鑑於直接給出變量「年齡」相匹配的下面的例子(5年以內)和「結婚」的配套包示例數據拉隆德內:

(這是爲人民的利益更復雜的例子像我這樣誰沒有發現類似的例子)

#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")