accov1<-function(respmat){ ## This program calculates the average conditional ## ## covariance matrix for a 0-1 data set. BH 1/12/04 ## nitem<-ncol(respmat) nexmn<-nrow(respmat) covmat<-matrix(0,nrow=nitem,ncol=nitem) score<-apply(respmat,1,sum) ## deal with each item pair one at a time ## for (i in 1:(nitem-1)) { for (j in (i+1):nitem) { ## construct the strata for the item pair ## strata<-array(0,dim=c(2,2,(nitem-1))) scoretemp<-score-respmat[,i]-respmat[,j] for (k in 1:nexmn){ strata[respmat[k,i]+1,respmat[k,j]+1,scoretemp[k]+1]<- strata[respmat[k,i]+1,respmat[k,j]+1,scoretemp[k]+1]+1 } ## calculate the covariance times number of ## ## examinees for each score level ## ntotal<-0 for (k in 1:(nitem-1)){ n<-strata[1,1,k]+strata[1,2,k]+strata[2,1,k]+strata[2,2,k] p11<-strata[2,2,k] p1<-strata[2,1,k]+strata[2,2,k] p2<-strata[1,2,k]+strata[2,2,k] if (n>1){ ntotal<-ntotal+n covmat[i,j]<-covmat[i,j]+n*(p11/n-(p1/n)*(p2/n)) } } ## divide by the total number of examinees ## ## and then get the lower half of the matrix ## covmat[i,j]<-covmat[i,j]/ntotal covmat[j,i]<-covmat[i,j] ## go on to the next item pair } } ## return the output and finish ## return(covmat) } a1291<-read.fwf("http://www.stat.sc.edu/~habing/courses/data/a1291nospace.txt",widths=rep(1,24)) accov2<-function(respmat,include=F){ ## This program calculates the average conditional ## ## covariance matrix for a 0-1 data set. By F. Vera ## nitem<-ncol(respmat) ccov<-matrix(0,nrow=nitem,ncol=nitem) score<-apply(respmat,1,sum) for (i in 1:(nitem-1)) { for (j in (i+1):nitem) { scoretemp<-score-respmat[,i]-respmat[,j]+1 irfi<-tapply(respmat[,i],scoretemp,sum) irfj<-tapply(respmat[,j],scoretemp,sum) irfij<-tapply(respmat[,i]*respmat[,j],scoretemp,sum) numatscore<-table(scoretemp) numatscore2<-numatscore[numatscore>1] irfi<-irfi[numatscore>1]/numatscore2 irfj<-irfj[numatscore>1]/numatscore2 irfij<-irfij[numatscore>1]/numatscore2 ccov[i,j]<-sum((irfij-irfi*irfj)*numatscore2)/sum(numatscore2) ccov[j,i]<-ccov[i,j] } } return(ccov) }