如题,code如下,如何加入命令显示T-test的显著性水平P-value呢?
/* PROGRAM TRIPLES
C*****************************************************************************
C THIS PROGRAM TAKES DATA FROM C:\DATA.DAT AND CONDUCTS THE TRIPLES
C ASYMMETRY TEST ON IT
C THIS TEST IS DESCRIBED IN RANDLES, FLIGNER, POLICELLO AND WOLFE
C 'AN ASYMPTOTICALLY DISTRIBUTION-FREE TEST FOR SYMMETRY VS. ASYMMETRY'
C JASA 75 (MARCH 1980) 168-172
C
C IMPORTANT NOTES:
C 1) AN ATTEMPTED PORT OF THIS PROGRAM TO A WORKSTATION
C FAILED FOR UNKNOWN REASONS.
C 2) TO TEST WHETHER THE CODE IS WORKING PROPERLY, ENTER THE FOLLOWING
C NUMBERS IN THE FILE C:\DATA.DAT: (This example is taken from R. Verbrugge)
C 2.373
C 3.339
C 1.980
C 3.102
C 0.000
C 3.335
C OUTPUT OF THE TEST SHOULD BE:
C ETA = -.23333
C VARIANCE = .013333
C TEST STATISTIC = -2.0207
C
C THE NULL OF THE TEST IS A SYMMETRIC DISTRIBUTION
C THIS TEST CANNOT DETECT ASYMMETRIC DISTRIBUTIONS WITH MEDIAN=MEAN
C THE TEST REQUIRES A MINIMUM OF 5 DATA POINTS
C
C ETA IS THE ESTIMATED VARIABLE
C VARIANCE IS ITS ESTIMATED VARIANCE (I ALREADY DIVIDE BY N)
C N = NUMBER OF OBSERVATIONS
C TEST STATISTIC IS ETA/SQRT(VARIANCE), WHICH IS ASYMPTOTICALLY STD. N
C
C FSTAR IS A FUNCTION THAT CALCULATES FSTAR(X(I),X(J),X(K))
C ARGUMENTS I,J,K
C FX1I IS A FUNCTION THAT CALCULATES FSTAR(1)(X(I))
C ARGUMENTS: I
C FX2IJ IS A FUNCTION THAT CALCULATES FSTAR(2)(X(I),X(J))
C ARGUMENTS: I,J
C
C IF YOUR DATA SET IS LARGER THAN 600, NEED TO CHANGE MAXN IN PARAMETER
C STATEMENT BELOW AND IN ALL 3 FUNCTIONS
C*****************************************************************************
*/
proc fstar; retp(""); endp;
proc fx1i; retp(""); endp;
proc fx2ij; retp(""); endp;
let x = 2.373 3.339 1.980 3.102 0.000 3.335;
LOAD x[]=c:\data.dat;
n = rows(x);
@ INITIALIZE, DO COMBINATORIAL CALCULATIONS @
" n " n; @call keyw;@
HALFN=INT(N/2.0);
NN=n;
NNMIN2=NN-2.0;
NNCHUS3=(NN*(NN-1.0)*(NN-2.0))/6.0;
NNCHUS2=(NN*(NN-1.0))/2.0;
NNMIN1C2=((NN-1.0)*(NN-2.0))/2.0;
"nnmin1c2 " nnmin1c2; @call keyw;@
@ CALCULATE ETA @
ETA=0.0;
for i(1,n-2,1);
for j(i+1,n-1,1);
for k(j+1,n,1);
ii = i; jj=j; kk=k;
ETA=ETA+FSTAR(ii,jj,kk);
endfor;
endfor;
endfor;
ETA=ETA/NNCHUS3;
"eta " eta; @call keyw;@
@ CALCULATE KSI1@
KSI1=0.0;
for i(1,N,1);
TEMP=FX1I(I);
TEMP2=(TEMP-ETA)*(TEMP-ETA);
KSI1=KSI1+TEMP2;
endfor;
KSI1=KSI1/NN;
"Ksi1 " ksi1; @call keyw;@
@ CALCULATE KSI2@
KSI2=0.0;
for i(1,n-1,1);
for j(i+1,n,1);
ii = i; jj = j;
TEMP=FX2IJ(ii,jj);
TEMP2=(TEMP-ETA)*(TEMP-ETA);
KSI2=KSI2+TEMP2;
endfor;
endfor;
KSI2=KSI2/NNCHUS2;
"Ksi2 " ksi2; @call keyw;@
@ CALCULATE KSI3@
KSI3=(1.0/9.0)-(ETA*ETA);
"Ksi3 " ksi3; @call keyw;@
@ CALCULATE VARIANCE@
VARIANCE=KSI1*3.0*(NN-3.0)*(NN-4.0)/2.0;
VARIANCE=VARIANCE+(KSI2*3.0*(NN-3.0))+KSI3;
VARIANCE=VARIANCE/NNCHUS3;
"Variance " VARIANCE; @call keyw;@
@ CALCULATE TEST STATISTIC (WHICH IS STD. N)@
IF (VARIANCE .NE 0.0);
STAT=ETA/SQRT(VARIANCE);
ELSE;
STAT = 999999;
"TEST IS CLAIMING 0 VARIANCE";
end;
ENDIF;
" stat ";; stat;
/* **************************************************************/
proc FSTAR(I,J,K);
local t1, t2, t3, t4, tmp;
T1=X[I]+X[J]-2.0*X[K];
T2=X[I]+X[K]-2.0*X[J];
T3=X[K]+X[J]-2.0*X[I];
T4=T1*T2*T3;
IF (T4 .EQ 0.0);
TMP = 0.0;
ELSE;
T1=-1 + 2*(t1 .ge 0);
T2=-1 + 2*(t2 .ge 0);
T3=-1 + 2*(t3 .ge 0);
TMP=(T1+T2+T3)/3.0;
ENDIF;
retp(tmp);
endp;
/* **************************************************************/
proc FX1I(I);
local t1,j,tmp, ii,jj,kk;
T1=0.0;
for j(1,I-2,1);
for K(j+1,I-1,1);
ii = i; jj = j; kk=k;
T1=T1+FSTAR(jj,kk,ii);
endfor;
endfor;
for j(1,I-1,1);
for k(I+1,N,1);
ii = i; jj = j; kk=k;
T1=T1+FSTAR(jj,ii,kk);
endfor;
endfor;
for j(I+1,N-1,1);
for k(J+1,N,1);
ii = i; jj = j; kk=k;
T1=T1+FSTAR(ii,jj,kk);
endfor;
endfor;
retp(T1/NNMIN1C2);
endp;
/* **************************************************************/
proc FX2IJ(I,J);
local ii,jj, t1,k, si,sj,sk;
II=I;
JJ=J;
IF(I .GT J);
II=J;
JJ=I;
ENDIF;
T1=0.0;
for k(1,II-1,1);
sk = k;
T1=T1+FSTAR(sk,II,JJ);
endfor;
for k(II+1,JJ-1,1);
sk = k;
T1=T1+FSTAR(II,sk,JJ);
endfor;
for k(JJ+1,N,1);
sk = k;
T1=T1+FSTAR(II,JJ,sk);
endfor;
retp(T1/NNMIN2);
endp;