A report on my Oja Median problem:

Gabor Grothendieck suggested replacing my loopy cofactor function with:

 cofactors2 <- function(x) {
        x <- t(rbind(1,cbind(x,1)))
        p <- nrow(x)
        solve( x, (seq(p)==p)+0) * det(x)
 }

Which is much better, especially if the dimension p is large.  Unfortunately,
it is still quite slow inside the apply loop of the main function, and
this suggests that it is probably necessary to recode in C or Fortran
to get something that would work well in realistic problems.  In case
anyone else would like to play with this...here is the original version
again and a timing comparison:

        "mean.wilks" <- function(x){
                # Computes the column means of the matrix x -- very sloooowly.
                n <- dim(x)[1]
                p <- dim(x)[2]
                A <- t(combn(1:n,p))
                X <- NULL
                for(i in 1:p)
                        X <- cbind(X,x[A[,i],])
                oja.ize <- function(v)cofactors(matrix(v,sqrt(length(v))))
                A <- t(apply(X,1,oja.ize))
                coef(lm(-A[,1]~A[,-1]-1))
                }
        "cofactors" <- function(A){
                B <- rbind(1,cbind(A,1))
                p <- ncol(B)
                x <- rep(0,p)
                for(i in 1:p)
                        x[i] <- ((-1)^(i+p)) *det(B[-i,-p])
                return(x)
                }
______________________________________

X <- matrix(rnorm(150),50)
t1 <- unix.time(mean.wilks(X)->m1)
t2 <- unix.time(mean.wilks2(X)->m2) # this uses cofactors2
t3 <- unix.time(apply(X,2,mean)->m3)
> m1
   A[, -1]1    A[, -1]2    A[, -1]3
 0.09205914  0.05603060 -0.24290857
> m2
   A[, -1]1    A[, -1]2    A[, -1]3
 0.09205914  0.05603060 -0.24290857
> m3
[1]  0.09205914  0.05603060 -0.24290857
> t1
[1] 147.70  25.33 173.41   0.00   0.00
> t2
[1] 108.97  21.87 131.23   0.00   0.00
> t3
[1] 0 0 0 0 0

NB.  A reminder that this mean version is only a testing ground for
the median version of Oja which replaces the lm() call with a median
regression call.

url:    www.econ.uiuc.edu/~roger/my.html        Roger Koenker
email   [EMAIL PROTECTED]                       Department of Economics
vox:    217-333-4558                            University of Illinois
fax:    217-244-6678                            Champaign, IL 61820

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help

Reply via email to