首页 > 代码库 > sas回归分析
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;
sas回归分析