* In normally distributed variables, means & variances are not correlated. * The correlation coefficient between jackknife means&variances in normal * variables should be non-significant and provides a very simple normality test. * Sample dataset *. DATA LIST FREE/copper(F8.2). BEGIN DATA 0.70 0.45 0.72 0.30 1.16 0.69 0.83 0.74 1.24 0.77 0.65 0.76 0.42 0.94 0.36 0.98 0.64 0.90 0.63 0.55 0.78 0.10 0.52 0.42 0.58 0.62 1.12 0.86 0.74 1.04 0.65 0.66 0.81 0.48 0.85 0.75 0.73 0.50 0.34 0.88 END DATA. VARIABLE LABEL copper'Urinary copper (µmol/24hr)'. * Modify this value if sample size GT 100 *. TEMPORARY. SET MXLOOPS=100. * Jack-knife normality test *. MATRIX. GET data /VAR=ALL /NAMES=vname /MISSING=OMIT. COMPUTE k=NROW(data). COMPUTE mean=CSUM(data)/k. COMPUTE variance=(CSSQ(data)-k&*(mean&**2))/(k-1). PRINT {mean,variance} /FORMAT='F8.3' /RNAME=vname /CLABEL='Mean','Variance' /TITLE='Statistics for full sample'. * Compute empty matrix to store JK statistics (mean&SD) *. COMPUTE jack=MAKE(k,2,0). COMPUTE n=k-1. * Cycle thru all values *. LOOP i=1 TO k. - DO IF (i EQ 1). /* JK sample for 1st position *. - COMPUTE sample=data(2:k). - ELSE IF (i GT 1) AND (i LT k). /* JK samples for 2nd to last-1 postion *. - COMPUTE sample={data(1:(i-1));data((i+1):k)}. - ELSE IF (i EQ k). /* JK sample for last position *. - COMPUTE sample=data(1:(k-1)). - END IF. - COMPUTE jack(i,1)=MSUM(sample)/n. - COMPUTE jack(i,2)=(MSSQ(sample)-n&*(jack(i,1)&**2))/(n-1). END LOOP. RELEASE data, sample. * Limit output to 10 first values *. PRINT {jack(1:10,:)} /FORMAT='F8.3' /RNAME=vname /CLABEL='Mean','Variance' /TITLE='Jack-knife statistics for rows 1-10'. * JK normality test *. COMPUTE n=NROW(jack). COMPUTE mean=CSUM(jack)/n. COMPUTE variance=(CSSQ(jack)-n&*(mean&**2))/(n-1). COMPUTE x=jack(:,1). COMPUTE y=jack(:,2). COMPUTE covxy=((T(x)*y)-n*mean(1)*mean(2))/(n-1). COMPUTE r=covxy/SQRT(variance(1)*variance(2)). PRINT {covxy,r} /FORMAT='F8.3' /CLABEL='COVxy','r' /TITLE='Covariance & Pearson r'. COMPUTE tvalue=r*SQRT((n-2)/(1-r**2)). COMPUTE tsig=2*(1-TCDF(ABS(tvalue),n-2)). PRINT {tvalue,tsig} /FORMAT='F4.2' /CLABEL='t value','t Sig' /TITLE='Significance test for r (df=n-2)'. COMPUTE zr=.5*(LN((1+r)/(1-r))). COMPUTE sezr=1/SQRT(n-3). COMPUTE lowzr=zr-1.96*sezr. COMPUTE uppzr=zr+1.96*sezr. COMPUTE lowr=((exp(2*lowzr))-1)/((exp(2*lowzr))+1). COMPUTE uppr=((exp(2*uppzr))-1)/((exp(2*uppzr))+1). PRINT {lowr,uppr} /FORMAT='F8.2' /CLABEL="Lower" "Upper" /TITLE='95%CI for R:'. * Export statistics to active dataset *. COMPUTE namevec={'jackmean','jackvar'}. SAVE jack /OUTFILE='C:\Temp\extracols.sav' /NAMES=namevec. PRINT /TITLE='Jack-knife statistics exported to active dataset'. END MATRIX. MATCH FILES /FILE=* /FILE='C:\Temp\extracols.sav'. LIST /CASES=FROM 1 TO 10. GRAPH /HISTOGRAM(NORMAL)=jackmean .