1. Treatment assignment mechanism given a binary logistic model in data generated by a multinomial logistic mechanism
- Log probability ratio
logPr1v0 <- lstParams$alpha10 + as.matrix(data1[,paste0('X',c(1:10))]) %*% lstParams$alpha1X
logPr2v0 <- lstParams$alpha20 + as.matrix(data1[,paste0('X',c(1:10))]) %*% lstParams$alpha2X
logPr2v1 <- logPr2v0 - logPr1v0
- Probability ratio
pr1v0 <- exp(logPr1v0)
pr2v0 <- exp(logPr2v0)
pr2v1 <- exp(logPr2v1)
- 범주가 3개인 데이터에서 이항 로지스틱 모형으로 쌍별 비교를 할 경우, 세 개 (1 vs 0, 2 vs 0, 2 vs 1)의 로지스틱 모형이 필요하다. 여기서는 1 vs 0만 알아보았다.
- Individual treatment probabilities (True propensity score)
denom <- 1 + pr1v0
p0 <- 1 / denom
p1 <- pr2v1 / denom
P(Ti=0∣Xi=xi)=1+exp(α10+α1XTXi)1P(Ti=1∣Xi=xi)=1+exp(α10+α1XTXi)exp(α10+α1XTXi)
2. Fit binary logistic regression (1 vs 0)
data$Tr_pair = data[,'Tr']
data1 = data[data[,'Tr'] != 0,] %>%
mutate(Tr = if_else(Tr == min(Tr), 0, 1)); head(data1)
resLogi = glm(formula = Tr ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10,
data = data1,
family = "binomial")
psData = as.data.frame(predict(resLogi, type = "response"))
psVars <- sprintf("%sv%s", max(unique(data1$Tr_pair)), min(unique(data1$Tr_pair)))
colnames(psData) <- paste0("PS_", psVars)
data2 = cbind(data1,psData); head(data2)
이후 성향점수 추정 및 가중치 방법은 앞 방법과 동일하다.
IPTW=e(x)Z+1−e(x)1−Z