查看原文
其他

倾向匹配得分R操作与应用(Matching/MatchIt函数介绍)

计量经济学服务中心专辑汇总计量百科·资源·干货:

Stata  |Python  |Matlab  |Eviews  |R 
Geoda  |ArcGis  |GeodaSpace  |SPSS 
一文读懂   |数据资源   |回归方法  |网络爬虫                                                               
限回归   |工具变量   |内生性   |空间计量 
果推断   |合成控制法   |倾向匹配得分   |断点回归   |双重差   
面板数据  | 动态面板数据

🌈2022年1月-北京&远程寒假研讨班 | “高级计量经济学及Stata应用”研讨班重磅发布!

👉2021年11月空间计量研讨班:空间计量及Geoda、Stata、ArcGis、Matlab应用

1

R操作与应用:Matching命令


背景数据描述:

这是国家支持工作示范(NSW)处理组数据的子样本和当前人口调查(CPS)的比较样本。Lalonde(1986)、Dehejia和Wahba(1999)对这些数据进行了广泛的分析。

R软件操作倾向匹配得分的函数安装包比较多,主要包括Matching、MatchIt等。


例如使用Matching前,需要先进行安装:install.packages(“Matching”)就可以安装了。


1、首先进行数据查看

> data("lalonde")> summary(lalonde) age educ black Min. :17.00 Min. : 3.0 Min. :0.0000 1st Qu.:20.00 1st Qu.: 9.0 1st Qu.:1.0000 Median :24.00 Median :10.0 Median :1.0000 Mean :25.37 Mean :10.2 Mean :0.8337 3rd Qu.:28.00 3rd Qu.:11.0 3rd Qu.:1.0000 Max. :55.00 Max. :16.0 Max. :1.0000 hisp married Min. :0.00000 Min. :0.0000 1st Qu.:0.00000 1st Qu.:0.0000 Median :0.00000 Median :0.0000 Mean :0.08764 Mean :0.1685 3rd Qu.:0.00000 3rd Qu.:0.0000 Max. :1.00000 Max. :1.0000 nodegr re74 Min. :0.000 Min. : 0.0 1st Qu.:1.000 1st Qu.: 0.0 Median :1.000 Median : 0.0 Mean :0.782 Mean : 2102.3 3rd Qu.:1.000 3rd Qu.: 824.4 Max. :1.000 Max. :39570.7 re75 re78 u74 Min. : 0 Min. : 0 Min. :0.0000 1st Qu.: 0 1st Qu.: 0 1st Qu.:0.0000 Median : 0 Median : 3702 Median :1.0000 Mean : 1377 Mean : 5301 Mean :0.7326 3rd Qu.: 1221 3rd Qu.: 8125 3rd Qu.:1.0000 Max. :25142 Max. :60308 Max. :1.0000 u75 treat Min. :0.0000 Min. :0.0000 1st Qu.:0.0000 1st Qu.:0.0000 Median :1.0000 Median :0.0000 Mean :0.6494 Mean :0.4157 3rd Qu.:1.0000 3rd Qu.:1.0000 Max. :1.0000 Max. :1.0000 > View(lalonde)


结果为:



数据介绍:包含对以下12个变量的445个观察值。

age表示年龄

educ:受教育年限

black:是否为黑人

hispan:是否为西班牙裔

married:是否已婚

nodegree:是否没有毕业文凭。

re74,1974年的实际收入。

re75,1975年的实际收入。

re78,1978年的实际收入。


u74,1974年的收入指标变量为零。

u75,1975年收入的指标变量为零。

treat:是否接受职业培训。


2、估计倾向匹配模型

glm1 <- glm(treat~age + I(age^2) + educ + I(educ^2) + black + hisp + married + nodegr + re74 + I(re74^2) + re75 + I(re75^2) +             u74 + u75, family=binomial, data=lalonde)


3、保存数据对象

X <- glm1$fittedY <- lalonde$re78Tr <- lalonde$treat


3、一对一匹配,评估处理效应的影响(“estimand”选项默认为ATT)。

rr <- Match(Y=Y, Tr=Tr, X=X, M=1);summary(rr)

结果为:


4、我们来看看协变量的平衡性,为了提高速度,nboots被设置为较小的值。正式分析时提高到至少500。

mb <- MatchBalance(treat~age + I(age^2) + educ + I(educ^2) + black + hisp + married + nodegr + re74 + I(re74^2) + re75 + I(re75^2) + u74 + u75, data=lalonde, match.out=rr, nboots=10)

结果为:


2

R操作与应用:Matchit命令


数据框有614个观察(185处理,429对照)。合计有10个变量。“treat”是处理分配(1=已处理,0=对照)。“age”是年龄的年数。“educ”是指教育的学制。“black”是非裔美国人的指示符(1=非裔美国人,0=非裔美国人)。“hispan”是西班牙血统的标志(1=西班牙裔,0=非西班牙裔)。“married"”是已婚的指示符(1=已婚,0=未结婚)。“nodegree”是个人是否有高中学历的指标(1=无学历,0=学历)。re74是1974年的收入,以美元计算。re75是1975年的收入,以美元计算。re78是1978年的收入,以美元计算。


注意上述文字介绍是官方文档提供的,具体数据结构,请以数据为准。



1、首先进行数据查看

> library(Match It)> data(lalonde)


我们的示例数据集是Lalonde(1986)、Dehejia和Wahba(1999)分析的职业培训计划的子集。


该安装包函数包含了原始数据的子样本,坚持国家支持工作示范(NSW)处理组和来自人口收入动态调查(PSID)的比较样本。


该数据集中的变量包括:参加职业培训项目(treat,如果参加该项目,等于,其他为0)、年龄(age)、受教育年限(educ)、种族(black,黑色= 1,其他为0;hispan等于1,如果是西班牙语, 婚姻状况(已婚= 1,非已婚= 0)、高中学历(无学历= 1,非学历= 0)、1974年实际收入(re74)、1975年实际收入(re75)和主要结果变量1978年实际收入(re78)。


2、倾向匹配分析


最简单的匹配就是精确匹配。这种技术将每个处理单元匹配到所有可能的控制单元,在所有的协变量上使用完全相同的值,从而形成子类,使得每个子类中的所有单元(处理和控制)都具有相同的协变量值。


在匹配中实现了精确匹配,使用method =“exact”。在调用MatchIt时指定的公式的右侧所包含的所有协变量都将进行精确匹配。

代码为

m.out <- matchit(treat ~ educ + black + hispan, data = lalonde,method = "exact")


其他案例代码:

> m.out <- matchit(treat ~ age + educ + black + hispan + married +nodegree + re74 + re75, data = lalonde, method = "full")


> m.out <- matchit(treat ~ age + educ + black + hispan + married + nodegree +re74 + re75, data = lalonde, method = "genetic")


下一行执行最近邻匹配基于估计的逻辑回归的倾向分数,

m.out1 <- matchit(treat ~ re74 + re75 + age + educ, data = lalonde, method = "nearest", distance = "logit")


要获得匹配的数据,输入以下命令,

m.data1 <- match.data(m.out1)


很容易总结得到的匹配数据,

summary(m.data1)


为获得处理组或对照组的匹配数据,指定选项组如下:

m.data2 <- match.data(m.out1, group = "treat")

summary(m.data2)

m.data3 <- match.data(m.out1, group = "control")

summary(m.data3)


结果为:


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存