Расчет среднего эффекта лечения на пролечиваемого (ATET / ATT) с помощью оценки склонности - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь рассчитать средний эффект лечения на пролеченных, используя оценку склонности. Я использую эти данные, чтобы оценить, влияет ли курение матери во время беременности на массу тела при рождении.

Данные включают столбец с массой тела при рождении (dbrwt), столбец со статусом курения (табак01) и столбцы с несколькими ковариатами.

Я рассчитал средний эффект лечения (ATE) следующим образом:

model1 <- lm(dbrwt ~ tobacco01, data = dfc, weights = weight)

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

Теперь, когда я рассчитал ATE, я пытаюсь найти способ рассчитать средний эффект лечения на пролеченном (ATET). В идеале я мог бы сделать это, изменив приведенную выше формулу. В Stata есть простая команда "atet", поэтому мне было интересно, есть ли что-нибудь сопоставимое в R. Я не нашел ничего сопоставимого при поиске, особенно когда я указываю, что хочу включить оценки склонности.

Я также готов сделать это вручную. ATE - это среднее значение наклона по всей совокупности (также известное как коэффициент переменной табака01 выше). ATET - это среднее значение наклона по подгруппе населения для матерей, которые курили во время беременности. По сути, это вопрос: каков был бы коэффициент матерей среди курящих, если бы они не курили?

1 Ответ

1 голос
/ 07 мая 2020

Вы можете избежать использования пакетов, применив свои статистические знания.

Оценка склонности (ps), скорее всего, еще не является весами для вашей взвешенной ATE-регрессии. Вы должны рассчитать веса, используя соответствующие формулы (см., Например, Morgan and Winship 2015, Глава 7).

# ATE
dfc$w.ate <- with(dfc, ifelse(tobacco01 == 1, 1 / ps, 1 / (1 - ps)))

ate <- lm(dbrwt ~ tobacco01, data=dfc, weights=w.ate)
coef(ate)
# (Intercept)   tobacco01 
#   3817.6932   -178.0539 

Также есть формула для взвешенной ATT-регрессии.

dfc$w.att <- with(dfc, ifelse(tobacco01 == 1, 1, ps / (1 - ps)))

att <- lm(dbrwt ~ tobacco01, data=dfc, weights=w.att)
coef(att)
# (Intercept)   tobacco01 
#   3843.0671   -334.1448 

Данные игрушки:

set.seed(42)
n <- 1e3
dfc <- data.frame(dbrwt=rnorm(n, 3500, 500), tobacco01=rbinom(n, 1, .1), ps=runif(n))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...