준실험법(quasi-experiment)은 실험 연구의 한 유형으로, 완전한 무작위 배정(random assignment)이 이루어지지 않은 경우에 사용되는 방법입니다. 준실험법은 통제된 실험(controlled experiments)과 자연 관찰(naturalistic observations)의 중간 형태로 볼 수 있습니다. 이 방법은 특히 연구자가 실험적 조건을 완전히 통제할 수 없거나, 윤리적, 실제적 제약으로 인해 무작위 배정을 실시할 수 없는 상황에서 유용합니다. 준실험법은 교육, 사회학, 심리학 등 다양한 분야에서 널리 사용되며, 특히 정책 개발, 프로그램 평가, 혁신적인 교육 기법의 효과성 평가 등에 유용하게 활용됩니다. 이러한 연구 방법은 현장에서 직접적으로 관찰하고 개입할 수 있는 가능성을 제공하므로, 이론과 실제의 괴리를 좁히는 데 크게 기여할 수 있습니다.
준실험 설계의 주요 특징은 다음과 같습니다:
무작위 배정의 부재: 연구 참가자를 실험과 대조 그룹에 무작위로 배정하지 않습니다. 대신, 연구자는 기존의 그룹을 사용하거나 다른 기준에 따라 참가자를 그룹화합니다.
조작적 변수(Manipulative Variable): 연구자는 일부 변수를 조작하여 그 효과를 관찰할 수 있습니다. 이는 통제된 실험과 유사하지만, 모든 외부 변수를 통제할 수는 없습니다.
사전 측정 및 사후 측정(Pretest and Posttest): 연구자는 실험 시작 전과 후에 참가자들의 반응이나 행동을 측정할 수 있습니다. 이를 통해 변수 조작의 효과를 평가할 수 있습니다.
비교 그룹: 때로는 실험 그룹과 비교할 수 있는 대조 그룹이 설정되기도 합니다. 하지만 이 대조 그룹은 무작위로 구성된 것이 아니라 선택된 그룹일 수 있습니다.
다음 모델을 생각해봅시다.
수학에서 각각의 일이 개별적으로 발생한다면 더하기(+)로, 함께 발생한다면 곱하기(\(\times\))로 표시하기 때문에 우리는 처리를 받았다는 사실과 시간이 흘렀다는 사실은 이들이 개별적인 존재이자(더하기), 동시적 사건(곱하기)으로 표현되어 분석될 수 있습니다. 즉, 처리를 받거나 안받거나와 시간이 흐르거나 흐르지 않았다는 것은 별개일 수도 있고, 이들이 어떤 연관성이 있을 수도 있다는 것입니다.
예를 들어, 광고를 보고 물건을 구매했는가를 알아보기 위해 준실험법을 적용한다고 합시다. 이때 우리가 보고 싶은 효과는 물건을 구매한 여부(구매하지 않음=0, 구매함=1)입니다. 이를 새로운 변수 \(Y_{i}\)로 둡니다. 어떠한 이유도 없이 어떤 사람(i)는 물건을 구매하거나 구매하지 않을 수도 있습니다. 이처럼 개인이 가지고 있는 고유한 특성치는 상수(constant value)로 주어집니다. 이를 \(\beta_0\)라고 하겠습니다. 이제 모델을 수학적으로 표현하면 다음과 같습니다.
\[ Y_{i} = \beta_0 + \beta_1 T_i + \beta_2 A_i + \color{red} \beta_3 T_i \times A_i + \varepsilon_i \] 위에서 베타 1부터 3까지는 우리가 계산할 효과들을 나타냅니다. 또한 바입실론(Var Epsilon)은 미처 우리가 알지 못하는 광고 구매 이유에 관한 설명을 나타냅니다.
| :) | After = 0 | After = 1 |
|---|---|---|
| Treat=0 | \[\beta_0\] | \[\beta_{0} + \beta_{2}\] |
| Treat=1 | \[\beta_{0} + \beta_{1}\] | \[\beta_{0} + \beta_{1} + \beta_{2}+\beta_{3}\] |
광고를 본 그룹(Treat=1)의 시간 흐름은 After=1에서 After=0의 경우를 빼면 됩니다. 위 표에서는 \(\beta_0+\beta_1+\beta_2+\beta_3\)에서 \(\beta_0+\beta_1\)을 뺀 것이니까 남은 것은 \(\beta_2+\beta_3\)입니다.
이제 광고를 보지 않은 그룹(Treat=0)에서 시간 효과는 마찬가지로 \(\beta_0+\beta_2\)에서 \(\beta_0\)을 뺀 것으로 이해되니까 결과는 \(\beta_2\)가 됩니다.
이제 시간효과를 계산해 두었으니 처리 효과만을 고려할 수 있습니다. 위에서 Treat=1의 그룹과 Treat=2의 그룹을 빼면 되니까 \(\beta_2+\beta_3\)에서 \(\beta_2\)를 빼면 되겠네요. 그려면 결과는 \(\beta_3\)이 나오는데 이것이 바로 준실험의 효과를 나타내는 파라미터(\(\beta\))입니다.
준실험 연구에서 혼입 변수(confounding factor) 또는 혼란 변수 문제는 매우 중요한 이슈입니다. 혼입 변수는 연구에서 측정하고자 하는 변수와 결과 간의 관계를 왜곡시키는 미통제 변수입니다. 이러한 변수들은 실험 결과에 영향을 주어, 실제 원인 변수와 결과 사이의 관계를 정확히 이해하는 데 방해가 될 수 있습니다.
혼입 변수는 결과에 영향을 줄 수 있는 다른 변수들과 연구 대상 변수가 혼합되어 있을 때 발생합니다. 예를 들어, 어떤 건강 프로그램의 효과를 연구할 때, 참가자의 연령, 성별, 생활 습관 등 다양한 요인이 건강 상태에 동시에 영향을 줄 수 있습니다. 이러한 변수들이 적절히 통제되지 않으면, 프로그램의 효과를 오해할 위험이 있습니다.
혼입 변수를 관리하는 방법은 다음과 같습니다:
계층화(Stratification): 연구 참여자를 혼입 변수에 따라 여러 그룹으로 나누고, 각 그룹 내에서 결과를 비교합니다. 이 방법은 그룹 간 차이를 최소화하여 더 정확한 비교를 가능하게 합니다. 계층화는 연구 참가자를 혼입 변수(예: 연령, 성별, 사회경제적 지위 등)를 기준으로 여러 소그룹(계층)으로 나누는 과정입니다. 이렇게 구분된 각 계층 내에서, 연구의 처리 효과를 독립적으로 평가하고, 이들 평가 결과를 종합하여 전체 효과를 추정합니다. 그러나 여러 소그룹으로 나누어 진행하기 때문에, 데이터 수집과 분석 과정이 복잡하고 시간이 많이 소요될 수 있습니다. 또한 각 계층에서 충분한 표본 크기를 확보하는 것이 어려울 수 있으며, 특히 소규모 계층에서는 통계적 검정력이 떨어질 수 있습니다.
공변량 분석(Covariate Analysis): 통계적 방법을 사용하여 주요 연구 변수의 영향을 분석하면서 혼입 변수의 영향을 조절합니다. 예를 들어, 분산분석(ANOVA)이나 공분산분석(ANCOVA) 등이 있습니다. 공변량 분석(Covariate Analysis)은 연구 결과에 영향을 미칠 수 있는 혼입 변수들을 통계적으로 조절하는 방법 중 하나입니다. 이 방법은 주로 분산분석(ANOVA)과 함께 사용되며, 공분산분석(ANCOVA)의 형태로 나타납니다. 공변량 분석의 주요 목적은 주요 효과(예: 실험 처리의 효과)를 더 정확하게 추정하기 위해 혼입 변수의 영향을 조절하는 것입니다. 먼저 연구 설계 단계에서, 결과 변수에 영향을 미칠 가능성이 있는 모든 변수들을 식별합니다. 이 변수들은 선행 연구, 이론적 근거, 또는 예비 데이터 분석을 통해 선정될 수 있습니다. 데이터를 수집한 이후 ANCOVA 모델을 설정할 때, 결과 변수를 종속 변수로, 주요 처리 효과(실험 조건)를 독립 변수로, 그리고 혼입 변수들을 공변량으로 포함시킵니다. 다음으로 모델을 사용하여 데이터를 분석합니다. 이 때, 공변량의 효과를 조절한 후 주요 처리 효과가 통계적으로 유의한지를 검정합니다. 이 분석은 공변량 분석은 일반적으로 변수 간의 선형 관계를 가정합니다. 이 가정이 유효하지 않은 경우, 분석 결과가 왜곡될 수 있습니다. 또한 혼입 변수가 주요 독립 변수와 고도로 상관관계를 가지고 있으면, 이 두 변수의 효과를 명확히 분리하기 어려울 수 있습니다.
매칭(Matching): 실험 그룹과 대조 그룹을 구성할
때, 혼입 변수를 기준으로 유사한 특성을 가진 참가자들을 서로 짝지어
매칭시킵니다. 이렇게 하면 각 그룹 간의 차이를 최소화하고 혼입 변수의
영향을 줄일 수 있습니다. 매칭(Matching)은 연구 설계에서
사용되는 방법으로, 특히 준실험과 관찰 연구에서 혼입 변수의 영향을 줄이기
위해 활용됩니다. 매칭을 통해, 연구자는 실험 그룹과 대조 그룹의
참가자들을 비슷한 특성을 가지도록 짝지어, 두 그룹 간의 기초 조건을
동일하게 맞추려고 합니다. 이 방법은 혼입 변수의 영향을 줄임으로써 결과의
신뢰성을 높이고, 인과 관계를 더 명확히 추론할 수 있도록 돕습니다.
경향 점수 매칭(Propensity Score Matching, PSM)은 관찰
연구에서 혼입 변수의 영향을 조절하기 위한 통계적 방법 중 하나입니다. 이
방법은 참가자들이 특정 처리를 받을 경향성을 예측하는 점수, 즉 경향
점수를 계산하고, 이 점수를 기반으로 실험 그룹과 대조 그룹의 참가자들을
매칭시킵니다. 경향 점수는 참가자의 배경 변수(예: 나이, 성별, 교육 수준
등)를 사용하여 계산됩니다.
혼입 변수는 준실험 설계뿐만 아니라 다른 연구 설계에서도 주요한 문제로 작용할 수 있습니다. 이러한 변수들을 정확히 식별하고 통제하는 것은 연구의 타당성을 높이는 데 필수적입니다. 연구 설계 단계에서부터 혼입 변수를 고려하고, 적절한 통계적 방법을 선택하는 것이 중요합니다.
권혁구 교수님의 강의에 있는 예를 가져와 설명을 해보겠습니다.
아이스크림 판매와 선크림 판매량 사이에 +의 상관관계가 있다고 합시다. 그리고 아이스크림 판매가 먼저 이루어진다고 하면 우리가 보기에는 아이스크림 판매와 선크림 판매 사이에는 인과성이 있는 것처럼 보입니다. 그러나 실제로는 이 둘 모두가 단지 날이 뜨거워서 그럴 수도 있습니다. 그리고 날이 뜨겁다는 것이 사실은 아이스크림 판매와 선크림 판매를 모두 설명하는 원인이 됩니다. 이러한 이유로 날이 뜨거움이라는 사실은 혼입 변수의 역할을 합니다. 따라서 이 경우 혼입변수의 영향을 제한하려면 날이 뜨거운 경우와 그렇지 않은 경우를 모두 포함하여 분석을 해야 합니다. 만약 날이 뜨겁지 않은데도 여전히 아이스크림 판매 이후 선크림 판매가 증가한다면 인과관계를 생각해볼 수도 있습니다.
경향 점수 매칭(Propensity Score Matching, PSM)은 관찰
연구에서 혼입 변수의 영향을 조절하기 위한 통계적 방법 중 하나입니다. 이
방법은 참가자들이 특정 처리를 받을 경향성을 예측하는 점수, 즉 경향
점수를 계산하고, 이 점수를 기반으로 실험 그룹과 대조 그룹의 참가자들을
매칭시킵니다. 경향 점수는 참가자의 배경 변수(예: 나이, 성별, 교육 수준
등)를 사용하여 계산됩니다.
먼저 MatchIt 패키지가 없다면 설치합니다.
install.packages("MatchIt")
예를 위해 데이터를 불러옵니다. 우리는 MatchIt 페키지에 포함된 lalonde 데이터를 사용하기로 합니다.
library(MatchIt)
data(lalonde)
이 데이터는 미국 국가 지원 작업 시연(National Supported Work Demonstration, NSW)의 치료 그룹에서 추출한 하위 샘플과 소득 역학 인구 조사(Population Survey of Income Dynamics, PSID)의 비교 샘플로 구성되어 있습니다. 이 데이터는 Lalonde(1986)에 의해 처음으로, 그리고 Dehejia와 Wahba(1999)에 의해 재분석 되었습니다.
이 데이터 세트는 614명의 관찰 결과로 구성된 데이터 프레임입니다. 이 중 185명은 처리 그룹이고, 429명은 대조 그룹에 속합니다. 각 개인에 대해 측정된 변수는 총 9가지입니다.
여기서 “treat” 변수는 처리 변수(treatment)로 사용되고, “re78”은 결과 변수로, 나머지는 처리 전 공변량으로 사용됩니다.
이 연구 데이터는 훈련 프로그램의 비실험적 평가 재평가에 중요한 기여를 하며, 실증적 데이터를 이용한 경제학 평가를 평가하는데 중점을 두었습니다. Lalonde(1986)와 Dehejia 및 Wahba(1999)의 작업은 훈련 프로그램의 효과를 분석하는 데 중요한 역할을 했습니다.
로지스틱 회귀 모형을 이용해 PSM을 수행하기로 합니다.
ps_model <- matchit(treat ~ age + educ + race + married + nodegree + re74 + re75,
data = lalonde, method = "nearest")
결과를 확인합시다.
summary(ps_model)
Call:
matchit(formula = treat ~ age + educ + race + married + nodegree +
re74 + re75, data = lalonde, method = "nearest")
Summary of Balance for All Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean eCDF Max
distance 0.5774 0.1822 1.7941 0.9211 0.3774 0.6444
age 25.8162 28.0303 -0.3094 0.4400 0.0813 0.1577
educ 10.3459 10.2354 0.0550 0.4959 0.0347 0.1114
raceblack 0.8432 0.2028 1.7615 . 0.6404 0.6404
racehispan 0.0595 0.1422 -0.3498 . 0.0827 0.0827
racewhite 0.0973 0.6550 -1.8819 . 0.5577 0.5577
married 0.1892 0.5128 -0.8263 . 0.3236 0.3236
nodegree 0.7081 0.5967 0.2450 . 0.1114 0.1114
re74 2095.5737 5619.2365 -0.7211 0.5181 0.2248 0.4470
re75 1532.0553 2466.4844 -0.2903 0.9563 0.1342 0.2876
Summary of Balance for Matched Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean eCDF Max
distance 0.5774 0.3629 0.9739 0.7566 0.1321 0.4216
age 25.8162 25.3027 0.0718 0.4568 0.0847 0.2541
educ 10.3459 10.6054 -0.1290 0.5721 0.0239 0.0757
raceblack 0.8432 0.4703 1.0259 . 0.3730 0.3730
racehispan 0.0595 0.2162 -0.6629 . 0.1568 0.1568
racewhite 0.0973 0.3135 -0.7296 . 0.2162 0.2162
married 0.1892 0.2108 -0.0552 . 0.0216 0.0216
nodegree 0.7081 0.6378 0.1546 . 0.0703 0.0703
re74 2095.5737 2342.1076 -0.0505 1.3289 0.0469 0.2757
re75 1532.0553 1614.7451 -0.0257 1.4956 0.0452 0.2054
Std. Pair Dist.
distance 0.9740
age 1.3938
educ 1.2474
raceblack 1.0259
racehispan 1.0743
racewhite 0.8390
married 0.8281
nodegree 1.0106
re74 0.7965
re75 0.7381
Sample Sizes:
Control Treated
All 429 185
Matched 185 185
Unmatched 244 0
Discarded 0 0
매칭 이전의 데이터를
보겠습니다(Summary of Balance for All Data).
결과를 보면 매칭 전 데이터에서 몇몇 변수들은 표준 평균 차이가 높아,
처리 그룹과 대조 그룹 간에 상당한 차이가 있는 것으로 보입니다. 예를
들어, raceblack 변수의 경우, 표준 평균 차이가 1.7615로, 두
그룹 간에 큰 차이가 있음을 나타냅니다. 반면에 educ 변수의
경우 표준 평균 차이가 0.0550으로, 두 그룹 간에 큰 차이가 없는 것으로
보입니다. 또한 distance라는 변수의 표준 평균 차이가
1.7941로 상당히 높으며, 이는 두 그룹 간에 경향 점수 분포의 차이가 크다는
것을 의미합니다. Var. Ratio의 값이 모든 변수에서 1에 가깝지
않다는 점은 분산이 그룹 간에 유사하지 않다는 것을 나타냅니다.
이러한 결과는 매칭 프로세스 후에 분석을 수행하기 전에 불균형을 다루기 위한 추가적인 조치가 필요할 수 있음을 시사합니다. 예를 들어, 가중치를 적용하거나 더 정교한 매칭 알고리즘을 사용할 수 있습니다. 연구자는 이러한 불균형을 해결한 후, 처리 효과의 분석을 진행해야 합니다.
이제 매칭 이후의 결과를
봅시다(Summary of Balance for Matched Data).
결과값이 크게 개선된 것을 볼 수 있습니다. 문제가 되었던
raceblack과 distance를 살펴보십시오. 그러나
여전히 값은 높습니다. distance의 표준 평균 차이가 매칭 후 0.9739로
여전히 높습니다. raceblack의 경우, 표준 평균 차이가 1.0259로 매우 높은
편입니다. 이는 매칭이 이 변수에 대해 충분히 균형을 이루지 못했음을
의미합니다. 전반적으로, 매칭 후 두 그룹 간의 균형이 개선되었으나 일부
변수(특히 raceblack과 distance)에서 여전히 불균형이 존재합니다. 연구자는
이러한 불균형을 고려하여 결과를 해석해야 하며, 필요한 경우 추가적인
조정을 고려해야 할 수 있습니다.
매칭된 데이터를 가져오겠습니다.
matched_data <- match.data(ps_model)
원래 있던 데이터는 614개의 관측치와 9개의 변수로 구성됩니다.
dim(lalonde)
[1] 614 9
str(lalonde)
'data.frame': 614 obs. of 9 variables:
$ treat : int 1 1 1 1 1 1 1 1 1 1 ...
$ age : int 37 22 30 27 33 22 23 32 22 33 ...
$ educ : int 11 9 12 11 8 9 12 11 16 12 ...
$ race : Factor w/ 3 levels "black","hispan",..: 1 2 1 1 1 1 1 1 1 3 ...
$ married : int 1 0 0 0 0 0 0 0 0 1 ...
$ nodegree: int 1 1 0 1 1 1 0 1 0 0 ...
$ re74 : num 0 0 0 0 0 0 0 0 0 0 ...
$ re75 : num 0 0 0 0 0 0 0 0 0 0 ...
$ re78 : num 9930 3596 24909 7506 290 ...
매칭된 데이터의 경우 distance, weight
그리고 subclass가 추가되었습니다.
str(matched_data)
Classes ‘matchdata’ and 'data.frame': 370 obs. of 12 variables:
$ treat : int 1 1 1 1 1 1 1 1 1 1 ...
$ age : int 37 22 30 27 33 22 23 32 22 33 ...
$ educ : int 11 9 12 11 8 9 12 11 16 12 ...
$ race : Factor w/ 3 levels "black","hispan",..: 1 2 1 1 1 1 1 1 1 3 ...
$ married : int 1 0 0 0 0 0 0 0 0 1 ...
$ nodegree: int 1 1 0 1 1 1 0 1 0 0 ...
$ re74 : num 0 0 0 0 0 0 0 0 0 0 ...
$ re75 : num 0 0 0 0 0 0 0 0 0 0 ...
$ re78 : num 9930 3596 24909 7506 290 ...
$ distance: num 0.639 0.225 0.678 0.776 0.702 ...
$ weights : num 1 1 1 1 1 1 1 1 1 1 ...
$ subclass: Factor w/ 185 levels "1","2","3","4",..: 1 98 109 120 131 142 153 164 175 2 ...
- attr(*, "distance")= chr "distance"
- attr(*, "weights")= chr "weights"
- attr(*, "subclass")= chr "subclass"
매칭 후의 데이터를 사용하여 추가 분석을 수행할 수 있습니다. 예를 들어, 매칭된 그룹 간의 수입 차이(re78)를 t-test로 비교해봅시다.
t.test(re78 ~ treat, data=matched_data)
Welch Two Sample t-test
data: re78 by treat
t = -1.2247, df = 345.59, p-value = 0.2215
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-2330.7493 542.0143
sample estimates:
mean in group 0 mean in group 1
5454.776 6349.144
매치 이전과 비교해보겠습니다.
t.test(re78 ~ treat, data = lalonde)
Welch Two Sample t-test
data: re78 by treat
t = 0.93773, df = 326.41, p-value = 0.3491
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-697.192 1967.244
sample estimates:
mean in group 0 mean in group 1
6984.170 6349.144
결과를 보면 매치 전에는 treat=1인 그룹의 re78 점수가 더 낮았지만(6349.144 < 6984.170), 매치를 한 이후에는 treat=1인 경우 re78 점수가 더 높습니다(6349.144 > 5454.776). 그러나 PSM 결과가 만족스럽지 않기 때문에 이 결론을 믿기도 어렵고, t.test()의 결과도 p-value가 0.3491로 유의수준 0.5에서 유의미하다고 보기 어렵습니다. 매칭 결과를 개선하기 위해 replace=TRUE 옵션으로 두고 샘플링을 중복하는 경우를 허용하겠습니다.
ps_model.rep <- matchit(
treat ~ age + educ + race + married + nodegree + re74 + re75,
data = lalonde,
method = "nearest",
replace = TRUE)
summary(ps_model.rep)
Call:
matchit(formula = treat ~ age + educ + race + married + nodegree +
re74 + re75, data = lalonde, method = "nearest", replace = TRUE)
Summary of Balance for All Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.5774 0.1822 1.7941 0.9211 0.3774
age 25.8162 28.0303 -0.3094 0.4400 0.0813
educ 10.3459 10.2354 0.0550 0.4959 0.0347
raceblack 0.8432 0.2028 1.7615 . 0.6404
racehispan 0.0595 0.1422 -0.3498 . 0.0827
racewhite 0.0973 0.6550 -1.8819 . 0.5577
married 0.1892 0.5128 -0.8263 . 0.3236
nodegree 0.7081 0.5967 0.2450 . 0.1114
re74 2095.5737 5619.2365 -0.7211 0.5181 0.2248
re75 1532.0553 2466.4844 -0.2903 0.9563 0.1342
eCDF Max
distance 0.6444
age 0.1577
educ 0.1114
raceblack 0.6404
racehispan 0.0827
racewhite 0.5577
married 0.3236
nodegree 0.1114
re74 0.4470
re75 0.2876
Summary of Balance for Matched Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.5774 0.5765 0.0044 0.9922 0.0030
age 25.8162 24.1027 0.2395 0.5565 0.0766
educ 10.3459 10.3784 -0.0161 0.5773 0.0216
raceblack 0.8432 0.8378 0.0149 . 0.0054
racehispan 0.0595 0.0649 -0.0229 . 0.0054
racewhite 0.0973 0.0973 0.0000 . 0.0000
married 0.1892 0.1297 0.1518 . 0.0595
nodegree 0.7081 0.7027 0.0119 . 0.0054
re74 2095.5737 2336.4629 -0.0493 1.0363 0.0406
re75 1532.0553 1503.9290 0.0087 2.1294 0.0680
eCDF Max Std. Pair Dist.
distance 0.0486 0.0134
age 0.3405 1.2624
educ 0.0595 1.0861
raceblack 0.0054 0.0446
racehispan 0.0054 0.2971
racewhite 0.0000 0.0541
married 0.0595 0.5106
nodegree 0.0054 0.8679
re74 0.2162 0.6088
re75 0.2378 0.6500
Sample Sizes:
Control Treated
All 429. 185
Matched (ESS) 46.31 185
Matched 82. 185
Unmatched 347. 0
Discarded 0. 0
matched_data.rep <- match.data(ps_model.rep)
t.test(re78 ~ treat, data = matched_data.rep)
Welch Two Sample t-test
data: re78 by treat
t = -1.8731, df = 207.86, p-value = 0.06246
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3304.75252 84.53203
sample estimates:
mean in group 0 mean in group 1
4739.033 6349.144
결과를 보면 이제 treat=1인 경우에 re78이 더 높아졌고 평균의 차이도 더 뚜렷합니다. 또한 p-value가 0.06으로 이전에 비해 크게 개선되었습니다.
cancer <- read.csv('https://raw.githubusercontent.com/drtagkim/homepage/main/methodology/psm_example.csv')
음주가 간암에 미치는 영향을 살펴보기 위한 데이터입니다. 출처는 국민건강영양조사입니다. 이 데이터는 https://m.blog.naver.com/paperfactor_ceo/222098513280 에서 가져왔습니다. 데이터에서 요인으로 처리할 부분들을 미리 as.factor()로 처리합니다.
library(dplyr)
cancer <- cancer %>%
select(-ID,-year,-LC)
str(cancer)
'data.frame': 5978 obs. of 7 variables:
$ sex : Factor w/ 2 levels "1","2": 1 1 2 2 2 2 1 2 1 2 ...
$ age : int 80 78 75 43 80 71 44 42 36 30 ...
$ drk_st : Factor w/ 2 levels "0","1": 2 2 1 2 1 2 2 2 2 2 ...
$ drk_freq: int 2 5 1 4 1 1 4 2 2 3 ...
$ HBV : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ HCV : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 1 1 1 ...
$ exercise: int 0 0 0 3 0 0 0 0 0 3 ...
변수는 다음과 같습니다.
t.test(HBV ~ drk_st, data = cancer)
Welch Two Sample t-test
data: HBV by drk_st
t = 0.67866, df = 715.68, p-value = 0.4976
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.006179943 0.012709552
sample estimates:
mean in group 0 mean in group 1
0.013136289 0.009871484
ps_model.cancer <- matchit(
drk_st ~ sex + age + exercise,
data = cancer,
method = 'nearest',
replace = TRUE)
summary(ps_model.cancer)
Call:
matchit(formula = drk_st ~ sex + age + exercise, data = cancer,
method = "nearest", replace = TRUE)
Summary of Balance for All Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio
distance 0.9127 0.7698 1.4898 0.4932
sex 1.5319 1.8440 -0.6253 1.8883
age 50.0305 64.5862 -0.8829 1.2721
exercise 0.3110 0.0805 0.2142 3.7666
eCDF Mean eCDF Max
distance 0.2237 0.4964
sex 0.1560 0.3121
age 0.2348 0.3839
exercise 0.0288 0.0706
Summary of Balance for Matched Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio
distance 0.9127 0.9127 -0.0000 0.9918
sex 1.5319 1.5295 0.0049 0.9914
age 50.0305 49.6994 0.0201 0.9704
exercise 0.3110 0.1388 0.1600 3.0404
eCDF Mean eCDF Max Std. Pair Dist.
distance 0.0030 0.0190 0.0020
sex 0.0012 0.0024 0.2803
age 0.0112 0.0367 0.2590
exercise 0.0215 0.0490 0.3151
Sample Sizes:
Control Treated
All 609. 5369
Matched (ESS) 122.43 5369
Matched 437. 5369
Unmatched 172. 0
Discarded 0. 0
matched_data.cancer <- match.data(ps_model.cancer)
t.test(HBV ~ drk_st, data = matched_data.cancer)
Welch Two Sample t-test
data: HBV by drk_st
t = 0.67291, df = 488.48, p-value = 0.5013
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.007407932 0.015124917
sample estimates:
mean in group 0 mean in group 1
0.013729977 0.009871484
결과는 매우 신중하게 보아야 합니다. 왜냐하면 HBV 환자가 데이터에서 아주 적기 때문입니다. 아래의 테이블 분석을 살펴봅시다.
table(cancer$HBV)
0 1
5917 61
관점을 바꾸어서
ps_model.cancer1 <- matchit(
HBV ~ sex+age,
data=cancer,
method='nearest',
replace=TRUE
)
summary(ps_model.cancer1)
Call:
matchit(formula = HBV ~ sex + age, data = cancer, method = "nearest",
replace = TRUE)
Summary of Balance for All Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio
distance 0.0138 0.0102 0.5547 1.0211
sex 1.3607 1.5658 -0.4238 0.9541
age 58.7705 51.4386 0.5858 0.5477
eCDF Mean eCDF Max
distance 0.1685 0.3037
sex 0.1026 0.2052
age 0.1254 0.2675
Summary of Balance for Matched Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio
distance 0.0138 0.0138 0 0.9995
sex 1.3607 1.3607 0 0.9995
age 58.7705 58.7705 0 0.9995
eCDF Mean eCDF Max Std. Pair Dist.
distance 0 0 0
sex 0 0 0
age 0 0 0
Sample Sizes:
Control Treated
All 5917. 61
Matched (ESS) 59.06 61
Matched 60. 61
Unmatched 5857. 0
Discarded 0. 0
matched_data.cancer1 <- match.data(ps_model.cancer1)
t.test(drk_st ~ HBV,data=matched_data.cancer1)
Welch Two Sample t-test
data: drk_st by HBV
t = 0.23983, df = 118.87, p-value = 0.8109
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.1050804 0.1340422
sample estimates:
mean in group 0 mean in group 1
0.8833333 0.8688525
결과는 여전함 ㅋㅋㅋ 가급적 흡연은 자제를!