scat2.sas7bdat
test_f_scat2.doc
보통 임상시험에서는 자주 등장하는 Hy's Law 그래프에 대한 설명을 하겠습니다.
Hy's Law는 Lab data 중에서 AST (Aspartate aminotransferase), ALT (Alanine aminotransferase), TBL (total bilirubin)들의 연관성을 말하는데 자세한것은 구굴로 찾아보시고 보통 ALT나 AST의 UNL (Upper Normal Limit, 그러니까 정상적 값중에 제일 큰값)의 3배이상이고 TBL UNL의 2배이상되는 Lab 데이타를 가지고 있는 환자를 지칭하는것입니다. 물론 숫자로 보고 결정할수도 있지만 그래프를 만들면 전체 환자들의 Hy's Law 상태를 알기가 쉽습니다.
그래서 우선 3가지 변수가 (alt, ast, tbl) 필요한데 normal인 환자들은 아이디 찾는것이 무의미하니 정상이 아닌환자들만 ASTID와 ALTID를 만들었습니다.
if alt > 3 or tbl > 2 then altid = subjid;
if ast > 3 or tbl > 2 then astid = subjid;
그리고 가장 간단한 scatter plot을 만든것이 첫번째 그래프 입니다. 제일 큰 차이라고 보면 x와 y axis가 log base입니다. 비정상적일때 꽤나 높은 value가 되기 때문에 보통 log base를 쓰는것 같더군요. 그리고 reference line을 x 와 y axis에 써서 4개의 area를 만들었다는 거죠.
proc sgplot data=scat2 nocycleattrs noautolegend;
scatter x=alt y=tbl / group=trtp
datalabel=altid datalabelattrs=(size=8)
markerattrs=(size=6);
xaxis label='Peak ALT, xULRR' type=log logbase=10 minor max=100 min=0.1 labelattrs=(size=12);
yaxis label='Peak TBL, xULRR' type=log logbase=10 minor max=100 labelattrs=(size=12);
refline 2 / axis = y transparency=0.6;
refline 3
/ axis = x transparency=0.6;
run;
이제까지 제가 소개했던것과 별로 다른점은 없습니다. 하지만 첫번째 그래프는 each quadrant가 어떤 의미인지도 모르겠고 특히 환자들이 4개의 group으로 나누어져 있을때 알아보기가 아주 힘들겠죠.
그래서 option을 몇개를 더 써서 좀더 보기 쉬운것으로 만든것이 두번째입니다.
proc sgplot data=scat2 nocycleattrs
/*noborder*/ noautolegend;
styleattrs
datasymbols=(circlefilled)
datacontrastcolors=(green blue
purple orange blue) ;
scatter x=alt y=tbl / group=trtp datalabel=altid
datalabelattrs=(size=8)
markerattrs=(size=6);
xaxis label='Peak ALT, xULRR' type=log logbase=10 minor max=100 min=0.1
labelattrs=(size=12);
yaxis label='Peak TBL, xULRR' type=log logbase=10 minor max=100
labelattrs=(size=12);
refline 2 / axis = y
transparency=0.6;
refline 3 / axis = x
transparency=0.6;
dropline x=1 y=1
/ dropto=both transparency=0.6;
inset "Hy's
Law range" / noborder
position=topright;
inset "Cholestasis range" /
noborder position=topleft;
inset "Normal range" / noborder position=bottomleft;
inset "Temple's Corollary range" /
noborder position=bottomright;
keylegend/location=outside
position=bottom valueattrs=(size=10) title='';
run;
첫번째것보다 훨씬 좀더 professional graph가 됐죠? 여기서 재밌는것이 dropline입니다. refline처럼 전체를 x나 y axis에 선을 긋는것이 아니라 어떤 (x,y) point에서 좌측으로 아래로 선을 긋는것인데 Hy's law graph에는 아주 적합한것이죠. (1,1)에서 선을 그어주면 진짜 normal plane안에 있는 환자들을 볼수있죠. 또 inset이라는 statement로 각 사분면의 이름을 쓸수있고 group=trtp 라는 option을 이용해서 4가지 group을 나타낼수있습니다.
그다음 AST plot에서는 제가 inset line에 option을 써서 색깔도 바꾸고 사이즈도 크게 해봤습니다. 그리고 4가지 다른 marker들도 사용해봤고요.
proc sgplot data=scat2 nocycleattrs
/*noborder*/ noautolegend;
styleattrs datasymbols=(squarefilled circlefilled starfilled diamondfilled)
datacontrastcolors=(green blue
purple orange blue darkgray lightgreen lightred lightblue black) ;
scatter x=ast y=tbl / group=trtp
datalabel=astid datalabelattrs=(size=8)
markerattrs=(size=6);
xaxis label='Peak AST, xULRR' type=log logbase=10 minor max=100 min=0.1
labelattrs=(size=12);
yaxis label='Peak TBL, xULRR' type=log logbase=10 minor max=100
labelattrs=(size=12);
refline 2 / axis = y
transparency=0.6;
refline 3 / axis = x
transparency=0.6;
dropline x=1 y=1 / dropto=both transparency=0.6;
inset "Hy's Law range"
/ noborder position=topright textattrs=(color=lightred size=12 style=italic weight=bold);
inset "Cholestasis range" / noborder position=topleft textattrs=(color=lightblue size=12 style=italic weight=bold);
inset "Normal range"
/ noborder position=bottomleft textattrs=(color=lightgreen size=12 style=italic
weight=bold);
inset "Temple's Corollary range" / noborder
position=bottomright textattrs=(color=lightblue
size=12 style=italic weight=bold);
keylegend/location=outside position=bottom
valueattrs=(size=10) title='' autoitemsize;
run;
여기서 재미있는 option이 autoitemsize입니다. scatter statement에서 marker size가 6으로 했어도 legend에서 글짜크기와 알아서 같은 크기로 하라는 option입니다. 두번째 그래프와 비교하면 무슨말인지 알수있습니다. 사실 이 option이 default였어야 할것 같은데 아니더군요.
어쨋던 여기 올린 예들은 임상시험에서 많이쓰이냐 아니냐보다는 이 예를 이용해서 scatter plot을 설명할려고 한것이니, 직접 이것저것 바뀌가면서 코드를 돌려보면 이해하기가 빠를것라고 생각합니다. scatter plot이 아주 단순한것 말고도 여러가지로 쓰일수가 있다는것을 보여드린겁니다.