"asym.env"<-function(object,...) { u=object$u r=object$r p=object$p out=list() if(u0){ Gamma = object$Gamma Gamma0 = object$Gamma0 eta = object$eta Omega = object$Omega Omega0 = object$Omega0 sigY = object$sigY sigX = object$sigX sigRes = object$sigRes Sigma = object$Sigma P = Gamma%*%t(Gamma) Sigma1= P%*%Sigma%*% P #---compute asymptotic variance and get the ratios--- asyFm = kronecker(solve(sigX), sigRes); asyFm = matrix(sqrt(diag(asyFm)), r, p); temp = kronecker(eta %*% sigX %*% t(eta), solve(Omega0))+ kronecker(Omega, solve(Omega0)) + kronecker(solve(Omega), Omega0) - 2 * kronecker(diag(u), diag(r - u)) covMatrix = kronecker(solve(sigX), Sigma1) + kronecker(t(eta), Gamma0) %*% solve(temp) %*% kronecker(eta, t(Gamma0)); asySE = matrix(sqrt(diag(covMatrix)), r, p) out$covMatrix = covMatrix; out$asySE = asySE; out$ratio = asyFm / asySE; } else if (u==0){ out$covMatrix = NULL; out$asySE = NULL; out$ratio = matrix(1,r, p); } else{ sigX = object$sigX sigRes = object$sigRes covMatrix = kronecker(solve(sigX), sigRes) asyFm = matrix(sqrt(diag(covMatrix)), r, p) out$covMatrix = covMatrix; out$asySE = asyFm; out$ratio = matrix(1,r, p) } class(out)<-'asym.env' return(out) }