
关键词:R,PSMDID,DID,倾向得分,dfferent in different
1使用不匹配的数据进行预分析
1.1均值差异:结果变量 1.2均值差异:治疗前的协变量
2倾向得分估算
2.1检查共同支持区域
3执行匹配算法
4检查匹配样本中的协变量余额
4.1 外观检查 4.2 均值差异 4.3 平均绝对标准差
5评估治疗效果
练习
在本教程中,我们将分析上公立学校对学生成绩的影响。由于参加天主教学校的学生与参加公立学校的学生平均有所不同,因此我们将使用倾向得分匹配来获得更可信的天主教学校因果估计。
为了通过匹配来研究上天主教学校(“treatment”)与公立学校(“对照”)对学生成绩的影响,我们将通过以下步骤:
- 估计倾向得分(在一组预处理协变量的情况下treatment的可能性)。
- 检查common support的区域。
- 选择并执行匹配算法。在本教程中,我们将使用最近邻倾向得分匹配。
- 匹配后检查协变量平衡。
- 估计治疗效果。
此外,在实施匹配方法之前,我们将使用不匹配的数据进行以下分析:
检查治疗变量和对照变量之间的均值差异。 检查“治疗”变量与“对照”之间的均值差异,以了解治疗前的协变量。 在开始之前,请加载一些软件包并 读取 ecls.csv 文件:
library(MatchIt)
library(dplyr)
library(ggplot2)
ecls <- read.csv("ecls.csv")
1 使用不匹配的数据进行预分析
1.1均值差异:结果变量
这是关于公立和天主教学校学生在数学成绩方面的一些基本信息。请注意,我们使用学生的标准化后数学成绩(c5r2mtsc_std)(均值为0,标准差为1)作为目标结果变量。感兴趣的独立变量是catholic(1 =学生就读天主教学校; 0 =学生就读公立学校)。
ecls %>%
group_by(catholic) %>%
summarise(n_students = n(),
mean_math = mean(c5r2mtsc_std),
std_error = sd(c5r2mtsc_std) / sqrt(n_students))
## # A tibble: 2 × 4
## catholic n_students mean_math std_error
## <int> <int> <dbl> <dbl>
## 1 0 9568 -0.03059583 0.01038536
## 2 1 1510 0.19386817 0.02235282
请注意,结果变量已标准化(平均值= 0,标准差= 1)。这在教育研究中很常见。上面的汇总表表明,三年级天主教学校学生的平均数学分数比公立学校学生的平均数学分数高出20%以上。可以使用以下原始数据计算得出:
ecls %>%
mutate(test = (c5r2mtsc - mean(c5r2mtsc)) / sd(c5r2mtsc)) %>% #标准化
group_by(catholic) %>%
summarise(mean_math = mean(test))
## # A tibble: 2 × 2
## catholic mean_math
## <int> <dbl>
## 1 0 -0.03059583
## 2 1 0.19386817
在传统的置信度水平上,均值差异在统计上是显着的(从上述较小的标准误差也可以看出):
with(ecls, t.test(c5r2mtsc_std ~ catholic))
##
## Welch Two Sample t-test
##
## data: c5r2mtsc_std by catholic
## t = -9.1069, df = 2214.5, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.2727988 -0.1761292
## sample estimates:
## mean in group 0 mean in group 1
## -0.03059583 0.19386817
1.2均值差异:治疗前的协变量
现在,我们将使用以下协变量:
racewhite:学生是白人(1)还是不是白人(0)? p5hmage:母亲的年龄 w3income:家庭收入 p5numpla:学生居住至少4个月的地方数量 w3momedhsb:母亲的教育程度是高中或以下(1)还是一些大学或以上(0)? 让我们根据治疗状态计算每个协变量的平均值:
ecls_cov <- c('race_white', 'p5hmage', 'w3income', 'p5numpla', 'w3momed_hsb')
ecls %>%
group_by(catholic) %>%
select(