大型数据集的匹配采样包或函数
Matched Sampling package or function for large dataset
我需要一个 R 包或函数,以便我可以将控件与包含 500 万个受试者的大型数据集的案例相匹配。
我尝试了几个包,我的问题总结如下。我只尝试在单个协变量上进行匹配,而且我很可能需要在多个协变量上进行匹配。
包MatchIt
:最近邻法、最优法、遗传法都只是运行小时小时。 "cem"
方法 运行 非常快,但我需要知道哪些案例是 matched/unmatched 以便我可以对匹配的子集进行进一步分析。 运行 cem 结果上的 match.data()
仅提供回归中使用的权重,而不是匹配的子集。如果我想要一对一匹配但我想保留尽可能多的控件,则 cem 中的 paired 函数会起作用。
matchControls()
在e1071
包中:运行s很长一段时间和他们returns"not able to allocate vector of size 1352 GB"
Match()
来自 Matching
包的函数:只有 运行s 和 运行s...
quickmatch
包中的 quickmatch()
:它 运行 很快,但我不确定我是否正确使用了该函数或如何从 [=21] 中提取匹配的数据=] 对象返回。以下是我对假数据使用 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
结果显示对照组和治疗组之间存在相当程度的不平衡,因此可以进行一定程度的匹配。
具体如何获得匹配结果,即标记在控制和治疗之间成功匹配的受试者? matchedDat.df
中的 cluster_label
暗示该函数正在创建大量集群 how/can 我限制这个?
任何关于加速上述某些功能的帮助或新建议将不胜感激。
仔细阅读 cem
文档后,我认为我可以使用 Matchit
包或 cem
包解决我的问题。
library(cem)
library(tidyverse)
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)%>% rownames_to_column()
cem.match=cem(treatment="Group", baseline.group="Control",data=dat,keep.all=TRUE, drop ="rowname")
matchedData=data.frame(Group.check=cem.match$groups, matched=cem.match$matched,weights=cem.match$w)%>%
rownames_to_column()%>%
inner_join(dat,by="rowname") %>%
filter(matched==TRUE)
我需要一个 R 包或函数,以便我可以将控件与包含 500 万个受试者的大型数据集的案例相匹配。 我尝试了几个包,我的问题总结如下。我只尝试在单个协变量上进行匹配,而且我很可能需要在多个协变量上进行匹配。
包MatchIt
:最近邻法、最优法、遗传法都只是运行小时小时。 "cem"
方法 运行 非常快,但我需要知道哪些案例是 matched/unmatched 以便我可以对匹配的子集进行进一步分析。 运行 cem 结果上的 match.data()
仅提供回归中使用的权重,而不是匹配的子集。如果我想要一对一匹配但我想保留尽可能多的控件,则 cem 中的 paired 函数会起作用。
matchControls()
在e1071
包中:运行s很长一段时间和他们returns"not able to allocate vector of size 1352 GB"
Match()
来自 Matching
包的函数:只有 运行s 和 运行s...
quickmatch
包中的 quickmatch()
:它 运行 很快,但我不确定我是否正确使用了该函数或如何从 [=21] 中提取匹配的数据=] 对象返回。以下是我对假数据使用 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
结果显示对照组和治疗组之间存在相当程度的不平衡,因此可以进行一定程度的匹配。
具体如何获得匹配结果,即标记在控制和治疗之间成功匹配的受试者? matchedDat.df
中的 cluster_label
暗示该函数正在创建大量集群 how/can 我限制这个?
任何关于加速上述某些功能的帮助或新建议将不胜感激。
仔细阅读 cem
文档后,我认为我可以使用 Matchit
包或 cem
包解决我的问题。
library(cem)
library(tidyverse)
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)%>% rownames_to_column()
cem.match=cem(treatment="Group", baseline.group="Control",data=dat,keep.all=TRUE, drop ="rowname")
matchedData=data.frame(Group.check=cem.match$groups, matched=cem.match$matched,weights=cem.match$w)%>%
rownames_to_column()%>%
inner_join(dat,by="rowname") %>%
filter(matched==TRUE)