Bonjour,

Dans le but de programmer une ACP je me suis inspiré d'un code R écrit par un chercheur dans le domaine de la shape analysis.
Ce que je ne comprends pas c'est qu'après avoir fait une svd (de la matrice à traiter) ce dernier divise les valeurs singulières qu'il obtient par la racine carée du nombre de ligne de la matrice moins 1.
Quelqu'un aurait-il une explication théorique rationalisant cette division svp ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
prcomp1<-function (x, retx = TRUE, center = TRUE, scale. = FALSE, tol = NULL) 
{
    x <- as.matrix(x)
    x <- scale(x, center = center, scale = scale.)
    s <- svd(x, nu = 0, LINPACK=FALSE)
    if (!is.null(tol)) {
        rank <- sum(s$d > (s$d[1] * tol))
        if (rank < ncol(x)) 
            s$v <- s$v[, 1:rank, drop = FALSE]
    }
    s$d <- s$d/sqrt(max(1, nrow(x) - 1))
    dimnames(s$v) <- list(colnames(x), paste("PC", seq(len = ncol(s$v)), 
        sep = ""))
    r <- list(sdev = s$d, rotation = s$v)
    if (retx) 
        r$x <- x %*% s$v
    class(r) <- "prcomp1"
    r
}