sas回歸分析


數據預處理->數據探索->模型選擇->殘差檢驗、共線性爭端,強影響點判斷->模型修正(否->模型選擇,是->模型預測)

一:數據預處理

 

二:數據探索

看y是否服從正態分布(PP圖)

proc univariate data=reg.b_fitness;
    var Runtime -- Performance;
    histogram Runtime -- Performance / normal;  /*主要從統計指標上面看*/
    probplot Runtime -- Performance /normal (mu=est sigma=est color=red w=2);/*主要從圖形來看*/
run;

看x的離散程度(散點圖)

看y與x的相關系數(散點圖,R^2)

proc gplot data=reg.b_fitness;
    plot Oxygen_Consumption *(Run_Pulse 
   Rest_Pulse 
   Maximum_Pulse 
   Performance 
   Runtime 
   Age 
   Weight 
);
symbol v=dot color=red;
run;
quit;

proc corr data=reg.b_fitness;
    var Run_Pulse Rest_Pulse Maximum_Pulse Performance Runtime Age Weight;
    with Oxygen_Consumption;
run;

 

三:模型選擇

CP法(全模型法)

功能:在特定的模型大小范圍內,找出指定的最佳模型(具有最小CP)

BEST=N 表示在不同的變量個數組成的模型中,選擇N個最好的模型,所有組合數為[2^(變量個數)-1]

在由1個自變量組成的模型中選N個最好的

在由2個自變量組成的模型中選N個最好的

。。。。。。。。。。。

在由M(總共變量的個數)個自變量組成的模型中選N個最好的

總共會選M*N個模型

這里統計量為Cp,建議是Cp<=p  ,p是所有變量個數加1

 

逐步法

向前回歸法

特點:和變量進入的順序有很大關系,如果第一個進來的變量的解釋效應過大,很可能造成后進的變量進不來模型

引入第一個變量進入方程,對整個方程進行F檢驗,並對單個回歸系數進行T檢驗,計算殘差平方和Se1,如果通過檢驗則保留,否則剔除

引入第二個變量進入方程,對整個方程進行F檢驗,並對單個回歸系數進行T檢驗,計算殘差平方和Se2,那么Se1>Se2,稱Se1-Se2為第二個變量的偏回歸平方和,如果該值明顯偏大,則保留,說明其對因變量有影響,否則剔除。

。。。。

直到引入所有變量

向后回歸法

特點:和向前一樣,和變量的離開順序有關

和向前回歸相反,首先引入所有變量,然后再一個一個的根據(偏回歸平方和)刪除不顯著的變量

逐步回歸法

綜合向前和向后的特性

引入變量時需要利用(偏回歸平方和)進行顯著性檢驗

當方程加入變量后,又要對原有的老變量利用(偏回歸平方和)進行檢驗,一旦某變量不顯著則要進行刪除。

直到所有老變量不能被刪除,新變量不能被加入為止

 

proc reg data=reg.b_fitness;
    title 'full model';
    reg_full: model Oxygen_Consumption = Performance  Runtime Age Weight Run_Pulse Rest_Pulse  Maximum_Pulse
                    /selection=rsquare adjrsq cp best=4;
    /*選擇adjrsq高的模型 且cp<=p的模型,根據需求多選幾組*/
    title 'step model';
    forward:   model Oxygen_Consumption = Performance  Runtime Age Weight Run_Pulse Rest_Pulse  Maximum_Pulse
                    /selection=forward;
    backward:  model Oxygen_Consumption = Performance  Runtime Age Weight Run_Pulse Rest_Pulse  Maximum_Pulse
                    /selection=backward;
    stepwise:  model Oxygen_Consumption = Performance  Runtime Age Weight Run_Pulse Rest_Pulse  Maximum_Pulse
                    /selection=stepwise;
run;

 

四:模型診斷

1:殘差檢驗

方法:主要就是看圖,如果基本上是帶狀,說明就是正態分布了,其他奇怪的形狀就要再做考慮了

學生化殘差(Student residual):殘差除以標准誤

1.1:如果是小樣本,該值在-2~+2之間。

1.2:如果是大樣本,該值在-3~+3之間。

2:強影響點判斷

可以根據如下四個統計量

2.1:學生化殘差(Student residual也叫標准化殘差近似服從~N(0,1)),當殘差過大,表明樣本點到擬合之前的鉛直距離比較大,即為異常點(大小標准同上),這是針對於響應變量

2.2:pii針對自變量,pii過大,表明xi與x的矩陣距離過遠,一般設定閾值0.2進行篩選

2.3:Cook's D:衡量第i個觀測被刪除后,對回歸估計系數的影響度

2.4:RStudent residual:不含該觀測所擬合模型給出的學生化殘差

2.5:DFFITS:衡量第i個觀測被刪除后,對應預測值的標准化影響度

3:共線性診斷

方差膨脹因子:VIF

VIF>3表明有共線性,共線性變量時成對出現,若有,要根據需求選擇去除一個。

/*殘差分析*/
    proc reg data=reg.b_fitness;
    model Oxygen_Consumption = Runtime  Age Run_Pulse Maximum_Pulse;
    plot r.*(p. Runtime Age Run_Pulse Maximum_Pulse);/*假定中殘差與預測變量和響應變量(擬合值)都是獨立的*/
    plot student. *obs.;/*如果觀測的順序很重要,這個是很必要的,例如按時間或空間順序得到的觀測*/
    plot nqq.*student.;
    symbol v=dot color=red;
run;
quit;

/*強影響點判斷*/
proc reg data=reg.b_fitness;
   PREDICT: model oxygen_consumption
                      = runtime age run_pulse maximum_pulse
                      / r influence;
   id name;
   output out=ck4outliers 
          rstudent=rstud dffits=dfits cookd=cooksd;
   title;
run;
quit;

/*  set the values of these macro variables, */
/*  based on your data and model.            */
%let numparms = 5;  /* # of predictor variables + 1 */ 
%let numobs = 31;   /* # of observations */
%let idvars = name; /* relevant identification variable(s) */
/*EM模塊中的程序*/
data influential;
  set ck4outliers; 
    
   cutdifts = 2*(sqrt(&numparms/&numobs));
   cutcookd = 4/&numobs;

   rstud_i = (abs(rstud)>3);
   dfits_i = (abs(dfits)>cutdifts);
   cookd_i = (cooksd>cutcookd);
   sum_i = rstud_i + dfits_i + cookd_i;
   if sum_i > 0;
run;

/****3.共線性診斷***/

proc reg data=reg.b_fitness;
   FULLMODL: model oxygen_consumption
                         =  runtime age 
                           run_pulse  maximum_pulse 
                         / vif collin collinoint; /*vif成對出現,vif>2即認為有共線性*/
   title 'Collinearity -- Full Model';
run;
quit;

 

 

 

 

五:模型修正

如果有強影響點或共線性,則去除,然后再進行模型選擇->三種診斷,再一步步修正,直到所有不好的東西都不出現

 

六:進行預測

data need_prediction;
    input Performance @@;
datalines;
0 6 6 9 12
;
run;

data pre_now;
    set reg.b_fitness need_prediction;
run;

proc reg data=pre_now;
    model Oxygen_Consumption = Performance / p;   /*表示輸出自變量對應的預測值*/
    id performance;
    output out=me p=ic r=ocr; /*out=數據集   p=因變量的預測值   r=殘差*/
run;
quit;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM