app - Usando desviaciones estándar en GenMatch para alentar más pares
tags link shiny (1)
Como Nick Kennedy describe:
summary(as.logical(lalonde$treat))
Mode FALSE TRUE NA''s
logical 260 185 0
GenMatch solo igualará M
veces para cada caso tratado. Potencialmente, puede eliminar los casos tratados y, por lo general, los casos de control ya que muchos no coinciden, pero no puede generar nuevos casos tratados de la nada: para eso es la imputación múltiple;
Si quiere decir que se generan más coincidencias por caso tratado, esto se logra con el argumento M
, pero se necesita precaución, especialmente cuando el número de controles es tan cercano al número de casos tratados, como en los datos de lalonde
, ya que ya se ha encontrado la mejor coincidencia, y la adición de coincidencias adicionales es poco probable que mejore las cosas y, a menudo, las empeora. Esto es mejor cuando el número de controles >> número de tratados.
Puede reconstruir cada ''par'' de coincidencias cuando M > 1
partir de los datos de salida, si eso es lo que desea, y esto dará un número de filas mayor que las 185 en el grupo de tratamiento, pero por supuesto con duplicados.
Siguiendo el ejemplo del paquete Matching y, en particular, el ejemplo GenMatch. Esto continúa a partir de una pregunta anterior.
Siguiendo el ejemplo en GenMatch
library(Matching)
data(lalonde)
attach(lalonde)
X = cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74)
BalanceMat <- cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74,
I(re74*re75))
genout <- GenMatch(Tr=treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE", M=1,
pop.size=16, max.generations=10, wait.generations=1)
genout$matches
genout$ecaliper
Y=re78/1000
mout <- Match(Y=Y, Tr=treat, X=X, Weight.matrix=genout)
summary(mout)
Vemos que 185 observaciones tratadas están emparejadas con 270 observaciones sin tratamiento.
Podemos generar una tabla con los casos de tratamiento y su edad a la izquierda y el caso de control y la edad a la derecha de la siguiente manera:
pairs <- data.frame(mout$index.treated, lalonde$age[mout$index.treated], mout$index.control, lalonde$age[mout$index.control])
Ahora, la literatura sobre el Weight.Matrix
generado desde GenMatch
es muy críptica y no explica qué representan estos valores. Tengo una pregunta abierta here . Ahora digamos que queremos relajar el emparejamiento para que se produzca un emparejamiento más flexible en los criterios de edad.
Vemos que sd(lalonde$age)
nos da un SD de 7 años para nuestros datos.
Así que quiero que Weight.matrix
en cuenta esto. Quiero usar un límite de 1 SD para la variable de age
y, por lo tanto, devolver más pares que el original 185-270.
Mi conjetura es generar una segunda función GenMatch
luego continuar con mi código. Por eso uso:
genout <- GenMatch(Tr=treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE",
pop.size=1000, max.generations=10, wait.generations=1,
caliper=c(2,1,1,1,1,1,1,1,1,1))
Pero esto no aumenta significativamente el número de pares que devuelvo.
Cualquier consejo o solución donde me vaya mal.