
10 Out
2011
10 Out
'11
00:32
Estava olhando a discussão, tentei rodar a função e não consegui, como faço? sfericity.test<-function(n,s1,s2=NULL,estsigma=TRUE){ + #### Performs a hypothesis test that a covariance matrix is of specified + #### form. Test is of the form H0: S1=sigma^2*S2. n is the number of + #### observations on which the sample covariance matrix is based. + #### If the input parameter estsigma is TRUE: + #### Perform test of the hypothesis that S1=sigma^2 S2, for unknown sigma. + #### If S2 not specified, assumed that S2=I. Reference is Basilevsky, + #### Statistical Factor Analysis and Related Methods, page 191. + #### If the input parameter estsigma is FALSE: + #### Perform test of the hypothesis that S1=S2. If S2 not specified, + #### assumed that S2=I. Reference is Seber, Multivariate Observations, + #### sec 3.5.4 + #### Only the lower triangle+diagonal is required at entry, and the upper + #### triangle is ignored. + #### DAW July 2000 + dname <- paste(substitute(s1)) + p<-nrow(s1) + for (i in 1:(p-1)){for (j in ((i+1):p)){ + s1[i,j]<-s1[j,i] + s2[i,j]<-s2[j,i] }} + if (!is.null(s2)){ + b<-eigen(s2,symmetric=T,only.values=F) + r<-b$vectors %*% diag(1/sqrt(b$values)) + s<-t(r) %*% s1 %*% r } + else { s<-s1 } + + d<-eigen(s,symmetric=T,only.values=T)$values + ldet<-sum(log(d)) + tr<-sum(d) + + if (estsigma==TRUE){ + sighat<-tr/p + cc<--(n-(2*p^2+p+2)/(6*p))*(ldet-p*log(tr/p)) + statistic <- cc + sighat<-sighat + names(statistic) <- "L statistic" + parameter <- 0.5*(p+2)*(p-1) + names(parameter) <- "df" + rval<-list(data.name=dname,sighat=sighat,statistic=statistic,parameter=parameter,p.value=1-pchisq(statistic,parameter),method="Sphericity test") } + else { + cc<--n*(p+ldet-tr) + statistic <- cc + names(statistic) <- "L statistic" + parameter <- 0.5*(p+1)*p + names(parameter) <- "df" + rval<-list(data.name="",statistic=statistic,parameter=parameter,p.value=1-pchisq(statistic,parameter),method="Covariance equality test statistic") + } + class(rval) <- "htest" + return(rval) + } > pw <- function(q,n) { + pdf <- function(w) { 1/2 * (n-2) * w^((n-3)/2) } + integrate(pdf,0,q) + } > > varcomp <- function(covmat,n) { + if (is.list(covmat)) { + if (length(covmat) < 2) + stop("covmat must be a list with at least 2 elements") + ps <- as.vector(sapply(covmat,dim)) + if (sum(ps[1] == ps) != length(ps)) + stop("all covariance matrices must have the same dimension") + p <- ps[1] + q <- length(covmat) + if (length(n) == 1) + Ng <- rep(n,q) + else if (length(n) == q) + Ng <- n + else + stop("n must be equal length(covmat) or 1") + + DNAME <- deparse(substitute(covmat)) + } + + else + stop("covmat must be a list") + + ng <- Ng - 1 + Ag <- lapply(1:length(covmat),function(i,mat,n) { n[i] * mat[[i]] },mat=covmat,n=ng) + A <- matrix(colSums(matrix(unlist(Ag),ncol=p^2,byrow=T)),ncol=p) + detAg <- sapply(Ag,det) + detA <- det(A) + V1 <- prod(detAg^(ng/2))/(detA^(sum(ng)/2)) + kg <- ng/sum(ng) + l1 <- prod((1/kg)^kg)^(p*sum(ng)/2) * V1 + rho <- 1 - (sum(1/ng) - 1/sum(ng))*(2*p^2+3*p-1)/(6*(p+1)*(q-1)) + w2 <- p*(p+1) * ((p-1)*(p+2) * (sum(1/ng^2) - 1/(sum(ng)^2)) - 6*(q-1)*(1-rho)^2) / (48*rho^2) + f <- 0.5 * (q-1)*p*(p+1) + STATISTIC <- -2*rho*log(l1) + PVAL <- 1 - (pchisq(STATISTIC,f) + w2*(pchisq(STATISTIC,f+4) - pchisq(STATISTIC,f))) + names(STATISTIC) <- "corrected lambda*" + names(f) <- "df" + RVAL <- structure(list(statistic = STATISTIC, parameter = f,p.value = PVAL, data.name = DNAME, method = "Equality of Covariances Matrices Test"),class="htest") + return(RVAL) + } > sphericity.test<-function(n,s1,s2=NULL,estsigma=TRUE){ + > > sphericity.test(10,2) Erro em 1:(p - 1) : argumento de comprimento zero Michele, Acho que você estava se referindo a função sphericiy.test que eu implementei e fiz referẽncia em um material sobre ANOVA com medidas repetidas. Deixei o código disponível aqui: http://www.fernandohrosa.com.br/en/P/sphericity-test-for-covariance-matrices-in-r-sphericity-test/ Fernando, .