library(foreign)
data=read.dta("C:/Users/binht/Dropbox/Hue/paper writing/Intention to quit/BAO/dataforR1.dta")
mydata=subset(data, select=c("year", "age","job", "educ1"  ))

https://datascienceplus.com/how-to-use-r-for-matching-samples-propensity-score/

PSA


pacman::p_load(knitr, wakefield, MatchIt, tableone, captioner)

0.0.0.1

library(wakefield)

0.1 variables

names(mydata)
## [1] "year"  "age"   "job"   "educ1"

0.1.1

library(pacman)
## Warning: package 'pacman' was built under R version 4.0.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.0.3
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:wakefield':
## 
##     id
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
mydata$educ1=as.factor(mydata$educ1)
mydata$job=as.factor(mydata$job)
mydata$year=as.factor(mydata$year)
library(plyr)
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
## The following object is masked from 'package:wakefield':
## 
##     id
mydata$group <- revalue(mydata$year, c("2010"= "0", "2015"= "1"))

0.2 Table 1: Comparison of unmatched samples

pacman::p_load(tableone)
table1 <- CreateTableOne(vars = c('age', "job", 'educ1' ), 
                         data = mydata, 
                         factorVars = 'educ1', 
                         strata = 'year')
table1 <- print(table1, 
                printToggle = FALSE, 
                noSpaces = TRUE)
kable(table1[,1:3],  
      align = 'c', 
      caption = 'Table 1: Comparison of unmatched samples')
Table 1: Comparison of unmatched samples
2010 2015 p
n 1471 1303
age (mean (SD)) 42.09 (13.48) 44.85 (13.85) <0.001
job (%) <0.001
0 150 (10.2) 174 (13.4)
1 139 (9.4) 93 (7.1)
2 107 (7.3) 137 (10.5)
3 1075 (73.1) 899 (69.0)
educ1 = 1 (%) 1086 (73.8) 936 (71.8) 0.256

0.3 matching

set.seed(1234)

match.it <- matchit(group ~ educ1 + job + age, data = mydata, method="nearest", ratio=1)

a <- summary(match.it)
kable(a$nn, digits = 2, align = 'c', 
      caption = 'Table 2: Sample sizes')
Table 2: Sample sizes
Control Treated
All 1471 1303
Matched 1303 1303
Unmatched 168 0
Discarded 0 0
kable(a$sum.matched[c(1,2,4)], digits = 2, align = 'c', 
      caption = 'Table 3: Summary of balance for matched data')
Table 3: Summary of balance for matched data
Means Treated Means Control Mean Diff
distance 0.48 0.47 0.01
educ10 0.28 0.29 -0.01
educ11 0.72 0.71 0.01
job1 0.07 0.09 -0.02
job2 0.11 0.08 0.02
job3 0.69 0.71 -0.02
age 44.85 43.97 0.88
plot(match.it, type = 'jitter', interactive = FALSE)

0.4 save new dataset

df.match <- match.data(match.it)[1:ncol(mydata)]

0.5 new result

pacman::p_load(tableone)
table4 <- CreateTableOne(vars = c('age', "job", 'educ1'), 
                         data = df.match, 
                         factorVars = 'educ1', 
                         strata = 'year')
table4 <- print(table4, 
                printToggle = FALSE, 
                noSpaces = TRUE)
kable(table4[,1:3],  
      align = 'c', 
      caption = 'Table 4: Comparison of matched samples')
