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/
pacman::p_load(knitr, wakefield, MatchIt, tableone, captioner)
variables
names(mydata)
## [1] "year" "age" "job" "educ1"
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"))
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
| 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 |
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
| 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
| 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)

save new dataset
df.match <- match.data(match.it)[1:ncol(mydata)]
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
| 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=