Hello, again.

> 
> This is not really working. Here what I have for the moment.
> 

Right, I've read only half of the description line of function 'poly'. The
other half states that

"These are all orthogonal to the constant polynomial of degree 0."

But not pairwise orthogonal.

You can look for packages implementing Gram-Schmidt orthogonalization

library(sos)
r1 <- findFn('Gram')
r2 <- findFn('Schmidt')
r1 & r2

or use a (time consuming) trick: form a matrix with the first column as x1,
and the others as the
residuals, which are orthogonal, of the regressions of that column with all
the previous ones.
Example:

orthogonal <- function(x){
        x <- cbind(1, x)
        nc <- ncol(x)
        res <- matrix(NA, nrow(x), nc - 1)
        res[, 1] <- x[, 2]
        if(nc > 2){
                for(j in 3:nc)
                        res[, j - 1] <- lm.fit(x[, 1:(j - 1)], x[, j])$residuals
        }
        res
}

set.seed(1)
X <- matrix(1:10, ncol=1)
X <- cbind(X, X + rnorm(10), X + rnorm(10))
cor(X)
          [,1]      [,2]      [,3]
[1,] 1.0000000 0.9726364 0.9485793
[2,] 0.9726364 1.0000000 0.8917848
[3,] 0.9485793 0.8917848 1.0000000

Y <- orthogonal(X)
cor(Y)
              [,1]          [,2]          [,3]
[1,]  1.000000e+00  2.804232e-17 -3.758236e-17
[2,]  2.804232e-17  1.000000e+00 -1.492894e-17
[3,] -3.758236e-17 -1.492894e-17  1.000000e+00

This works but I would use a Gram-Schmidt algorithm.

Rui Barradas


--
View this message in context: 
http://r.789695.n4.nabble.com/Generation-of-correlated-variables-tp4475799p4476257.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to