[SAS]Logistic regression 羅吉斯迴歸 單變項與多變項羅吉斯迴歸

by wenwu
1 comment

[SAS]Logistic regression 羅吉斯迴歸 單變項與多變項羅吉斯迴歸

在去年十月時寫了[R]Logistic regression,文章中提到Logistic 的使用條件,Logistic regression(羅吉斯迴歸) vs Linear regression(線性迴歸)的差別,介紹什麼是勝算比,最後有R 的logistic regression 的範例

今天補上SAS版的Logistic regression範例,順便介紹單變項(univariate logistic regression)與多變項(multivariate logistic regression)的不同
如果要看羅吉斯迴歸的使用時機,記得先去看這一篇


多變項羅吉斯迴歸(multivariate logistic regression)

上次[R]Logistic regression的文章中,示範的就是多變項羅吉斯迴歸
這次我們也用相同的資料,用SAS做一次示範

example for SAS 
這次我們使用同樣的資料,也就是768位病人的糖尿病資料[資料在這裡]
每一項變數的意思如下:

1.懷孕次數
2.口服葡萄糖耐量測試中2小時的血漿葡萄糖濃度
3.舒張壓(mm Hg)
4.三頭肌皮膚褶皺厚度(毫米)
5. 2小時血清胰島素(mu U / ml)
6.體重指數(體重(千克)/(身高(米))²)
7.糖尿病譜系功能
8.年齡(年)
9.糖尿病(0或1)

第九個糖尿病為二元的類別變項,1表示病人有糖尿病,0表示沒有


程式範例

首先是讀資料,將資料複製下來,存在txt文字檔裡面之後,將第一行換成:
pregnant,glucose,blood_pressure,triceps,serum_insulin,mass,pedigree,age,diabetes,就可以用SAS來讀資料了

/*read data */
PROC IMPORT
DATAFILE="C:\20200609_SAS_logistic.txt" /*記得換成你的txt文字檔位置*/
OUT=MYDATA /*data name */
DBMS=DLM
REPLACE;
DELIMITER=","; /*資料以逗點為分隔*/
GETNAMES=YES;
RUN;

同樣我們的目標是使用 pregnant 、glucose、triceps、mass 欄位預測 diabetes,

proc logistic data=MYDATA plots=(ROC);
model diabetes(event='1')=       /*這是我們的依變項(Y)*/
pregnant glucose triceps mass / CLODDS=wald;  /*放入有興趣的變項*/
/*如果有類別變項可以使用class,記得給參考組(括號內為參考組)*/
/*class AGE_GP(param=ref ref='1');*/
run;

首先可以看到Model information,依變項(Y)(Response Variable)是diabetes,資料個數為768,diabetes=0共有500位,diabetes=1共有268位

再來可以看到(下圖)model 的表現,Model Fit Statistics中有不同的criterion,方便與不同的模型比較(ex: AIC 越小越好)

Testing Global Null Hypothesis 中,可以看到Likelihood ratio 的p-value < 0.0001,表示拒絕H0虛無假設,模型是有效的

最後可以看到下圖中最後一個表格: Analysis of Maximum Likelihood Estimates ,分別列出每個變項的估計值與p-value
intercept (截距)\ pregnant \ glucose \ triceps \ mass 的估計值分別為:
-8.1542 \ 0.1357 \ 0.0342 \ -0.00429 \ 0.0854 (可以發現跟上一篇文章 使用R的估計值是一樣的喔)

而我們可以將邏輯迴歸模式寫為下:
logit(p)=-8.1542+0.1357 pregnant +0.0342 glucose -0.00429 triceps+ 0.0854 mass

並且可以看到p-value,也是只有triceps 沒有顯著,其他三個變項都有顯著,代表這三個變項與Y有關係

而勝算比(OR)=exp(b)

而勝算比SAS已經算好給我們了,在最後一個表格中(Odds Ratio Estimates and Wald Confidence Intervals ) 分別有pregnant \ glucose \ triceps \ mass的Odds Ratio,並且有Odds Ratio的95%信賴區間

就 pregnant 而言,勝算比=exp(0.1357)=1.145
表示每增加一次懷孕次數,得到糖尿病的勝算提高1.145倍;
就 glucose而言,勝算比=exp(0.0342)=1.035 
表示每增加一血漿葡萄糖濃度,得到糖尿病的勝算提高1.035倍;
就 mass 而言,勝算比=exp(0.0854)=1.089
表示每增加一體重指數,得到糖尿病的勝算提高1.089倍;

好~ 多變項的羅吉斯迴歸就講到這裡,接下來要介紹單變項的羅吉斯迴歸


單變項羅吉斯迴歸(univariate logistic regression)

使用同樣的資料,這次我們想要看 pregnant \ glucose \ triceps \ mass 這幾個變項單獨對資料的影響

其實只要將資料單獨丟到proc logistic 就可以了,但這邊當然不會這邊簡單

下面的程式使用macro ,macro 在SAS中可以執行重複的程式,這樣就可以省一點程式,看起來也比較乾淨喔

macro 的第一句和最後一句,必須放上 %macro 和%mend; 
%macro 後的uni1 為macro 的名字,var 為變項(在程式中的var前面要加 &var 喔)

%macro uni1(var);
proc logistic data=MYDATA ;
model diabetes(event='1')=&var/CLODDS=wald;
run;
%mend;

寫好macro 之後,就可以使用了,執行macro時,記得前面要加%喔

%uni1(pregnant);
%uni1(glucose);
%uni1(triceps);
%uni1(mass);

這邊就只印出 %uni1(pregnant); 的結果,與上面一樣的就不重複印出來了

如果只有一個變項(pregnant)在模型中,intercept (截距)\ pregnant 的估計值分別為:-1.1766 \ 0.1371 ,並且pregnant是顯著的(因為p-value <0.0001)

pregnant的Odds Ratio 是1.147 ,95%CI = (1.097,1.200)
就 pregnant 而言,勝算比=exp(0.1371)=1.147
表示每增加一次懷孕次數,得到糖尿病的勝算提高1.147倍


單變項羅吉斯迴歸 vs 多變項羅吉斯迴歸

(univariate logistic regression vs multivariate logistic regression)

有發現嗎? 其實將變項單獨丟到proc logistic 就可以算單變項的羅吉斯迴歸了,[R]也是一樣的方式 (將單獨的變項都到模型裡面,就可以算了)

那位什麼需要做單變項或多變項的羅吉斯迴歸呢?

第一,單變項羅吉斯迴歸可以看到單個變項對自變項(Y)的影響,還有Odds ratio (勝算比)
第二,可以利用多變項羅吉斯迴歸看到所有變項互相影響後對自變項(Y)的影響與Odds ratio (勝算比)

最後,我們可以知道單個變項與多個變項對於自變項(Y)的影響,這當然有利我們挑選模型,可以做stepwise 等等相關的logistic regression


好了,今天的[SAS] logistic regression就講到這裡,也順帶講到了單變項羅吉斯迴歸 vs 多變項羅吉斯迴歸,如果這篇反映不錯的話,之後可以來介紹如何使用stepwise的羅吉斯迴歸

謝謝收看

Related Articles

1 comment

MEI 2023-02-02 - 18:02

謝謝作者分享!對程式初心者非常有幫助

Reply

發表迴響