Table below shows output from Matchit Package The formula is: group ~ age + sex (as a factor) +PSPRS The “distance variable” is the propensity score. We had to drop ~40 controls because they did not have PSPRSs

print("FULL SAMPLE")
## [1] "FULL SAMPLE"
summary(m.out.nearest)
## 
## Call:
## matchit(formula = fmlaMatching, data = df.peter.matchit, method = "nearest", 
##     link = "logit")
## 
## Summary of Balance for All Data:
##                             Means Treated Means Control Std. Mean Diff.
## distance                           0.1592        0.1157          0.5759
## Baseline_Age                      66.0000       68.5505         -0.2880
## `as.factor(female0_male1)`0        0.7333        0.5229          0.4758
## `as.factor(female0_male1)`1        0.2667        0.4771         -0.4758
## PSPRSTOT                          33.8000       30.1284          0.2417
##                             Var. Ratio eCDF Mean eCDF Max
## distance                        1.2840    0.1772   0.3529
## Baseline_Age                    1.2755    0.0815   0.2813
## `as.factor(female0_male1)`0          .    0.2104   0.2104
## `as.factor(female0_male1)`1          .    0.2104   0.2104
## PSPRSTOT                        1.2359    0.0645   0.2355
## 
## Summary of Balance for Matched Data:
##                             Means Treated Means Control Std. Mean Diff.
## distance                           0.1592        0.1580          0.0159
## Baseline_Age                      66.0000       68.0667         -0.2334
## `as.factor(female0_male1)`0        0.7333        0.8000         -0.1508
## `as.factor(female0_male1)`1        0.2667        0.2000          0.1508
## PSPRSTOT                          33.8000       35.2000         -0.0922
##                             Var. Ratio eCDF Mean eCDF Max Std. Pair Dist.
## distance                        1.0387    0.0083   0.0667          0.0248
## Baseline_Age                    1.4940    0.0688   0.2000          0.7302
## `as.factor(female0_male1)`0          .    0.0667   0.0667          0.7538
## `as.factor(female0_male1)`1          .    0.0667   0.0667          0.7538
## PSPRSTOT                        1.2982    0.0575   0.2667          0.8734
## 
## Sample Sizes:
##           Control Treated
## All           109      15
## Matched        15      15
## Unmatched      94       0
## Discarded       0       0
print("CBS SAMPLE")
## [1] "CBS SAMPLE"
summary(m.out.nearest.CBS)
## 
## Call:
## matchit(formula = fmlaMatching, data = df.peter.matchit.CBS, 
##     method = "nearest", link = "logit")
## 
## Summary of Balance for All Data:
##                             Means Treated Means Control Std. Mean Diff.
## distance                           0.1527        0.1367          0.3652
## Baseline_Age                      64.8000       67.2581         -0.2310
## `as.factor(female0_male1)`0        0.6000        0.4839          0.2370
## `as.factor(female0_male1)`1        0.4000        0.5161         -0.2370
## PSPRSTOT                          25.6000       23.9355          0.1742
##                             Var. Ratio eCDF Mean eCDF Max
## distance                        0.8457    0.1294   0.3419
## Baseline_Age                    1.2541    0.1399   0.4129
## `as.factor(female0_male1)`0          .    0.1161   0.1161
## `as.factor(female0_male1)`1          .    0.1161   0.1161
## PSPRSTOT                        0.6966    0.0854   0.2129
## 
## Summary of Balance for Matched Data:
##                             Means Treated Means Control Std. Mean Diff.
## distance                           0.1527        0.1556         -0.0680
## Baseline_Age                      64.8000       64.4000          0.0376
## `as.factor(female0_male1)`0        0.6000        0.6000          0.0000
## `as.factor(female0_male1)`1        0.4000        0.4000          0.0000
## PSPRSTOT                          25.6000       27.0000         -0.1465
##                             Var. Ratio eCDF Mean eCDF Max Std. Pair Dist.
## distance                        0.9750    0.0278      0.2          0.0682
## Baseline_Age                    7.6486    0.1545      0.4          0.8271
## `as.factor(female0_male1)`0          .    0.0000      0.0          0.4000
## `as.factor(female0_male1)`1          .    0.0000      0.0          0.4000
## PSPRSTOT                        0.3609    0.1200      0.4          1.1512
## 
## Sample Sizes:
##           Control Treated
## All            31       5
## Matched         5       5
## Unmatched      26       0
## Discarded       0       0
print("PSP SAMPLE")
## [1] "PSP SAMPLE"
summary(m.out.nearest.PSP)
## 
## Call:
## matchit(formula = fmlaMatching, data = df.peter.matchit.PSP, 
##     method = "nearest", link = "logit")
## 
## Summary of Balance for All Data:
##                             Means Treated Means Control Std. Mean Diff.
## distance                           0.1741        0.1059          0.6769
## Baseline_Age                      66.6000       69.0641         -0.2935
## `as.factor(female0_male1)`0        0.8000        0.5385          0.6538
## `as.factor(female0_male1)`1        0.2000        0.4615         -0.6538
## PSPRSTOT                          37.9000       32.5897          0.3279
##                             Var. Ratio eCDF Mean eCDF Max
## distance                        1.4917    0.2164   0.4231
## Baseline_Age                    1.4059    0.0954   0.2154
## `as.factor(female0_male1)`0          .    0.2615   0.2615
## `as.factor(female0_male1)`1          .    0.2615   0.2615
## PSPRSTOT                        1.3862    0.0976   0.3128
## 
## Summary of Balance for Matched Data:
##                             Means Treated Means Control Std. Mean Diff.
## distance                           0.1741        0.1772         -0.0309
## Baseline_Age                      66.6000       69.1000         -0.2978
## `as.factor(female0_male1)`0        0.8000        1.0000         -0.5000
## `as.factor(female0_male1)`1        0.2000        0.0000          0.5000
## PSPRSTOT                          37.9000       35.8000          0.1297
##                             Var. Ratio eCDF Mean eCDF Max Std. Pair Dist.
## distance                        0.9095    0.0116      0.1          0.0836
## Baseline_Age                    1.7291    0.1115      0.3          0.8933
## `as.factor(female0_male1)`0          .    0.2000      0.2          0.5000
## `as.factor(female0_male1)`1          .    0.2000      0.2          0.5000
## PSPRSTOT                        1.4347    0.0804      0.2          0.6606
## 
## Sample Sizes:
##           Control Treated
## All            78      10
## Matched        10      10
## Unmatched      68       0
## Discarded       0       0

