R: Соответствие показателя склонности с использованием MatchIt. Как найти количество совпадающих наблюдений с заменой = ИСТИНА? - PullRequest
1 голос
/ 06 мая 2019

Пожалуйста, примите во внимание следующее:

Я сопоставляю данные с пакетом MatchIt в R. У меня меньше элементов управления, чем обработано, и использую опцию replace = TRUE. Согласно руководству , веса сообщают нам частоту согласованных элементов управления.

Из руководства:

"Для сопоставления с заменой используйте replace = TRUE. После сопоставления с заменой веса могут использоваться для отражения частоты с которым был согласован каждый блок управления. "

Однако я не понимаю, почему веса могут иметь десятичные дроби и как это будет отражать частоту.

Например, я добавил replace == TRUE к примеру в руководстве (см. Стр. 18):

library("dplyr")
library("MatchIt")

m.out1 <- matchit(treat ~ re74 + re75 + age + educ, data = lalonde,
 method = "nearest", distance = "logit", replace = T)

tail(match.data(m.out1), 15)
#>         treat age educ black hispan married nodegree re74 re75      re78
#> PSID388     0  19   11     1      0       0        1    0    0 16485.520
#> PSID390     0  48   13     0      0       1        0    0    0     0.000
#> PSID392     0  17   10     1      0       0        1    0    0     0.000
#> PSID393     0  38   12     0      0       1        0    0    0 18756.780
#> PSID396     0  48   14     0      0       1        0    0    0  7236.427
#> PSID398     0  17    8     1      0       0        1    0    0  4520.366
#> PSID400     0  37    8     1      0       0        1    0    0   648.722
#> PSID401     0  17   10     1      0       0        1    0    0  1053.619
#> PSID407     0  23   12     0      0       0        0    0    0  3902.676
#> PSID409     0  17   10     0      0       0        1    0    0 14942.770
#> PSID411     0  18   10     1      0       0        1    0    0  5306.516
#> PSID413     0  17   10     0      0       1        1    0    0  3859.822
#> PSID419     0  51    4     1      0       0        1    0    0     0.000
#> PSID423     0  27   10     1      0       0        1    0    0  7543.794
#> PSID425     0  18   11     0      0       0        1    0    0 10150.500
#>          distance weights
#> PSID388 0.4067545     0.6
#> PSID390 0.4042321     1.2
#> PSID392 0.3974677     0.6
#> PSID393 0.4016920     4.2
#> PSID396 0.4152715     0.6
#> PSID398 0.3758217     1.8
#> PSID400 0.3595084     0.6
#> PSID401 0.3974677     1.2
#> PSID407 0.4144044     1.8
#> PSID409 0.3974677     0.6
#> PSID411 0.3966277     1.2
#> PSID413 0.3974677     1.2
#> PSID419 0.3080590     0.6
#> PSID423 0.3890954     1.2
#> PSID425 0.4076015     1.2

Для управления «PSID393» вес составляет 4,276. Следовательно, я бы предположил, что этот элемент управления соответствовал 4 или 5 раз (после округления).

Однако мы также можем посмотреть на match.matrix, чтобы увидеть подходящую обработку и элементы управления один за другим. Фильтруя «PSID393», мы видим, что элемент управления фактически соответствует 7 раз:

m.out1$match.matrix %>% data.frame() %>% filter(X1 == "PSID393")


#>        X1
#> 1 PSID393
#> 2 PSID393
#> 3 PSID393
#> 4 PSID393
#> 5 PSID393
#> 6 PSID393
#> 7 PSID393

Создано в 2019-05-06 пакетом Представить (v0.2.1)

Как правильно интерпретировать эти два выхода?

1 Ответ

2 голосов
/ 06 мая 2019

Веса масштабируются таким образом, чтобы они суммировались с количеством уникальных сопоставленных наблюдений в контрольной группе. Используя данные вашего примера, обратите внимание, что сумма весов равна количеству наблюдений, а средний вес равен 1. Кроме того, вес наиболее часто используемых наблюдений (наблюдений) в семь раз превышает вес наименее используемых наблюдений. ):

match.data(m.out1) %>%
  group_by(treat) %>% 
  summarise(min.weight=min(weights),
            max.weight=max(weights),
            mean.weight=mean(weights),
            sum.weights=sum(weights),
            n=n(),
            max.match.ratio=max.weight/min.weight)
  treat min.weight max.weight mean.weight sum.weights     n max.match.ratio
1     0      0.605       4.24           1         112   112               7
2     1      1           1              1         185   185               1

Чтобы посмотреть распределение весов, мы можем сделать:

match.data(m.out1) %>% 
  group_by(treat, weights) %>% 
  tally %>% 
  group_by(treat) %>% 
  mutate(weight.ratio = weights/min(weights))
  treat weights     n weight.ratio
1     0   0.605    74            1
2     0   1.21     19            2
3     0   1.82     10            3
4     0   2.42      6            4
5     0   3.63      2            6
6     0   4.24      1            7
7     1   1       185            1

В конце виньетка есть часто задаваемые вопросы *1015*. Пункт 5.3, «Насколько точно созданы веса?» отмечает, что «веса контрольной группы масштабируются для суммирования с количеством уникально подобранных элементов управления единицы ".

...