* BREUSCH-PAGAN & KOENKER TEST MACRO * * See 'Heteroscedasticity: Testing and correcting in SPSS' * by Gwilym Pryce, for technical details. * Code by Marta Garcia-Granero 2002/10/28. * The MACRO needs 3 arguments: * the dependent, the number of predictors and the list of predictors * (if they are consecutive, the keyword TO can be used) . * (1) MACRO definition (select an run just ONCE). DEFINE bpktest(!POSITIONAL !TOKENS(1) /!POSITIONAL !TOKENS(1) /!POSITIONAL !CMDEND). * Regression to get the residuals and residual plots. REGRESSION /STATISTICS R ANOVA /DEPENDENT !1 /METHOD=ENTER !3 /SCATTERPLOT=(*ZRESID,*ZPRED) /RESIDUALS HIST(ZRESID) NORM(ZRESID) /SAVE RESID(residual) . do if $casenum=1. print /"Examine the scatter plot of the residuals to detect" /"model misspecification and/or heteroscedasticity" /"" /"Also, check the histogram and np plot of residuals " /"to detect non normality of residuals " /"Skewness and kurtosis more than twice their SE indicate non-normality ". end if. * Checking normality of residuals. DESCRIPTIVES VARIABLES=residual /STATISTICS=KURTOSIS SKEWNESS . * New dependent variable (g) creation. COMPUTE sq_res=residual**2. compute constant=1. AGGREGATE /OUTFILE='tempdata.sav' /BREAK=constant /rss = SUM(sq_res) /N=N. MATCH FILES /FILE=* /FILE='tempdata.sav'. EXECUTE. if missing(rss) rss=lag(rss,1). if missing(n) n=lag(n,1). compute g=sq_res/(rss/n). execute. * BP&K tests. * Regression of g on the predictors. REGRESSION /STATISTICS R ANOVA /DEPENDENT g /METHOD=ENTER !3 /SAVE RESID(resid) . *Final report. do if $casenum=1. print /" BP&K TESTS" /" ==========". end if. * Routine adapted from Gwilym Pryce. matrix. compute p=!2. get g /variables=g. get resid /variables=resid. compute sq_res2=resid&**2. compute n=nrow(g). compute rss=msum(sq_res2). compute ii_1=make(n,n,1). compute i=ident(n). compute m0=i-((1/n)*ii_1). compute tss=transpos(g)*m0*g. compute regss=tss-rss. print regss /format="f8.4" /title="Regression SS". print rss /format="f8.4" /title="Residual SS". print tss /format="f8.4" /title="Total SS". compute r_sq=1-(rss/tss). print r_sq /format="f8.4" /title="R-squared". print n /format="f4.0" /title="Sample size (N)". print p /format="f4.0" /title="Number of predictors (P)". compute bp_test=0.5*regss. print bp_test /format="f8.3" /title="Breusch-Pagan test for Heteroscedasticity" + " (CHI-SQUARE df=P)". compute sig=1-chicdf(bp_test,p). print sig /format="f8.4" /title="Significance level of Chi-square df=P (H0:" + "homoscedasticity)". compute k_test=n*r_sq. print k_test /format="f8.3" /title="Koenker test for Heteroscedasticity" + " (CHI-SQUARE df=P)". compute sig=1-chicdf(k_test,p). print sig /format="f8.4" /title="Significance level of Chi-square df=P (H0:" + "homoscedasticity)". end matrix. !ENDDEFINE. * (2) Sample data (replace by your own)*. INPUT PROGRAM. - VECTOR x(20). - LOOP #I = 1 TO 50. - LOOP #J = 1 TO 20. - COMPUTE x(#J) = NORMAL(1). - END LOOP. - END CASE. - END LOOP. - END FILE. END INPUT PROGRAM. execute. * x1 is the dependent and x2 TO x20 the predictors. * (3) MACRO CALL (select and run). BPKTEST x1 19 x2 TO x20.