>

대규모 데이터 세트 인 5 백만 명의 사례에 대해 컨트롤을 일치시킬 수있는 R 패키지 또는 기능이 필요합니다. 몇 가지 패키지를 시도했는데 문제가 아래에 요약되어 있습니다. 단일 공변량에서만 일치 시키려고했지만 여러 번 일치해야합니다.

패키지 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 에서  함수가 많은 수의 클러스터를 생성하고 있음을 의미합니다. 어떻게/제한 할 수 있습니까?

위의 기능 중 일부의 속도를 높이거나 새로운 제안을하는 데 도움을 주시면 감사하겠습니다.

  • 답변 # 1

    와이즈 비즈를 더 자세히 읽은 후   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)

  • 이전 flutter - GestureDetector (또는 InkWell) 입력 영역을 경로로 어떻게 클리핑합니까?
  • 다음 android - adjustPan과 함께 ScrollView Activity를 사용할 때 빈 공간