Comparison of propensity scores between groups. There was orginally an outlier in the treatment group, this participant was removed based on our previous convo. The age of the participant was 44.

print("FULL SAMPLE")
## [1] "FULL SAMPLE"
plot(m.out.nearest, type = "jitter", interactive = FALSE)

print("CBS SAMPLE")
## [1] "CBS SAMPLE"
plot(m.out.nearest.CBS, type = "jitter", interactive = FALSE)

print("PSP SAMPLE")
## [1] "PSP SAMPLE"
plot(m.out.nearest.PSP, type = "jitter", interactive = FALSE)

Density Plots Black line = cases, gray line = controls Left graph is full dataset, right graph is matched dataset To me the matching is better, but it’s not perfect.

fmlaMatching<-NULL
fmlaMatching <- as.formula("Rockit_1_4RNTNI_0~Baseline_Age+female0_male1+PSPRSTOT")
m.out.nearest <- matchit(fmlaMatching, method = "nearest", 
                 data = df.peter.matchit, link = "logit")
m.out.nearest.CBS <- matchit(fmlaMatching, method = "nearest", 
                 data = df.peter.matchit.CBS, link = "logit")
m.out.nearest.PSP <- matchit(fmlaMatching, method = "nearest", 
                 data = df.peter.matchit.PSP, link = "logit")

print("FULL SAMPLE")
## [1] "FULL SAMPLE"
print(plot(m.out.nearest, type = "density", interactive = FALSE,
     which.xs = ~Baseline_Age + female0_male1  + PSPRSTOT))

## A matchit object
##  - method: 1:1 nearest neighbor matching without replacement
##  - distance: Propensity score
##              - estimated with logistic regression
##  - number of obs.: 124 (original), 30 (matched)
##  - target estimand: ATT
##  - covariates: Baseline_Age, female0_male1, PSPRSTOT
print("CBS SAMPLE")
## [1] "CBS SAMPLE"
print(plot(m.out.nearest.CBS, type = "density", interactive = FALSE,
     which.xs = ~Baseline_Age + female0_male1  + PSPRSTOT))

## A matchit object
##  - method: 1:1 nearest neighbor matching without replacement
##  - distance: Propensity score
##              - estimated with logistic regression
##  - number of obs.: 36 (original), 10 (matched)
##  - target estimand: ATT
##  - covariates: Baseline_Age, female0_male1, PSPRSTOT
print("PSP SAMPLE")
## [1] "PSP SAMPLE"
print(plot(m.out.nearest.PSP, type = "density", interactive = FALSE,
     which.xs = ~Baseline_Age + female0_male1  + PSPRSTOT))

## A matchit object
##  - method: 1:1 nearest neighbor matching without replacement
##  - distance: Propensity score
##              - estimated with logistic regression
##  - number of obs.: 88 (original), 20 (matched)
##  - target estimand: ATT
##  - covariates: Baseline_Age, female0_male1, PSPRSTOT