既然GAM模型可以拟合线性成分与非线性成分,自然也就可以拟合所有广义线性的结果,也即PROC GAM理论上可以拟合所有PROC GENMOD所能构建的模型。而PROC LOGISTIC回归同时也属于广义线性模型的范畴,也即PROC GENMOD可以拟合PROC LOGISTIC回归所能构建的模型。进一步推理可得,PROC GAM理论上同样也可以构建下PROC LOGISTIC回归所能构建的模型。下面以一个简单的例子说明一下三者之间的区别与联系。
例子来源:PROC GAM 的SAS帮助文件的EXAMPLE 1,主要探索驼背(Kyphosis )的发生是否受小孩接受脊柱手术的年龄(AGE)、脊柱手术的起始脊椎(StartVert )以及手术所涉及脊椎数(NumVert )的影响。对原始程序稍加修改如下:
- data kyphosis;
- input Age StartVert NumVert Kyphosis @@;
- datalines;
- 71 5 3 0 158 14 3 0 128 5 4 1
- 2 1 5 0 1 15 4 0 1 16 2 0
- 61 17 2 0 37 16 3 0 113 16 2 0
- 59 12 6 1 82 14 5 1 148 16 3 0
- 18 2 5 0 1 12 4 0 243 8 8 0
- 168 18 3 0 1 16 3 0 78 15 6 0
- 175 13 5 0 80 16 5 0 27 9 4 0
- 22 16 2 0 105 5 6 1 96 12 3 1
- 131 3 2 0 15 2 7 1 9 13 5 0
- 12 2 14 1 8 6 3 0 100 14 3 0
- 4 16 3 0 151 16 2 0 31 16 3 0
- 125 11 2 0 130 13 5 0 112 16 3 0
- 140 11 5 0 93 16 3 0 1 9 3 0
- 52 6 5 1 20 9 6 0 91 12 5 1
- 73 1 5 1 35 13 3 0 143 3 9 0
- 61 1 4 0 97 16 3 0 139 10 3 1
- 136 15 4 0 131 13 5 0 121 3 3 1
- 177 14 2 0 68 10 5 0 9 17 2 0
- 139 6 10 1 2 17 2 0 140 15 4 0
- 72 15 5 0 2 13 3 0 120 8 5 1
- 51 9 7 0 102 13 3 0 130 1 4 1
- 114 8 7 1 81 1 4 0 118 16 3 0
- 118 16 4 0 17 10 4 0 195 17 2 0
- 159 13 4 0 18 11 4 0 15 16 5 0
- 158 15 4 0 127 12 4 0 87 16 4 0
- 206 10 4 0 11 15 3 0 178 15 4 0
- 157 13 3 1 26 13 7 0 120 13 2 0
- 42 6 7 1 36 13 4 0
- ;
- proc logistic data=kyphosis descending;
- model Kyphosis = Age StartVert NumVert;
- run;
- title 'Comparing PROC GENMOD with PROC LOGISTIC';
- proc genmod data=kyphosis descending;
- model Kyphosis = Age StartVert NumVert /link=logit dist=binomial;
- run;
- title 'Comparing PROC GAM with PROC GENMOD';
- proc gam data=kyphosis;
- model Kyphosis (event='1') = param(Age)
- param(StartVert)
- param(NumVert) / dist=binomial;
- run;
- title 'Developing a non-linear model with PROC GAM';
- proc gam data=kyphosis;
- model Kyphosis (event='1') = spline(Age ,df=3)
- spline(StartVert,df=3)
- spline(NumVert ,df=3) / dist=binomial;
- output
- OUT=output
- PREDICTED /* predicted values for each smoothing component and overall predicted values
- on the response scale at design points. The prediction for each spline or
- loess term is only for the nonlinear component of each smoother. */
- LINP /* linear prediction values on the link scale at design points */
- ;
- run;
对于输出结果,可以看到PROC GAM 可以拟合与PROC GENMOD以及PROC LOGISTIC回归一样的结果
但是对于包含非线性成分的PROC GAM模型,需要注意的是,上述输出图形的纵坐标包含有负值,难道不应该是0到1之间的概率值吗?
这个问题很早以前,论坛中已经有人提过(https://bbs.pinggu.org/thread-2146081-1-1.html),但是没有回复 ,详细研究之后,得到答案如下:
如果采用PROC GAM构建的模型是 y=spline(x)
所得到的预测结果: E(Y|X=x)=a + bx +s(x)
如果将结果输出,可以看到上述图形中实际只是利用模型的非参数部分,也即 s(x) 对x作图所得的结果。如果想看预测概率与原始x的关系,可以补充以下程序,但是得到的图形其实并没有实际规律,因为预测值是线性成分bx 与非线性成分s(x)共同构建的结果。所以采用预测值对x作图没有实际意义。而真正有意义的是看非线性成分的回归系数是否小于0.05,如果非线性成分回归系数的P值小于0.05,则提示自变量与因变量之间应该考虑非线性成分的影响。
- proc sort data=output ;
- by age;run;
- proc sgplot data=output ;
- series x=Age y=p_Kyphosis;
- run;