2015-06-04 18 views
19

所以下面從匹配包,特別是GenMatch例子的例子。 This continues on from a previous question使用GenMatch標準偏差,以鼓勵更多對

Link to R package here

GenMatch

library(Matching) 
data(lalonde) 
attach(lalonde) 

X = cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74) 

BalanceMat <- cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74, 
        I(re74*re75)) 

genout <- GenMatch(Tr=treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE", M=1, 
        pop.size=16, max.generations=10, wait.generations=1) 

genout$matches 
genout$ecaliper 

Y=re78/1000 

mout <- Match(Y=Y, Tr=treat, X=X, Weight.matrix=genout) 
summary(mout) 

的例子中,我們看到185治療觀察與270非治療觀察配對。

我們可以產生與處理案件的權利由表及其左側年齡和控制情況和年齡:

pairs <- data.frame(mout$index.treated, lalonde$age[mout$index.treated], mout$index.control, lalonde$age[mout$index.control]) 

現在,關於從GenMatch產生的Weight.Matrix文學是非常神祕的並沒有解釋這些值代表什麼。我有一個開放的問題here。現在讓我們說我們想放鬆匹配,以便在年齡標準上進行更靈活的配對。

我們看到,sd(lalonde$age)給了我們7年我們的數據的SD。

所以我想Weight.matrix考慮到這一點。我想爲age變量使用1 SD的限制,並因此返回更多對,然後返回原來的185-270。

我的猜測是產生再進行第二次GenMatch功能與我的代碼繼續。所以我用:

genout <- GenMatch(Tr=treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE", 
        pop.size=1000, max.generations=10, wait.generations=1, 
        caliper=c(2,1,1,1,1,1,1,1,1,1)) 

但是,這並不會顯着增加我返回的對數。

我要去的地方錯了

+1

這不是很清楚自己想要什麼。只有185個處理和260個未處理的觀察,Match功能試圖執行1對1匹配。有超過185個未加權比賽的原因是因爲有超過1個未經處理的個人誰是同樣好的比賽的關係。如果您想要每個人超過1個未經處理的人,則需要使用M參數進行匹配。例如'mout < - 匹配(Y = Y,Tr =治療,X = X,Weight.matrix = genout,M = 2)'旨在每治療個體返回2個未經處理的匹配。如果你想要2,你需要使用'ties = FALSE'。 –

+0

如果您想放鬆年齡標準,您可以改變權重矩陣中的參數,但不會影響您獲得的匹配數量。 –

回答

1

由於Nick Kennedy任何提示或解決方案描述:

summary(as.logical(lalonde$treat)) 
    Mode FALSE TRUE NA's 
logical  260  185  0 

GenMatch將只匹配M次,每次治療的情況。它可能會放棄治療的病例,並且由於許多不匹配而通常會丟失控制病例,但它無法通過簡潔的空氣生成新的治療病例:這是多重填補的原因;-)

如果您的意思是,生成多個匹配每處理情況下這與M參數來實現,但需要小心,特別是當控件的數目是如此接近的治療的病例的數目,如在lalonde數據,因爲它已經找到了最佳匹配以及增加額外匹配不太可能改善問題,並且經常使它們惡化。這是最好的時候控制的數量>>治療次數。

當輸出數據爲M > 1時,您可以重建每對「匹配」,如果這是您想要的,並且這會給出大於處理組中185個的行數,但當然重複。