#r #propensity-score-matching
Вопрос:
Я использую пакет MatchIt в R для сопоставления показателей склонности. Метод сопоставления-ближайший сосед, а мера расстояния-glm. Когда я оставляю соотношение и штангенциркуль установленными по умолчанию или если я ввожу значение, отличное от значения по умолчанию только для одного из них, я получаю распределение весов, которое я ожидаю без замены, т. Е. Все 0 или 1. Однако, когда я устанавливаю оба значения не по умолчанию, я получаю некоторые веса выше 1, а некоторые между 0 и 1, что является распределением, которое я связываю с заменой.
Я неправильно понимаю разницу между выборкой с заменой и без нее, или это случай, который переопределяет аргумент replace=F? Я прочитал документацию по пакету, но очень возможно, что я пропустил или неправильно понял раздел, в котором это объясняется. Если это так, не стесняйтесь просто направить меня в соответствующий раздел!
(Надеюсь) воспроизводимый пример:
set.seed(42)
DF<-data.frame(Group=factor(c(rep("Treatment",40),rep("Control",360))),
mVar1=factor(c(sample(LETTERS[c(1,1,1,2)],40,replace=T),sample(LETTERS[c(1,2)],360,replace=T))),
mVar2=factor(c(sample(LETTERS[c(3,3,4,4,4,5)],40,replace=T),sample(LETTERS[c(3,4,5)],360,replace=T))),
mVar3=c(rpois(40,3),rpois(360,1)))
str(DF)
(m1<-matchit(Group~mVar1 mVar2 mVar3,data=DF,method="nearest",distance="glm",ratio=3,replace=F))
plot(m1,type="jitter",interactive=FALSE)
hist(m1$weights)
(m2<-matchit(Group~mVar1 mVar2 mVar3,data=DF,method="nearest",distance="glm",caliper=0.1,replace=F))
plot(m2,type="jitter",interactive=FALSE)
hist(m2$weights)
(m3<-matchit(Group~mVar1 mVar2 mVar3,data=DF,method="nearest",distance="glm",ratio=3,caliper=0.1,replace=F))
plot(m3,"jitter",interactive=FALSE)
hist(m3$weights)
Спасибо!
Ответ №1:
Соответствующие веса вычисляются по формуле, описанной в ?matchit
. Эта формула используется при сопоставлении без замены, как это делаете вы. Формула выглядит следующим образом:
Каждой единице присваивается подкласс, представляющий пару, частью которой они являются (в случае соответствия k:1), или слой, к которому они принадлежат (в случае точного соответствия, огрубленного точного соответствия, полного соответствия или подкласса). Формула для вычисления весов зависит от аргумента, предоставленного в estimand. Новая страта «оценка склонности» (p) вычисляется как доля единиц в каждой страте, которые входят в рассматриваемую группу, и всем единицам в этой страте присваивается эта оценка склонности. Вес потом рассчитываются с использованием стандартных формул для обратных вероятность весов: для att, вес 1 для обработанных блоков и P/(1-P) для блоков управления; для УВД, Весы (1-р)/р, обработанных блоков и 1 для блоков управления; для ели, весов 1/P для обработанных блоков и 1/(1-P) для блоков управления.
…
В каждой группе лечения веса делятся на среднее значение ненулевых весов в этой группе лечения, чтобы суммировать веса с количеством единиц в этой группе лечения.
При использовании постоянного коэффициента соответствия (например, каждый обработанный блок получает 1 совпадение или каждый обработанный блок получает 3 совпадения) веса будут постоянными для всех блоков управления. В противном случае веса будут отличаться для блоков управления. То, что вы видите, — это изменение веса блоков управления. Случается так, что это также может произойти при сопоставлении с заменой, но это также может произойти при сопоставлении с переменным соотношением или полном сопоставлении, причем и то, и другое без замены.
Чтобы убедиться, что вы действительно соответствуете замене, запустите table(table(m3$match.matrix))
. table(m3$match.matrix)
сообщает вам, сколько раз каждый блок управления используется в качестве совпадения, и запуск table()
на этом выходе сообщает вам, сколько раз каждый раз используется блок управления. Вы увидите, что каждый блок управления используется только один раз , поэтому на выходе будет только одна запись table(table())
, указывающая, что согласование выполняется без замены.
Комментарии:
1. Спасибо тебе @Noah. Это невероятно полезно!