2024. 1. 25. 18:10ㆍStatistics/R
해당 포스팅은 R코드들을 개인적으로 정리하고자 작성하였습니다.
※ 혹시 잘못된 곳이 있거나 의견있으시면 알려주세요!
MatchIt !
Propensity Score Matching (PSM)할 때 사용하는 패키지이다.
여기서는 사용법만.
PSM은 시험군의 개체와 대조군의 개체의 성질을 매우 비슷하게 조절해주는 방법이다.
RCT 하기 어렵거나 너무 아까운 registry가 있거나
할 때 사용하는데 PSM은 논문을 submit 하면 온갖 질문을 다 받는다.
점점 의심하는 사람이 많아졌다. =)
근데 요즘 마구잡이로 쏟아져 저장되는
real world data를 다루기 위해서는 필요하고 개발해야하는 방법 중에 하나인 것 같다.
방법은
1. propensity score(ps) 를 계산한다.
2. case 대상과 유사한 ps를 갖는 control의 대상을 match 한다.
2-1. 유사한 정도는 caliper size를 지정하여 이 이내에 들어오는 것으로 match 한다고 미리 지정한다.
3. 잘 매치가 되었나 확인한다.
4. matched 된 개체들로만 matched set 을 구성한다.
5. 분석!
score 계산은 logit을 이용하는데 이 때 선택하는 변수에 대해서는 말이 많다.
다 넣어야 한다 vs 필요한 것만 넣으면 된다
뭐 원하는 대로.. 지만
나는 다 넣어야 한다 ? 쪽이다. 그냥 PI 맘임..
여튼 서로 영향을 미치지 않는 변수들로 PSM 을 한다.
1~2 step을 한 번에 해주는 함수가 MatchIt package의 matchit 함수이다.
matchit 해서 바로 matched set으로 털어버릴 수 있지만
서로 매치된 것을 확인하기위해서 ID(1~n)를 설정 해주었다.
library(MatchIt)
#df <- read~
df$ID <- 1:nrow(df)
matout <- matchit(formula = Group ~ var1 + var2 + ... + vark,
data = df, ratio = 1, method = "nearest", distance = "glm",
caliper = 0.2, replace = FALSE)
caliper 빼고는거의 default 값이다.
caliper를 0.2로 주면 0.2*SD 범위 안에서 match 하게 된다.
(caliper 는 default: none 그냥 범위 없이 가장 가까운 것으로 선택한다.)
ratio는 case:control 비율이다.
control이 많은 경우 1:4 까지 많이 사용한다.
4배수 이상이 더 나은 결과를 주는 것은 아니라고 한다.
(reference 있음 but 기억안남.. =0)
결과를 확인해보자
summary(matout)
treated 200명 control 661명을 1:1로 매치하니
각각 183명씩 매치되었다.
이제 매치가 잘 되었는지 확인해 주는 것은 필수이다.
3. covariate balance를 체크한다.
3-1. propensity score들의 분포가 유사한가? (histogram 또는 jitter 로 확인)
plot(matout, type = 'hist')
이렇게 분포가 나타난다.
match 된 control과 case(treated)의 ps 분포가 유사해 짐을 확인 할 수 있다.
plot(matout, type = 'jitter')
이것도 유사하게 점이 분포해있는 것을 확인 할 수 있다.
plot(~, type = 'jitter')는 점을 더블클릭해서 각각을 확인할 수 있다.
그래서 그림이 나타나면 코드가 실행이 안되는 것 처럼 보이는데
esc를 눌러서 빠져나오면 된다.
3-2. absolute standardized mean difference(ASD)확인
좀 더 수치적인 방법 absolute standardized mean difference 를 확인한다.
전체 데이터에서 그룹별 변수의 평균 차이와
match 된 데이터에서의 그룹별 변수의 평균 차이를 확인한다.
3-2-1. summary 에서도 ASD를 확인 할 수 있다.
summary 에서는 absolute 값은 아니다.
3-2-2. ASD 그림
plot(summary(matout), var.order = "unmatched")
까만 점이 matched set의 ASD 이다.
ASD가 얼마나 작아야 match가 잘 되었나?의
기준은 사실 사람마다.. 좀 다르다.
0.2 안에만 들어와도 된다는 사람도 있고 0.25라는 사람도 있고
어떤 논문에서는
Absolute standardizzed difference greater than 0.2 indicaates significant imbalance of a baseline covariates.
(Silber JH et al. JAMA 2013, 310(4) 389-397)
라고 말하는데
요즘 대부분은 0.1까지 들어와야 매치가 잘 되었다고 한다.
매치가 잘 안되었다면
- 변수를 조절해보거나
- caliper를 조절하거나
- method를 조절하거나 하면 된다.
4.매치 잘 되었음을 확인하면 matched set 구성하기
matched.df <- match.data(matout)
코드를 실행하면
match된 183:183 데이터셋이 저장된다.
5. 이제 분석하면 된다!!
** 여기서 테이블을 정리할 때,
특히 일반적인 characteristic 정리하는 table에서 p value가 0.05보다 작으면
어? 매치 했는데 왜 이래? 하기도 하는데.
중요한건 covariate balance지 p value 가 아니다.
p보다 balance가 중요하다고 하는 reference!
Austin, 2007; lmai et al. 2008; Stuart 2010 여기 있다고 함!
끝!
'Statistics > R' 카테고리의 다른 글
Cochran Amitage trend test (0) | 2024.01.29 |
---|---|
Pearson correlation coefficient (2) | 2024.01.29 |
ggplot2:: option (0) | 2023.09.12 |
ggplot2 :: pie chart (0) | 2023.08.19 |
R :: openxlsx package (0) | 2023.02.16 |