Мне нужен пакет или функция R, которые позволят мне сопоставить элементы управления с случаями для большого набора данных, 5 миллионов объектов.Я перепробовал несколько пакетов, мои проблемы приведены ниже.Я пытался сопоставить только по одной ковариате, и мне, скорее всего, нужно будет сопоставить по нескольким.
Пакет MatchIt
: метод ближайшего соседа, оптимальные и генетические методы все работают в течение нескольких часов.Метод "cem"
работает очень быстро, но мне нужно знать, какие случаи были сопоставлены / не сопоставлены, чтобы я мог провести дальнейший анализ с подобранным подмножеством.Выполнение match.data()
для результатов cem предоставляет только веса, которые будут использоваться в регрессии, а не соответствующее подмножество.Парная функция в cem работала бы, если бы я хотел сопоставления один к одному, но я хотел бы сохранить как можно больше элементов управления.
matchControls()
в пакете e1071
: выполняется долго, и они возвращают "not able to allocate vector of size 1352 GB"
Match()
функцию из пакета Matching
: просто запускается и запускается ...
quickmatch()
из пакета quickmatch
: он работал быстро, но я не уверен, что я правильно использую функцию или как извлечь сопоставленные данные из возвращенного объекта "qm_matching"
.Ниже моя попытка использовать quickmatch
на поддельных данных.
library(MatchIt)
library(cem)
library(Matching)
library(rgenoud)
library(quickmatch)
set.seed(100)
control_df=data.frame(Group=factor("Control"),value=rnorm(1400000,95,2))
set.seed(101)
treatment_df=data.frame(Group=factor("Treatment"),value=c(rnorm(500000,92,2),rnorm(100000,50,5)))
dat=rbind(control_df,treatment_df)
covariate_balance(dat$Group, dat$value, matching = NULL,
normalize = TRUE, all_differences = TRUE)
my_distances <- distances(dat, dist_variables = c("value"))
matchedDat=quickmatch(my_distances,dat$Group )
matchedDat.df=data.frame(matchedDat)
Не уверен, что делать с возвращенным объектом.Я думаю, что quickmatch
может быть наиболее приемлемым вариантом.Результат covariate_balance
показывает приличную степень дисбаланса между контрольной и лечебной группами, поэтому можно выполнить некоторое сопоставление.
В частности, как получить сопоставленные результаты, т. Е. Пометить объекты, которые были успешно сопоставлены междуКонтроль и лечение?cluster_label
из matchedDat.df
подразумевает, что функция создает большое количество кластеров, как / я могу ограничить это?
Буду признателен за любую помощь в ускорении некоторых из вышеперечисленных функций или новые предложения.