作者: | Li, J. and S. X. Chen |
标题: | Li, J. and S. X. Chen (2012). Two Sample Tests for High Dimensional Covariance Matrices, The Annals of Statistics, 40, 908-940. |
代码 | |
R-code: # R code for #``Two Sample Tests for High Dimensioanl Covariance #Matrices" by #Jun Li and Song Xi Chen, Annals of Statistics, ## 2012, 908-940. # sam1:first sample; sam2:second sample # size1 and size 2 are sample sizes # sam1 and sam2 must be array with structure size1 x p or size2 x p # p is the dimension of data equalCovs<-function(sam1,sam2,size1,size2){ ######################################################## # obtain test statistic given in eqn (2.1) of the paper A_mat<- sam1 %*% t(sam1) out<-0 storage.mode(A_mat)<-"double" storage.mode(out)<-"double" nr<-as.integer(size1) # find A1 dyn.load("one1.dll") result1<-.Fortran("code1",nr,A_mat,out=out) A1<-2/(size1*(size1-1))*result1[[3]] # find A2 dyn.load("two2.dll") result2<-.Fortran("code2",nr,A_mat, out=out) A2<-4/(size1*(size1-1)*(size1-2))*result2[[3]] # find A3 dyn.load("three3.dll") result3<-.Fortran("code3",nr,A_mat,out=out) A3<-8/(size1*(size1-1)*(size1-2)*(size1-3))*result3[[3]] # obtain the statistic given by eqn (2.1) in our paper A_n1<-A1-A2+A3 # consider the sample 2 B_mat<- sam2 %*% t(sam2) out<-0 storage.mode(B_mat)<-"double" storage.mode(out)<-"double" nrr<-as.integer(size2) # find B1 dyn.load("one1.dll") result4<-.Fortran("code1",nrr,B_mat,out=out) B1<-2/(size2*(size2-1))*result4[[3]] # find B2 dyn.load("two2.dll") result5<-.Fortran("code2",nrr,B_mat,out=out) B2<-4/(size2*(size2-1)*(size2-2))*result5[[3]] # find B3 dyn.load("three3.dll") result6<-.Fortran("code3",nrr,B_mat,out=out) B3<-8/(size2*(size2-1)*(size2-2)*(size2-3))*result6[[3]] B_n2<-B1-B2+B3 ############################################################ # obtain the test statistic given in eqn (2.2) of the paper ############################################################ C_mat1<- sam1 %*% t(sam2) C_mat2<- sam2 %*% t(sam1) out<-0 storage.mode(C_mat1)<-"double" storage.mode(C_mat2)<-"double" storage.mode(out)<-"double" nrrr<-as.integer(size1) nl<-as.integer(size2) # find C1 dyn.load("four4.dll") result7<-.Fortran("code4",nrrr,nl,C_mat1,out=out) C1<--2/(size1*size2)*result7[[4]] # find C2 dyn.load("five5.dll") result8<-.Fortran("code5",nl,nrrr,C_mat2,out=out) C2<-4/(size1*size2*(size1-1))*result8[[4]] # find C3 dyn.load("five5.dll") result9<-.Fortran("code5",nrrr,nl,C_mat1,out=out) C3<-4/(size1*size2*(size2-1))*result9[[4]] # find C4 dyn.load("six6.dll") result10<-.Fortran("code6",nrrr,nl,C_mat1,out=out) C4<--4/(size1*size2*(size1-1)*(size2-1))*result10[[4]] # test statistic given by eqn (2.2) of the paper C_n<-C1+C2+C3+C4 # the estimator T_n<-A_n1+B_n2+C_n # the standard deviation Sd_prime<-2*(1/size1+1/size2)*((size1/(size1+size2))*A_n1+(size2/(size1+size2))*B_n2) test_stat<-T_n/Sd_prime pvalue<-1-pnorm(test_stat) test<-c(test_stat,pvalue) return(test) } |