用spss做岭回归的详细步骤

您所在的位置:网站首页 spss回归分析法操作流程图 用spss做岭回归的详细步骤

用spss做岭回归的详细步骤

#用spss做岭回归的详细步骤| 来源: 网络整理| 查看: 265

用spss做岭回归的详细步骤

关键词:岭回归 spss步骤,spss如何做岭回归,spss怎么做岭回归分析

方法一:

1、做多自变量的线性回归,在统计量面板内选:共线性诊断(L);

2、如结果中的方差膨胀系数(VIF)>5,则可做岭回归分析

3、新建语法编辑器,输入如下命令: INCLUDE ‘安装目录\Ridge regression.sps’. RIDGEREG DEP=因变量名 /ENTER = 自变量名(用空格分开)/START=0 /STOP=1[或其它数值] /INC=0.05[或其它搜索步长]/K=999 .

4、选择运行全部,得到各自变量岭迹图和决定系数R2与K值的关系图,在图上作参考线,取一岭迹平稳并且R2值较大的平衡点的K值;

5、将语法编辑器中的K值改为所选K值,再运行全部,得到详细的最终模型参数。

【关于系数显著性的补充:】 我自己安装的SPSS不能给出岭回归的显著性检验,也不知道是什么原因。  打开Ridge regression.sps,里面是密密麻麻关于岭回归的程序。还好,每个主要步骤都作了说明。查找一下,找到了岭回归系数估计的部分,果然没有显著性检验的语句。     还好,通过原有语句不难得到检验统计量的值。但是仅仅给出这个值,对于做检验而言,很不方便。跟一般回归一样,要给出显著性P值才好。这个关系不难根据P值意义得到,关键是相应的程序语句怎么写。对照系数估计上面方差分析的部分(方差分析部分给出了F检验显著性P值),尝试着写程序,终于成功!保存之后,再做岭回归就能给出显著性检验的P值了!     没用过别的SPSS版本,有的版本好像没这个问题。提出这个方法,希望可以帮到有同样问题的人。     附:在Ridge regression.sps中添加的语句(红色倾斜的部分,就是添加的语句,当然,为了给出相应结果,原有语句作了少许改动。) *—————————————————————————. * Calculate raw coefficients from standardized ones, compute standard errors * of coefficients, and an intercept term with standard error. Then print * out similar to REGRESSION output. *—————————————————————————(从这里开始是给出系数估计) . compute beta={b;0}. . compute b= ( b &/ std ) * sy. . compute intercpt=ybar-t(b)*t(xmean). . compute b={b;intercpt}. . compute xpx=(sse/(sst*(n-nv-1)))*inv(xpx+(k &* ident(nv,nv)))*xpx*                                  inv(xpx+(k &* ident(nv,nv))). . compute xpx=(sy*sy)*(mdiag(1 &/ std)*xpx*mdiag(1 &/ std)). . compute seb=sqrt(diag(xpx)). . compute seb0=sqrt( (sse)/(n*(n-nv-1)) + xmean*xpx*t(xmean)). . compute seb={seb;seb0}. . compute rnms={varname,’Constant’}. . compute ratio=b &/ seb. . compute ppp=2*(1-tcdf(abs(ratio),n-nv-1)). . compute bvec={b,seb,beta,ratio,ppp}. . print bvec/title=’————–Variables in the Equation—————-‘   /rnames=rnms /clabels=’B’ ‘SE(B)’ ‘Beta’ ‘T’ ‘sig’.                         . print /space=newpage. end if.

方法二:

可以直接在spss里面做,spss18里面已经比较完善了。

步骤如下:回归——》最优尺度——》规则化(里面有岭回归)。

spss做岭回归

岭回归可以下载相关模块,也可以自己编程来实现。大部分人都会选择后一种方法。这个主要是因为代码很简洁,很容易编写。代码如下: INCLUDE’d:\spss20.0\Ridge Regression.sps’. Ridgereg enter=X1 X2 X3 /dep=y 诺,就这么三行。第一行单引号里边填写你的spss安装目录。比如我的按在d盘下面,所以我就填d:\spss20.0,如果你的按在c盘,那就填C盘呗。然后目录后边那个ridge regression,是最小二乘平方的宏的调用。然后第二行X1,X2,X3的位置填写你的自变量的名字。有几个就填几个。中间用空格隔开。第三行y的位置填你的因变量。运行的时候,打开文件——新建——语法,进入语法编辑器窗口,输入上边的代码,然后点运行——全部就可以了。结果会有一个系数表,这个表的第一列是K值,第二列是决定系数,第三列往后是你的自变量。其中k值会从0开始增大,同时决定系数也会慢慢变小,最终趋于稳定。(岭回归舍弃了一定的信息,从而改善了多重共线性)要从这张表里边选取合适的k值,使决定系数尽量大,同时尽量稳定。选好k值就可以参照系数写出方程了。此外在岭回归里边是不会输出常数的。这也是和一般回归方法的一个不同之处。

preserve. set printback=off. define ridgereg (enter=!charend(‘/’) /dep = !charend(‘/’) /start=!default(0) !charend(‘/’) /stop=!default(1) !charend(‘/’) /inc=!default(.05) !charend(‘/’) /k=!default(999) !charend(‘/’) /debug=!DEFAULT (‘N’)!charend(‘/’)  ).

preserve. !IF ( !DEBUG !EQ ‘N’) !THEN set printback=off mprint off. !ELSE set printback on mprint on. !IFEND . SET mxloops=200. *—————————————————————————. * Save original active file to give back after macro is done. *—————————————————————————. !IF (!DEBUG !EQ ‘N’) !THEN SET RESULTS ON. DO IF $CASENUM=1. PRINT / “NOTE: ALL OUTPUT INCLUDING ERROR MESSAGES HAVE BEEN TEMPORARILY” / “SUPPRESSED. IF YOU EXPERIENCE UNUSUAL BEHAVIOR, RERUN THIS” / “MACRO WITH AN ADDITIONAL ARGUMENT /DEBUG=’Y’.” / “BEFORE DOING THIS YOU SHOULD RESTORE YOUR DATA FILE.” / “THIS WILL FACILITATE FURTHER DIAGNOSIS OF ANY PROBLEMS.”. END IF. !IFEND . save outfile=’rr__tmp1.sav’. *—————————————————————————. * Use CORRELATIONS to create the correlation matrix. *—————————————————————————. * DEFAULT:  SET RESULTS AND ERRORS OFF TO SUPPRESS CORRELATION PIVOT TABLE *. !IF (!DEBUG=’N’) !THEN set results off errors off. !IFEND

correlations variables=!dep !enter /missing=listwise/matrix out(*). set errors on results listing . *—————————————————————————. * Enter MATRIX. *—————————————————————————. matrix. *—————————————————————————. * Initialize k, increment, and  number of iterations. If k was not * specified, it is 999 and looping will occur. Otherwise, just the one * value of k will be used for estimation. *—————————————————————————. do if (!k=999). . compute k=!start. . compute inc=!inc. . compute iter=trunc((!stop – !start ) / !inc ) + 1. . do if (iter



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3