R语言实现PSM(2)

library(MatchIt)
help(package="MatchIt")
data("lalonde")
str(lalonde)
table(lalonde$treat)
# 默认1:1匹配
table(lalonde$treat)
m.out1 <- matchit(treat ~ age + educ + race + nodegree +
                    married + re74 + re75, data = lalonde)
m.out1
summary(m.out1)
data=match.data(m.out1)

#使用"mahalanobis"距离计算方法
m.out2 <- matchit(treat ~ age + educ + race + nodegree +
                    married + re74 + re75, data = lalonde,
                  distance = "mahalanobis", #distance距离:glm,gam,mahalanobis等计算
                  replace = TRUE,#对照组可以匹配多个试验组
                  exact = ~ married + race)#精确匹配结婚和种族
m.out2
summary(m.out2, un = TRUE)
data=match.data(m.out2)
Table(data=data,Factor="age+educ+race+married",
      Group="treat",file=NULL)

#设置最大匹配距离caliper
m.out3 <- matchit(treat ~ age + educ + race + nodegree +
                    married + re74 + re75, data = lalonde,
                  distance = "glm", link = "probit",
                  mahvars = ~ age + educ + re74 + re75,
                  caliper = 0.1, #匹配的最大距离为 0.1
                  ratio = 2)#对照组:试验组
m.out3
summary(m.out3, un = TRUE)
data=match.data(m.out3)
Table(data=data,Factor="age+educ+race+married",
      Group="treat",file=NULL)

#使用"full"距离计算方法
m.out4 <- matchit(treat ~ age + educ + race + nodegree +
                    married + re74 + re75, data = lalonde,
                  method = "full",#匹配方法
                  estimand = "ATE",
                  caliper = c(.1, age = 2, educ = 1),#分别设置不同变量的最大匹配距离
                  std.caliper = c(TRUE, FALSE, FALSE))#是否将 caliper 参数标准化
m.out4
summary(m.out4, un = TRUE)
data=match.data(m.out4)
Table(data=data,Factor="age+educ+race+married",
      Group="treat",file=NULL)

#使用subclass匹配方法
s.out1 <- matchit(treat ~ age + educ + race + nodegree +
                    married + re74 + re75, data = lalonde,
                  method = "subclass", #匹配方法为 "subclass"
                  distance = "glm",
                  discard = "control",#只有处理组的观测值会保留,未匹配到的对照组将被丢弃
                  subclass = 20)#分成了 10 个子类来进行匹配。
s.out1
summary(s.out1, un = TRUE)
data=match.data(s.out1)
Table(data=data,Factor="age+educ+race+married",
      Group="treat",file=NULL)

常见问题:

1、为什么匹配后对照组和实验组仍存在差异?

可以尝试设置caliper,及设定最大匹配距离,但是这会导致样本量减少。

2、计算距离包括哪些方法?

glm、gam、gbm、lasso、ridge等。

3、匹配方法包括哪些?

nearest、optimal、full、exact、subclass等

4、常遇到匹配后因素仍存在差异,如何解决?

(1)换不同的匹配方法和距离计算方法。(2)不一定要把所有有差异的因素纳入匹配方程式内,调换因素往往可以得到意想不到的结果。(3)不断调整caliper,一般设置为0.1就可以得到较好的结果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值