
In SPSS, there is no subroutine for Quadratic Discriminant Analysis, I write this macro to compute quadratic score and posterior probability. If you have any problem, please let me know.
SET MXLOOP =99999.
MATRIX.
GET DATA/VARIABLES=X1 to X4/MISSING=OMIT.
GET Group/VARIABLES=G/MISSING=OMIT.
COMPUTE GMAX=CMAX(Group).
COMPUTE GMIN=CMIN(Group).
COMPUTE NR=NROW(DATA).
COMPUTE NC=NCOL(DATA).
COMPUTE RN=MAKE(GMAX-GMIN+1,1,1).
COMPUTE SSIGMA=MAKE(NC*(GMAX-GMIN+1),NC,0).
COMPUTE PI=4*ARTAN(1).
COMPUTE QDA=MAKE(NR, (GMAX-GMIN)+1,-999).
COMPUTE QDAPOST=MAKE(NR, 2*(GMAX-GMIN)+3,-999).
COMPUTE TEMP2=0.
LOOP I=GMIN TO GMAX.
COMPUTE TEMP1=0.
LOOP J=1 TO NR.
DO IF (Group(J)=I).
COMPUTE TEMP1=TEMP1+1.
END IF.
END LOOP.
COMPUTE TEMPDATA=MAKE(TEMP1,NC,999).
LOOP K=1 TO TEMP1.
COMPUTE TEMPDATA(K,:)=DATA(K+TEMP2,:).
END LOOP.
COMPUTE PG=NROW(TEMPDATA)/NR.
COMPUTE TEMP2=TEMP1+TEMP2.
COMPUTE MEAN=T(CSUM(TEMPDATA)/NROW(TEMPDATA)).
COMPUTE SIGMA=(SSCP(TEMPDATA)-NROW(TEMPDATA)*MEAN*T(MEAN))/(NROW(TEMPDATA)-1).
PRINT I.
PRINT SIGMA.
LOOP V=1 TO NR.
COMPUTE XX=T(DATA(V,:)).
COMPUTE QD=TEMP1/NR*(2*PI)&**(-1*NC/2)*DET(SIGMA)&**(-0.5)*EXP(-0.5*T(XX-MEAN)*INV(SIGMA)*(XX-MEAN)).
COMPUTE QDA(V,I)=LN(QD)+(NC/2)*LN(2*PI).
COMPUTE QDAPOST(V,I)=LN(QD)+(NC/2)*LN(2*PI).
END LOOP.
END LOOP.
LOOP W= 1 TO GMAX-GMIN+1.
LOOP X=1 TO NR.
COMPUTE QDAPOST(X,GMAX-GMIN+1+W)=QDA(X,W)/RSUM(QDA(X,:)).
END LOOP.
END LOOP.
LOOP X=1 TO NR.
LOOP GPRED= 1 TO GMAX-GMIN+1.
DO IF (QDAPOST(X,GPRED)= RMAX(QDA(X,:))).
COMPUTE QDAPOST(X,2*(GMAX-GMIN)+3)=GPRED.
END IF.
END LOOP.
END LOOP.
PRINT QDAPOST.
END MATRIX.

spss quadratic discriminant function analysis spss 教學網站 spss教學講義下載 spss教學pdf spss教學網 spss教學講義下載 spss教學網站 spss教學下載 spss教學講義 spss教學pdf roc curve spss教學 manova spss教學 spss教學手冊 spss 16教學
讀者回應 ( 4 意見 )
訂閱發佈留言 (Atom)
Excellent work!
Thank you.
Hi there,
Great Macro, but does it work? You have several "COMPPUTE" in the macro (with double P)...Have you run it?
Very interesting Macro. But does it work? I found several "COMPPUTE" statements (Compute with PP). Is this a command specific for Matrix or a typo? I can not find any reference to COMPPUTE in SPSS syntax.
Thanks and keep the good work
Yes, it is a typo. Thanks for bring it out.
發佈留言
Please leave your name and tell me what you thought about this site. Comments, suggestions and views are welcomed.
如果這篇文章對你有幫助,那請留個訊息給我~