Ich benutze das MatchIt-Paket für diese Art von Sache. Sie Beratung erhalten kann Propensity Score Matching zu verwenden, aber es gibt Einschränkungen, die weit verbreitet Ansatz (siehe: PS Not)
library(MatchIt) # use for matching
library(tidyverse) # The overall package. It will load lots of dependencies
set.seed(950)
n.size <- 1000
# This creates a tibble (an easier to use version of a data frame)
myData <- tibble(
a = lubridate::now() + runif(n.size) * 86400,
b = lubridate::today() + runif(n.size) * 30,
ID = 1:n.size,
# d = runif(1000),
ivFactor = sample(c("Level 1", "Level 2", "Level 3", "Level 4"), n.size, replace = TRUE),
age = round(rnorm(n = n.size, mean = 52, sd = 10),2),
outContinuous = rnorm(n = n.size, mean = 100, sd = 10),
tmt = sample(c(1,0), size = n.size, prob = c(.3, .7), replace = TRUE)
)
# Using matching methods suggestions found in Ho, Imai, King and Stuart
myData.balance <- matchit(tmt~age + ivFactor, data = myData, method = "nearest", distance = "logit")
# Check to see if the matching improved balance between treatment and control group
summary(myData.balance)
# Extract the matched data. Now we can use this in subsequent analyses
myData.matched <- match.data(myData.balance)
bitte ein reproduzierbares Beispiel mit Daten erstellen, damit wir besser –
helfen Es ist nicht wirklich schwer zu finden mit Google. Probieren Sie es einfach aus (ein Hinweis: Package Matching) –
Die Lösungen, die ich mit Google gefunden habe, beinhalten entweder Zufalls-Matching oder komplexe Algorithmen (z. B. Distanzschätzung). –