부제 : SAS PROC PLM 기능
*본 포스팅은 로지스틱 회귀분석에 대한 선수 지식이 요구됩니다.
1. Introduction
지난 시간 동안 여러 회귀 모형을 실습해보았습니다. 회귀 모형을 구현하면서, 모델을 수정하고 파라미터를 조절하고 코드를 수정하는 과정을 여러 번 거칩니다. 사실 분석가 입장에서 최적의 모델을 구현하기 위해 실행-수정-실행-수정-실행 등의 프로세스는 불가피하고, 또 불편합니다. PLM은 이런 과정을 효율적으로 개선해줍니다. 즉, 사후모델링에 아주 유용합니다. 그렇기 훗날을 위해 여러 번 호출이 필요한 모델에 적용합니다.
2. Assessment
PROC PLM에는 크게 4가지의 기능이 있습니다.
1. SCORE 문을 사용하여 새로운 데이터에 대한 Scoring
2. EFFECTPLOT 문을 사용한 시각화 기능
3. ESTIMATE, LSMEANS, SLICE 와 TEST 문을 사용한 Parameter 추정 및 가설 검정
4. SHOW 문을 사용한 고급 통계 추정량 산출
PROC PLM을 사용하기 위해선 사용할 분석 Procedure에서 먼저 STORE 문을 사용해야 합니다. STORE문을 지원하는 프록시져는 [GEE, GENMOD, GLIMMIX, GLM, GLMSELECT, LIFEREG, LOGISTIC, MIXED, ORTHOREG, PHREG, PROBIT, SURVEYLOGISTC, SURVEYPHREG ]가 있습니다. 굉장히 많죠?
3. USAGE
자, 이제 PROC PLM을 사용해보겠습니다. STORE, EFFECTPLOT, SHOW 문을 실습해보겠습니다.
3.1 STORE 문
<code1>
Data Neuralgia;
input Treatment $ Sex $ Age Duration Pain $ @@;
datalines;
P F 68 1 No B M 74 16 No P F 67 30 No P M 66 26 Yes B F 67 28 No B F 77 16 No A F 71 12 No B F 72 50 No B F 76 9 Yes A M 71 17 Yes A F 63 27 No A F 69 18 Yes B F 66 12 No A M 62 42 No P F 64 1 Yes A F 64 17 No P M 74 4 No A F 72 25 No P M 70 1 Yes B M 66 19 No B M 59 29 No A F 64 30 No A M 70 28 No A M 69 1 No B F 78 1 No P M 83 1 Yes B F 69 42 No B M 75 30 Yes P M 77 29 Yes P F 79 20 Yes A M 70 12 No A F 69 12 No B F 65 14 No B M 70 1 No B M 67 23 No A M 76 25 Yes P M 78 12 Yes B M 77 1 Yes B F 69 24 No P M 66 4 Yes P F 65 29 No P M 60 26 Yes A M 78 15 Yes B M 75 21 Yes A F 67 11 No P F 72 27 No P F 70 13 Yes A M 75 6 Yes B F 65 7 No P F 68 27 Yes P M 68 11 Yes P M 67 17 Yes B M 70 22 No A M 65 15 No P F 67 1 Yes A M 67 10 No P F 72 11 Yes A F 74 1 No B M 80 21 Yes A F 69 3 No
;
run;
오늘은 환자의 신경통 데이터로 실습을 진행하겠습니다. Treatment는 치료 방법 (Drug A, Drug B, Placebo), 성별, 나이, 고통이 지속된 기간, 현재 고통 여부입니다. 위의 데이터로 간단하게 Logistic 회귀를 구현해 봅시다.
<code 2>
title 'Logistic Model on Neuralgia';
proc logistic data=Neuralgia;
class Sex Treatment;
model Pain(Event='Yes')= Sex Age Duration Treatment;
/*독립 변수를 전부 넣겠습니다 */
store PainModel / label='Neuralgia Study';
/*이렇게 기존 분석과 다르게 store문을 추가해주시면 됩니다. */
run;
PROC Logistic만 사용하여도 이렇게 다양한 통계량들을 확인할 수 있습니다. 최대우도비는 얼마인지, 변수가 유의한 설명력을 가지는지, 변수의 Odds Ratio는 어떻게 되는지 등.. 여기에선 자세히 다루지 않겠습니다.
여러분이 위의 두 가지 코드를 통해, 로지스틱 프로그램을 개발했다고 가정합니다. 그런데 몇 일 뒤 새로운 환자 데이터가 추가되었습니다. 당신은 개발한 모델로 환자가 아플지 정상일지 알아내고 싶습니다. 이때 PROC PLM을 사용합니다.
<code3>
proc plm restore=PainModel; /*restore로 모델을 호출합니다 */
score data=NewPatients
out=NewScore predicted
LCLM UCLM / ilink; /* 통계량 계산을 위한 ILINK 옵션 */
run;
ILINK 옵션에 대한 정의는 “computes and displays estimates and standard errors of LS-means (not differences) on the inverse linked scale”라고 나옵니다. 최소제곱평균의 표준오차와 추정값을 보여주는 기본적인 옵션입니다.
PLM의 기능 중 하나입니다. 어떤 모델이 호출됐는지, 연결함수는 어떤 것을 사용했고 모델 분포는 무엇인지 생성시간은 언제인지..등 데이터를 출력하지 않아도 여러 정보들이 나옵니다.
proc print data=NewScore;
run;
PLM에 의해 생성된 데이터 셋인 NewScore를 볼까요? 새로운 데이터에 대한 분석이 나와있습니다.
LCLM과 UCLM 옵션을 추가해서 그런지 신뢰하한과 신뢰상한도 출력되었습니다. Ilick 옵션을 넣은 덕분에 Logistic 값에 대한 확률이 나왔습니다.
1번 환자의 경우는 1%의 확률로 고통을 경험할 것이고, 3번 환자의 경우는 63.8% 확률로 고통을 느낀다는 결과가 나왔습니다. 이 경우 3번 환자는 약을 변경 해야겠네요.
3.2 EFFECTPLOT 문
EFFECTPLOT은 LOGISTIC과 GENMOD Procedure에서만 가능합니다. 우리는 EFFECTPLOT 문을 사용하여 치료제에 대한 남성과 여성의 고통경험 확률을 시각화 해보겠습니다.
/* 2. Effect plot 생성 */
proc plm restore=PainModel;
effectplot
slicefit(x=Age sliceby=Treatment plotby=Sex);
/* slicefit은 F test를 진행합니다*/
run;
출력된 그래프로 해석해보니, 나이가 많아질수록 고통 확률이 높아지네요. Placebo가 고통을 더 어린 나이에 느끼며, A보단 B의 약효과가 더 좋아보입니다. 동일한 나이에서 고통을 느낄 확률이 적으니까요.
3.3 Estimate, SHOW 문
/* 3. Exp와 estimate를 사용해 두 요인의 차이를 분석합니다. */
proc plm restore=PainModel;
/* 'Exponentiated' 컬럼은 치료법 간의 오즈비를 나타냅니다 */
estimate 'Pairwise A vs B' Treatment 1 -1 / exp CL;
run;
/* 4. 기본 통계량과 공분산행렬 생성*/
proc plm restore=PainModel;
show Parameters COVB Program;
run;
SHOW 옵션에 의해 기본 프로그램의 모듈이 호출되었네요. 호출된 분석 프로그램을 볼 수 있어 편한 기능인 것 같습니다. COVB를 통해서 공분산행렬을 불러올 수도 있습니다.
4. Summary
이처럼 PROC PLM은 다양한 회귀 분석을 저장하고 원할 때 호출하여 사용할 수 있다는 점에서 사후 모델링에 아주 유용하게 사용될 수 있습니다. 가설을 검정하고, 시각화하고, 사후 적합을 실행하는 등 다양한 분석을 효율적으로 진행하시기 바라면 이번 포스팅 마치겠습니다.
Ps.
원하시는 기법이나 통계 지식을 댓글로 달아 주시면 참고하겠습니다.
'SAS' 카테고리의 다른 글
[SAS 프로그래밍 실습] Quantile Regression (0) | 2022.01.16 |
---|---|
[SAS 프로그래밍 실습] Quantile Regression (0) | 2022.01.16 |
[SAS 프로그래밍 실습] 로직스틱 회귀 분석 [2편](Logistic Regression) (0) | 2022.01.04 |
[SAS 프로그래밍 실습] 로직스틱 회귀 분석[1편] (Logistic Regression) (0) | 2022.01.03 |
[SAS 프로그래밍 실습] Funnel Plot 을 이용한 그룹비교 (0) | 2021.12.07 |
댓글