Table 4: Comparison of matched samples
2010 2015 p
n 1303 1303
age (mean (SD)) 43.97 (13.04) 44.85 (13.85) 0.094
job (%) 0.022
0 147 (11.3) 174 (13.4)
1 119 (9.1) 93 (7.1)
2 107 (8.2) 137 (10.5)
3 930 (71.4) 899 (69.0)
educ1 = 1 (%) 929 (71.3) 936 (71.8) 0.794
LS0tDQp0aXRsZTogIlByb3BlbnNpdHkgU2NvcmUgQW5hbHlzaXMgKFBTQSkgLSBJVFEtdG9iYWNjbyINCmF1dGhvcjogIkJpbmggVGhhbmcgVHJhbiINCmRhdGU6ICJPY3QvMjQvMjAyMCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiBqb3VybmFsDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQotLS0NCg0KYGBge3J9DQpsaWJyYXJ5KGZvcmVpZ24pDQpgYGANCg0KDQpgYGB7cn0NCmRhdGE9cmVhZC5kdGEoIkM6L1VzZXJzL2Jpbmh0L0Ryb3Bib3gvSHVlL3BhcGVyIHdyaXRpbmcvSW50ZW50aW9uIHRvIHF1aXQvQkFPL2RhdGFmb3JSMS5kdGEiKQ0KYGBgDQoNCg0KYGBge3J9DQpteWRhdGE9c3Vic2V0KGRhdGEsIHNlbGVjdD1jKCJ5ZWFyIiwgImFnZSIsImpvYiIsICJlZHVjMSIgICkpDQogICAgICAgICAgICAgIA0KYGBgDQoNCg0KDQpodHRwczovL2RhdGFzY2llbmNlcGx1cy5jb20vaG93LXRvLXVzZS1yLWZvci1tYXRjaGluZy1zYW1wbGVzLXByb3BlbnNpdHktc2NvcmUvDQoNCg0KDQoNCiFbUFNBXShodHRwczovL3d3dy5zdGF0aXN0aWNzaG93dG8uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE1LzA5L3JhbmRvbWl6ZWQtY29udHJvbGxlZC10cmlhbC5wbmcpDQoNCi0tLQ0KDQpgYGB7cn0NCnBhY21hbjo6cF9sb2FkKGtuaXRyLCB3YWtlZmllbGQsIE1hdGNoSXQsIHRhYmxlb25lLCBjYXB0aW9uZXIpDQpgYGANCg0KDQojIyMjIA0KYGBge3J9DQpsaWJyYXJ5KHdha2VmaWVsZCkNCg0KYGBgDQoNCiMjIHZhcmlhYmxlcw0KDQoNCmBgYHtyfQ0KbmFtZXMobXlkYXRhKQ0KYGBgDQoNCg0KIyMjDQoNCmBgYHtyfQ0KbGlicmFyeShwYWNtYW4pDQpsaWJyYXJ5KGRwbHlyKQ0KDQpgYGANCg0KDQpgYGB7cn0NCm15ZGF0YSRlZHVjMT1hcy5mYWN0b3IobXlkYXRhJGVkdWMxKQ0KbXlkYXRhJGpvYj1hcy5mYWN0b3IobXlkYXRhJGpvYikNCm15ZGF0YSR5ZWFyPWFzLmZhY3RvcihteWRhdGEkeWVhcikNCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkocGx5cikNCg0KbXlkYXRhJGdyb3VwIDwtIHJldmFsdWUobXlkYXRhJHllYXIsIGMoIjIwMTAiPSAiMCIsICIyMDE1Ij0gIjEiKSkNCg0KDQpgYGANCg0KDQoNCiMjIFRhYmxlIDE6IENvbXBhcmlzb24gb2YgdW5tYXRjaGVkIHNhbXBsZXMNCg0KYGBge3J9DQpwYWNtYW46OnBfbG9hZCh0YWJsZW9uZSkNCnRhYmxlMSA8LSBDcmVhdGVUYWJsZU9uZSh2YXJzID0gYygnYWdlJywgImpvYiIsICdlZHVjMScgKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG15ZGF0YSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yVmFycyA9ICdlZHVjMScsIA0KICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0YSA9ICd5ZWFyJykNCnRhYmxlMSA8LSBwcmludCh0YWJsZTEsIA0KICAgICAgICAgICAgICAgIHByaW50VG9nZ2xlID0gRkFMU0UsIA0KICAgICAgICAgICAgICAgIG5vU3BhY2VzID0gVFJVRSkNCmthYmxlKHRhYmxlMVssMTozXSwgIA0KICAgICAgYWxpZ24gPSAnYycsIA0KICAgICAgY2FwdGlvbiA9ICdUYWJsZSAxOiBDb21wYXJpc29uIG9mIHVubWF0Y2hlZCBzYW1wbGVzJykNCg0KYGBgDQoNCg0KDQojIyBtYXRjaGluZw0KDQpgYGB7cn0NCnNldC5zZWVkKDEyMzQpDQoNCm1hdGNoLml0IDwtIG1hdGNoaXQoZ3JvdXAgfiBlZHVjMSArIGpvYiArIGFnZSwgZGF0YSA9IG15ZGF0YSwgbWV0aG9kPSJuZWFyZXN0IiwgcmF0aW89MSkNCg0KYSA8LSBzdW1tYXJ5KG1hdGNoLml0KQ0KDQpgYGANCg0KYGBge3J9DQprYWJsZShhJG5uLCBkaWdpdHMgPSAyLCBhbGlnbiA9ICdjJywgDQogICAgICBjYXB0aW9uID0gJ1RhYmxlIDI6IFNhbXBsZSBzaXplcycpDQpgYGANCg0KDQpgYGB7cn0NCmthYmxlKGEkc3VtLm1hdGNoZWRbYygxLDIsNCldLCBkaWdpdHMgPSAyLCBhbGlnbiA9ICdjJywgDQogICAgICBjYXB0aW9uID0gJ1RhYmxlIDM6IFN1bW1hcnkgb2YgYmFsYW5jZSBmb3IgbWF0Y2hlZCBkYXRhJykNCmBgYA0KDQpgYGB7cn0NCnBsb3QobWF0Y2guaXQsIHR5cGUgPSAnaml0dGVyJywgaW50ZXJhY3RpdmUgPSBGQUxTRSkNCmBgYA0KDQoNCg0KIyMgc2F2ZSBuZXcgZGF0YXNldA0KDQpgYGB7cn0NCmRmLm1hdGNoIDwtIG1hdGNoLmRhdGEobWF0Y2guaXQpWzE6bmNvbChteWRhdGEpXQ0KDQpgYGANCg0KDQojIyBuZXcgcmVzdWx0DQoNCmBgYHtyfQ0KcGFjbWFuOjpwX2xvYWQodGFibGVvbmUpDQp0YWJsZTQgPC0gQ3JlYXRlVGFibGVPbmUodmFycyA9IGMoJ2FnZScsICJqb2IiLCAnZWR1YzEnKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRmLm1hdGNoLCANCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JWYXJzID0gJ2VkdWMxJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRhID0gJ3llYXInKQ0KdGFibGU0IDwtIHByaW50KHRhYmxlNCwgDQogICAgICAgICAgICAgICAgcHJpbnRUb2dnbGUgPSBGQUxTRSwgDQogICAgICAgICAgICAgICAgbm9TcGFjZXMgPSBUUlVFKQ0Ka2FibGUodGFibGU0WywxOjNdLCAgDQogICAgICBhbGlnbiA9ICdjJywgDQogICAgICBjYXB0aW9uID0gJ1RhYmxlIDQ6IENvbXBhcmlzb24gb2YgbWF0Y2hlZCBzYW1wbGVzJykNCmBgYA0KDQo=