﻿* 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. * Modified by David Marso 2014/09/18 (changed AGGREGATE and MATCH, slight mods to MATRIX code, some formatting). * 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). *****************************************************************************************************************. *ezt a részt futtasd EGYSZER a legelején!. 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. AGGREGATE /OUTFILE=* MODE ADDVARIABLES /BREAK= /rss = SUM(sq_res) /N=N. COMPUTE g=sq_res/(rss/n). * BP&K tests. * Regression of g on the predictors. REGRESSION /STATISTICS R ANOVA /DEPENDENT g /METHOD=ENTER !3 /SAVE RESID(resid) . * 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 m0 = ident(n)-((1/n)*make(n,n,1)). COMPUTE tss = transpos(g)*m0*g. COMPUTE regss = tss-msum(sq_res2). *Final report. PRINT /TITLE " BP&K TESTS". PRINT /TITLE " ==========". 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. *********************************************************************************************************************. *ezzel a kódrésszel nézheted meg, hogy működött-e a makró definiálsa. *ez egy próba adatbázison próbálja meg lefuttatni a makrót. *futtasd le, és nézd meg, hogy az outputban hibát kapsz, vagy lefut egy regresszió néhány plusz sorral!. * (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. *********************************************************************************************************************. *ezzel a résszel futtathatod a saját adataidon. *x1 helyére írd be a saját KIMENETI változód nevét! *ezt követően add meg, hány PREDIKTOR változód van. *végül sorold fel a prediktorváltozóidat. *ha kevés van, megadhatod mindegyiknek külön a nevét. *ha sok van, akkor add meg az elsőt, majd TO, majd az utolsót. * x1 is the dependent and x2 TO x20 the predictors. * (3) MACRO CALL (select and run). BPKTEST x1 19 x2 TO x20.