SAS学习 day8
-
模型诊断
- 残差检验 y与y估计值的差异 要服从正态分布
学生化残差:标准差除以残差
1、如果是相对小的样本 该值应该在-2到+2之间
2、如果说相对大的样本 该值应该在-3到+3之间
- 强影响点判断
没有建立模型的意义
四个统计量判断
- STUDENT residual :学生化残差 即残差除以标准差
- Cook‘s D:衡量第i个观测被删除后,回归系数估计的影响度
- RSTUDENT residual:不含该观测所拟合模型给出的学生化残差
- DFFITS:衡量第i个观测被删除后 对应预测值的标准化影响度
- 共线性诊断
方差膨胀因子:
Ri是第i个变量与其他变量之间的负相关系数的平方值
残差检验
proc reg data = reg.b_fitness; PREDICT: model oxygen_consumption = runtime age run_pulse maximum_pulse; plot r.*(p. runtime age run_pulse maximum_pulse); r.表示残差 与预测值之间的关系 是否带状 plot student.*obs. / vref = 3 2 -2 -3 学生化残差与观测值之间的关系 带状 haxis = 0 to 32 by 1; plot nqq.*student.; 学生化残差的正态pp图 symbol v=dot; run;
学生化残差在-2到2之间
不是这种情况 要从数据处理开始 取log等等
强影响点判断
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; 三个变量的关键字 run;
强影响点阀值判断
%let numparms = 5; 预测的变量个数加1
%let numobs = 31; 观测的个数
%let idvars = name;
data influential;
set ck4outliers;
cutdifts = 2*(sqrt(&numparms/&numobs));
cutcookd = 4/&numobs;
rstud_i = (abs(rstud)>3); rstud 绝对值大于3
dfits_i = (abs(dfits)>cutdifts);
cookd_i = (cooksd>cutcookd);
sum_i = rstud_i + dfits_i + cookd_i; 满足三个任意一个就可以
if sum_i >0;
run;
结果得到的强影响点 需要剔除
共线性诊断
proc reg data = reg.b_fitness; FULLMODL: model oxygen_consumption = performance runtime age weight run_pulse rest_pulse maximum_pulse /vif collin collinoint; vif成对出现 vif>3即认为有共线性 run;
有共线性去掉变量