組軌跡模型(GBTM)的SAS實(shí)現(xiàn)與編程技巧
? 今天,通過(guò)一個(gè)實(shí)例,來(lái)展示SAS實(shí)現(xiàn)組軌跡模型。
? 首先,SAS自帶的Proc過(guò)程步?jīng)]有實(shí)現(xiàn)組軌跡模型的程序,需要從網(wǎng)站上下載“Proc Traj”過(guò)程步進(jìn)行安裝,該程序其由Bobby L. Jones團(tuán)隊(duì)創(chuàng)作(這里再次跪拜大神,網(wǎng)址奉上:http://www.contrib.andrew.cmu.edu/~bjones/download.htm)。
一、SAS Proc Traj安裝過(guò)程
查看自己的SAS版本(打開(kāi)SAS就可以看到)

2.選擇適合自己的版本,小編這里選擇64位版本的trajv9-64.zip(網(wǎng)站網(wǎng)速可能比較慢,需要的小伙伴也可以后臺(tái)私信小編)。

3.下載并解壓文件夾,其中traj.dll為SAS過(guò)程步文件,trajplot.sas,trajplotnew.sas,dropoutplot.sas和trajtest.sas為traj.dll配套使用的宏程序。

4. 找到SAS過(guò)程步dll格式文件和宏程序按照路徑。我的位置在“C:\Program Files\SAShome\SASFoundation\9.4\core\sasexe”將traj.dll文件復(fù)制進(jìn)該文件夾;將trajplot.sas,trajplotnew.sas,dropoutplot.sas和trajtest.sas宏程序復(fù)制進(jìn)“C:\Program Files\SAShome\SASFoundation\9.4\core\sasmacro”(SAS自帶宏都儲(chǔ)存在該文件夾下,自動(dòng)調(diào)用)。


5.打開(kāi)SAS嘗試輸入程序語(yǔ)句,發(fā)現(xiàn)Proc traj字樣和Model字樣都有了SAS過(guò)程步的顏色,即為按照成功。

二、組軌跡模型實(shí)戰(zhàn)
? 某研究者對(duì)學(xué)生的心理狀況進(jìn)行了評(píng)估,共進(jìn)行了7學(xué)年的隨訪。T1-T7為評(píng)估學(xué)年,O1- O7為心理評(píng)估得分,得分范圍為0~10分,得分越高心理狀況越好。
研究目的:在7個(gè)評(píng)估學(xué)年中,學(xué)生的心理發(fā)展軌跡。
SAS數(shù)據(jù)格式整理如下:

1.數(shù)據(jù)導(dǎo)入及轉(zhuǎn)化操作
?
proc import datafile="&path_raw\實(shí)例數(shù)據(jù).xlsx"
?? out=dataset dbms=xlsx replace;
?? getnames=yes;
run;
*寬形數(shù)據(jù)轉(zhuǎn)化為長(zhǎng)形數(shù)據(jù)以便繪圖;
data plot1;
?? set dataset ;
?? array vv {*} O1-O7;
?? array tt {*} t1-t7;
?? do i = 1 to dim(vv);
?? idd=id;
?? time=tt(i);
?? value=vv(i);
?? output;
?? end;
?? keep time value idd;
run;
?
2.窺探數(shù)據(jù)分布,描述數(shù)據(jù)分布情況、缺失情況、發(fā)展情況。
?
proc means data =dataset n nmiss mean stddev
?? stderr min p25 median p75 max qrange clm;
?? var O1-O7 T1-T7;
run;
proc sgplot data = plot1;
?? vbox value / group=time ;
run;
ods html dpi=300;
proc sgplot data = plot1;
?? vline time / response=value group=idd ;
run;



3. SAS的語(yǔ)法結(jié)構(gòu)
(1)組軌跡模型可適用的數(shù)據(jù)分布類(lèi)型:PROC TRAJ可以擬合刪失正態(tài)分布(CNORM)、β分布(BETA)、零膨脹Poisson分布(ZIP)和伯努利分布(LOGIT)。本研究因變量為心理評(píng)估得分,估擬合CNORM模型。
(2)PROC TRAJ基本語(yǔ)法結(jié)構(gòu):
PROC TRAJ /option調(diào)用組軌跡模型。
OUT= 輸出組分配和成員概率數(shù)據(jù)集(可根據(jù)此數(shù)據(jù)集計(jì)算平均后驗(yàn)概率)。
OUTPLOT=軌跡圖數(shù)據(jù)(根據(jù)此數(shù)據(jù)集可以進(jìn)行個(gè)性化繪圖)。
OUTSTAT=軌跡組的參數(shù)估計(jì)數(shù)據(jù)集。
OUTEST=參數(shù)和協(xié)方差矩陣估計(jì)數(shù)據(jù)集。
ITDETAIL 顯示用于監(jiān)控模型擬合進(jìn)度的最小化迭代。
ci95m 估計(jì)95%置信區(qū)間。
ID:一般指研究對(duì)象唯一個(gè)案,這里可以為OUT=數(shù)據(jù)集中,想保留的變量。
VAR:因變量。
INDEP:測(cè)量因變量(VAR)時(shí)的自變量(如年齡、時(shí)間)。
MODEL:因變量分布(BETA、CNORM、ZIP、LOGIT),例如MODEL CNORM。
MIN:CNORM分布特有,指定刪失值的最小值。
MAX:CNORM分布特有,指定刪失值的最大值。
NGROUPS:擬合軌跡組數(shù)量。
ORDER:軌跡組的形態(tài)參數(shù),每個(gè)軌跡組的多項(xiàng)式 (0=intercept, 1=linear, 2=quadratic, 3=cubic)。
?
(3)建立模型
考慮需要擬合多個(gè)組軌跡模型,為了模型擬合的方便性和便捷性,建議有基礎(chǔ)的小伙伴采用宏程序處理。
小編構(gòu)建了宏名稱(chēng)為%traj_M()的宏程序,包含data,id,avepp,EST,plot,stat,VAR,INDEP,NGROUPS,ORDER,title 11個(gè)宏參數(shù)。程序中%TRAJPLOTnew()為Proc traj 配套使用的繪圖宏程序。
%macro traj_M(data,id,avepp,EST,plot,stat,VAR,INDEP,NGROUPS,ORDER,title);
PROC TRAJ DATA=&data. OUTPLOT=&plot. OUT=&avepp. OUTSTAT=&stat.
?????????? OUTEST=&EST. ITDETAIL ci95m;
??? ID &id.;
??? VAR &VAR.;
??? INDEP &INDEP.;
??? MODEL CNORM;
??? min 0;
??? MAX 10; NGROUPS &NGROUPS.; ORDER &ORDER.;
RUN;
?
proc sort data = &avepp.; by group;run;
?
ods html dpi=300;
%TRAJPLOTnew(&plot.,&stat.,"ZBMI",'Cnorm Model','BMI','Time(month)');
quit;
%mend;
(4)構(gòu)建2~6組軌跡,軌跡形態(tài)分別為linear, quadratic, cubic的模型。也就是我們需要構(gòu)建15個(gè)組軌跡模型。小編以擬合3組軌跡模型分別是cubic的示例:
%let data =dataset;/*調(diào)用的數(shù)據(jù)集名稱(chēng)*/
%let prefix=test_;/*輸出數(shù)據(jù)集的前綴*/
%let VAR=O1-O7;/*因變量*/
%let INDEP=T1-T7;/*時(shí)點(diǎn)*/
%let id=ID;/*ID*/
%let postfix=3_333;/*輸出數(shù)據(jù)集的后綴*/
%let n_grp=3;/*3組軌跡模型*/
/*1.擬合3-333軌跡模型*/
%traj_M(data=&data.,id=&id.,avepp=&prefix.avepp_&postfix.,EST=&prefix.est_&postfix.,plot=&prefix.plot_&postfix.,stat=&prefix.stat_&postfix.,VAR=&var.,INDEP=&INDEP.,NGROUPS=&n_grp.,ORDER=3 3 3,title="&postfix.")
%traj_M直接輸出的結(jié)果和圖形,我們需要利用這些結(jié)果和圖形計(jì)算模型的評(píng)價(jià)指標(biāo),%Traj_Assess是小編寫(xiě)的計(jì)算模型擬合指標(biāo)的宏程序,可以直接計(jì)算所有擬合指標(biāo):
數(shù)據(jù)集:&prefix.avepp_&postfix.結(jié)果

數(shù)據(jù)集:&prefix.plot_&postfix.結(jié)果

數(shù)據(jù)集:&prefix.est_&postfix.結(jié)果

數(shù)據(jù)集:&prefix.stat_&postfix.結(jié)果

%TRAJPLOTnew 宏輸出圖形

/*2.輸出模型的擬合信息*/
%Traj_Assess(avepp=&prefix.avepp_&postfix.,stat=&prefix.stat_&postfix.,est=&prefix.est_&postfix.,base=M_select,label="&postfix.");
小編自寫(xiě)%Traj_Assess宏程序可以直接輸出組軌跡模型擬合指標(biāo)。

/*3.個(gè)性化繪制圖形*/
%Traj_plot(plot=&prefix.plot_&postfix.,stat=&prefix.stat_&postfix.,group=3,traj1=A,traj2=B,traj3=C);
SAS自帶的%TRAJPLOTnew繪圖確實(shí)不夠美觀,小編又自寫(xiě)了個(gè)宏程序繪圖,置信區(qū)間有點(diǎn)寬哈。

(5)結(jié)果輸出
利用小編寫(xiě)的SAS輸出word宏程序%out_word_begin結(jié)合表格定制%Tab_report宏程序,一鍵制作高質(zhì)量三線表。
?
%let rtfname=&path_raw.\%TRIM(%QSYSFUNC(date(),yymmdd10))—組軌跡模型結(jié)果.doc;? ?
ods results;
%out_word_begin(&rtfname.,orientation=portrait);
%Tab_report(data=M_select1,vars=traj_num avepp pro BIC dif_BIC entropy_K,outputwidth=,
?? title="表1 多組軌跡模型的擬合效果評(píng)價(jià)指標(biāo)",GRP=,GRPfmt=y.,dt=dataset,where=ingroup=1);
%Tab_report(data=Est_3,vars=gg param est_c STDERR_c t_c p_C,outputwidth=,title="表 組軌跡模型參數(shù)估計(jì)",GRP=,GRPfmt=y.,dt=dataset,where=ingroup=1);
%out_word_end(&rtfname.);
最終呈現(xiàn)格式:以下表格均為SAS宏程序自動(dòng)輸出(包括:斜體,寬度、特殊字符),未進(jìn)行人工干預(yù)!


……
需要數(shù)據(jù)聯(lián)系的同學(xué),私信小編!以上宏程序均小編本人撰寫(xiě),幫你快速實(shí)現(xiàn)組軌跡模型的構(gòu)建和結(jié)果的報(bào)告!
關(guān)注微信公眾號(hào),獲取更多相關(guān)內(nèi)容!

程序編寫(xiě)、文字編寫(xiě):天涯二毛君
審稿:老陳