匹配包中生成的权重矩阵是什么?

时间:2015-06-22 12:43:46

标签: r matching

参考Matching包,我们使用GenMatch查看示例。

我们读到创建的Weight Matrix一个矩阵,其对角线对应于X中每个变量的权重

但我们不确定所生成的值代表什么 - 它们是否与标准差有关。

让我们以GenMatch

中提供的示例为例
library(Matching)
data(lalonde)
attach(lalonde)
#The covariates we want to match on
X = cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74)
#The covariates we want to obtain balance on
BalanceMat <- cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74,
I(re74*re75))
#Let's call GenMatch() to find the optimal weight to give each
#covariate in 'X' so as we have achieved balance on the covariates in
#'BalanceMat'. This is only an example so we want GenMatch to be quick
#so the population size has been set to be only 16 via the 'pop.size'
#option. This is *WAY* too small for actual problems.
#For details see http://sekhon.berkeley.edu/papers/MatchingJSS.pdf.
#
genout <- GenMatch(Tr=treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE", M=1,
pop.size=16, max.generations=10, wait.generations=1)

然后我们可以输出稍后将用于配对数据的Weight.matrix

genout$Weight.matrix

特别是分配给age

的值
genout$Weight.matrix[1,1]

我们得到的值为~205。但这个重量是什么意思或代表什么?

此外,如果我们要随机化数据的顺序,则值会不断变化。

n <- 100
P1 <- rep(NA, n)
for (i in 1:n) {

  lalonde <- lalonde[sample(1:nrow(lalonde)), ] # randomise order

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

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

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

  P1[i] <- genout$Weight.matrix[1,1]

}

该论文的作者还建议additional information可能有所帮助,但它没有解释weight matrix值代表什么。任何人都可以解释它们或理解为什么当数据的顺序变化时它们的大小会发生变化

1 个答案:

答案 0 :(得分:3)

不幸的是,这不是一个可以很容易回答的问题(但回答部分问题,不,重量矩阵的值与标准偏差无关)

GenMatch是一种仿射不变的匹配算法,使用距离度量 d(),其中 W 的所有元素都为零,除了主对角线以外。主对角线由 k 参数组成,必须选择它们。 (请注意,如果这些 k 参数中的每一个都设置为1,则 d()与Mahalanobis距离相同)。与马哈拉诺比斯距离一样,该距离度量可用于进行贪婪或最佳完全匹配。 (将 W 的非对角元素设置为零的选择仅仅是出于计算能力的原因)

当数据的顺序变化时幅度改变的原因是权重矩阵 W 具有无穷大的等效解。产生的匹配对于距离测量的恒定比例变化是不变的。特别是,对于任何正标量 c ,每个 W = cW 产生的匹配是相同的,因此矩阵可以是 在很多方面都有独特的识别。

为了完全理解如何计算权重矩阵的非零元素,我建议阅读GenMatch后面的full article,它对方法有一些深入而复杂的看法用过的。

如果您只对源代码感兴趣,可以在GitHub上查看。如果您对R特定代码有其他疑问,我将很乐意尝试回答这些问题,但是如果您对生成权重矩阵背后的算法有进一步的疑问,您可能需要转到Cross Validated。