function(explan, depend)
{
	klepm <- 1
	d.stats <- 0
	direct <- NULL
	K <- ncol(explan)
	bdir <- c(0, 0, 0, 0, 0, 0, 0, 0)
	brev <- rbind(bdir, bdir, bdir, bdir, bdir, bdir, bdir)
	dmat <- cbind(explan, depend)
	dmat <- as.matrix(na.omit(dmat))
	tmat <- as.matrix(cov.wt(dmat)$cov)
	itmat <- solve(tmat)
	for(i in 1:K) {
		bdir[i] <-  - itmat[i, K + 1]/itmat[K + 1, K + 1]
		direct <- c(direct, bdir[i])
	}
	rsq <- calcrsq(bdir, tmat)
	direct <- c(direct, rsq)
	names(direct) <- c(dimnames(explan)[[2]], "R2")
	allrev <- NULL
	for(i in 1:K) {
		rev <- NULL
		for(j in 1:K) {
			brev[j, i] <-  - itmat[i, j]/itmat[K + 1, j]
			rev <- c(rev, brev[j, i])
		}
		allrev <- rbind(allrev, rev)
	}
	dimnames(allrev)[[1]] <- dimnames(explan)[[2]]
	dimnames(allrev)[[2]] <- dimnames(explan)[[2]]
	thislow <- 1
	keyc <- 0
	keye <- 0
	for(j in 1:K) {
		for(i in 1:K) {
			mymin <- 1 - (brev[j, i]/bdir[i])
			if(mymin > 1) {
				newmin <- 1/mymin
				if(newmin < thislow) {
				  thislow <- newmin
				  keye <- j
				  keyc <- i
				}
			}
		}
	}
	g.stat <- c(thislow, keyc, keye)
	if(rsq < 1 && thislow < 1) {
		klepm <- rsq + (1 - rsq) * thislow
		hmat <- tmat
		hmat[K + 1, K + 1] <- klepm * tmat[K + 1, K + 1]
		ihmat <- solve(hmat)
		d.stats <- NULL
		for(i in 1:K) {
			dstat <- 1/(ihmat[i, i] * tmat[i, i])
			d.stats <- c(d.stats, dstat)
		}
		names(d.stats) <- dimnames(explan)[[2]]
	}
	names(g.stat) <- NULL
	names(klepm) <- NULL
	list(direct = direct, rev = allrev, g.stat = g.stat, m.stat = klepm, d.stats = d.stats)
}
