가장 기본적인 연령, 성별로 코호트 추출을 시작해보자. MIMIC-III의 patients 테이블에 관한 정보는 아래와 같다.
mimic=# \\d patients
Table "public.patients"
Column | Type | Collation | Nullable | Default
-------------+--------------------------------+-----------+----------+---------
row_id | integer | | not null |
subject_id | integer | | not null |
gender | character varying(5) | | not null |
dob | timestamp(0) without time zone | | not null |
dod | timestamp(0) without time zone | | |
dod_hosp | timestamp(0) without time zone | | |
dod_ssn | timestamp(0) without time zone | | |
expire_flag | integer | | not null |
dob(date of birth) 컬럼은 생년월일을 의미하고, dod(date of birth) 컬럼은 사망날짜를 의미한다. 또한, expire_flag 컬럼은 환자가 사망할 경우 1, 아닐 경우 0인 값이다.
*테이블에 대한 자세한 정보는 MIMIC 공식 웹사이트의 다음 링크를 참조하자. https://mimic.physionet.org/mimictables/patients/
테이블의 가독성을 높이기 위해 컬럼명과 값을 변경해보자. 아래의 SQL을 사용하여 dob는 birth_date, dod는 death_date, expire_flag는 is_dead로 칼럼명을 변경한다. 또한, is_dead 칼럼의 값은 expire_flag가 0일 경우 true, 1일 경우 false가 할당되도록 하자.
-- SQL 3.1
SELECT st0.subject_id
, st0.gender
, st0.dob AS birth_date
, st0.dod AS death_date
, CASE WHEN expire_flag = 0 THEN false
ELSE true
END
AS is_dead
FROM patients st0
LIMIT 10;
subject_id | gender | birth_date | death_date | is_dead
------------+--------+---------------------+---------------------+---------
249 | F | 2075-03-13 00:00:00 | | f
250 | F | 2164-12-27 00:00:00 | 2188-11-22 00:00:00 | t
251 | M | 2090-03-15 00:00:00 | | f
252 | M | 2078-03-06 00:00:00 | | f
253 | F | 2089-11-26 00:00:00 | | f
255 | M | 2109-08-05 00:00:00 | | f
256 | M | 2086-07-31 00:00:00 | | f
257 | F | 2031-04-03 00:00:00 | 2121-07-08 00:00:00 | t
258 | F | 2124-09-19 00:00:00 | | f
260 | F | 2105-03-23 00:00:00 | | f
환자의 연령을 첫 입원 시점을 기준으로 환산하자. 환산하는 이유는 입원 당시의 나이를 사용하는 것이 코호트 분석에 타당하기 때문이다. (더군다나 MIMIC-III 데이터에서 날짜 값은 비식별화를 위하여 길게는 100년 가까이 미래시점으로 슬라이딩되어 있다. 이는 의료 개인 정보를 보호하기 위한 최소한의 장치이다.) 첫 입원 시점 연령으로 환산하지 않고 환자의 현재 나이를 코호트로 분석한다고 가정해보자. 20대인 환자 A는 현재 응급실에 있고, 20대인 환자 B는 이제 막 입원했을 수 있다. 의료 데이터 분석은 환자가 어떤 상태에 놓였는지, 심각한 상태로 들어설 것인지 혹은 사망할 것인지 판단하는 것이 가장 중요하기 때문에 다른 시점에 있는 환자들을 하나의 집단으로 분석하는 것은 좋지 못하다. 따라서 입원 시점에 20대인 환자들을 대상으로 코호트 분석하는 것이 올바른 접근이다.
첫 입원 시점 연령은 "첫 입원 날짜 - 환자의 생년월일"로 구할 수 있다.
SQL의 형태는 아래와 같다.
SELECT ([첫 입원 날짜] - birth_date) AS first_admit_age
환자의 첫 입원 날짜는 어떻게 구할까? MIMIC-III의 admissions 테이블(입원 테이블)을 활용해보자. 각 subject_id(환자id) 별 최초 입원 시간, 마지막 입원 시간은 MIN, MAX를 활용한 SQL로 구할 수 있다.