평가 지표

choyunjeong·2025년 1월 12일

1. Sample sizes

# Sample sizes
U.n       = nrow(data)
Ip.n      = sum(data$st_iptw)
Mw.n      = sum(data$mw)

\\[40pt]

2. nCases

# Unadjusted
U.nCases <- c(nTotal = tapply(data[,1], data[,'Tr'], FUN = length),
              nCases = sum(data[,'Y']),
              nCases = tapply(data[,'Y'], data[,'Tr'], FUN = sum))

formOut <- as.formula(sprintf(" ~ %s", 'Y'))
formBy  <- as.formula(sprintf(" ~ %s", 'Tr'))

# IPTW
Ip.nCases <- c(svyby(~I(Tr %in% c(0,1,2)), formBy, iptwData, svytotal)[,3],
               as.numeric(svytotal(formOut, design = iptwData)),
               svyby(formOut, by = ~ Tr, design = iptwData, FUN = svytotal)[,'Y'])
names(Ip.nCases) <- names(U.nCases)

# MW
Mw.nCases <- c(svyby(~I(Tr %in% c(0,1,2)), formBy, mwData, svytotal)[,3],
               as.numeric(svytotal(formOut, design = mwData)),
               svyby(formOut, by = ~ Tr, design = mwData, FUN = svytotal)[,'Y'])
names(Mw.nCases) <- names(U.nCases)


U  = U.nCases
Ip = Ip.nCases
Mw = Mw.nCases

\\[40pt]

3. Standardized mean differences

# Unadjusted
## SMD of X1
means <- tapply(data[['X1']], data[['Tr']], mean, na.rm = TRUE)

## Check Binary variables
if ('X1' %in% c('X4','X5','X10')) {
  vars <- means * (1 - means)
} else {
  vars <- tapply(data[['X1']], data[['Tr']], var, na.rm = TRUE)
}

## Pairwise differences, variance
meanDiffs <- outer(X = means, Y = means, FUN = "-")
varMeans <- outer(X = vars, Y = vars, FUN = "+") / 2

## Standardized mean differences
out <- meanDiffs / sqrt(varMeans)

## Absolute standardized mean differences
abs(out[lower.tri(out)])


# matching weight or IPTW
## SMD of X4
varFormula   <- as.formula(paste("~", 'X4'))
groupFormula <- as.formula(paste("~", 'Tr'))

means <- svyby(formula = varFormula, by = groupFormula,
               FUN = svymean, design = mwData, na.rm = TRUE)[,2]

if ('X4' %in% c('X4','X5','X10')) {
  vars  <- means * (1 - means)
} else {
  vars  <- svyby(formula = varFormula, by = groupFormula,
                 FUN = svyvar,  design = mwData, na.rm = TRUE)[,2]
}

## Pairwise differences, variance
meanDiffs <- outer(X = means, Y = means, FUN = "-")
varMeans  <- outer(X = vars, Y = vars, FUN = "+") / 2

## Standardized mean differences
out <- meanDiffs / sqrt(varMeans)

## Absolute standardized mean differences
abs(out[lower.tri(out)])

\\[40pt]

4. bias

참값 g(θ)g(\theta)의 추정량을 T(X)T(X)이라고 할 때, 편향(bias)은 다음과 같다.

E[T(X)]g(θ)E[T(X)]-g(\theta)

\\[40pt]

5. MSE

MSE=E[T(X)g(θ)]2=Var(T(X))+(bias)2\text{MSE}=E[T(X)-g(\theta)]^2 = \text{Var}(T(X))+(\text{bias})^2

\\[40pt]

6. coverage proportion

CP=E[T(X)]zα/2SE<g(θ)<E[T(X)]+zα/2SE\text{CP} = E[T(X)] - z_{\alpha/2}\cdot SE < g(\theta) < E[T(X)] + z_{\alpha/2}\cdot SE

참고

  • Yoshida K, Hernández-Díaz S, Solomon DH, et al. Matching weights to simultaneously compare three treatment groups: comparison to three-way matching. Epidemiology. 2017;28(3):387-395. https://github.com/kaz-yos/mw

0개의 댓글