Si je construis une matrice 2-D entièrement composée de données aléatoires, je m'attendrais à ce que les composants PCA et SVD n'expliquent essentiellement rien.
Au lieu de cela, il semble que la première colonne SVD semble expliquer 75% des données. Comment cela peut-il être? Qu'est-ce que je fais mal?
Voici l'intrigue:
Voici le code R:
set.seed(1)
rm(list=ls())
m <- matrix(runif(10000,min=0,max=25), nrow=100,ncol=100)
svd1 <- svd(m, LINPACK=T)
par(mfrow=c(1,4))
image(t(m)[,nrow(m):1])
plot(svd1$d,cex.lab=2, xlab="SVD Column",ylab="Singluar Value",pch=19)
percentVarianceExplained = svd1$d^2/sum(svd1$d^2) * 100
plot(percentVarianceExplained,ylim=c(0,100),cex.lab=2, xlab="SVD Column",ylab="Percent of variance explained",pch=19)
cumulativeVarianceExplained = cumsum(svd1$d^2/sum(svd1$d^2)) * 100
plot(cumulativeVarianceExplained,ylim=c(0,100),cex.lab=2, xlab="SVD column",ylab="Cumulative percent of variance explained",pch=19)
Mise à jour
Merci @Aaron. Le correctif, comme vous l'avez noté, consistait à ajouter une mise à l'échelle à la matrice afin que les nombres soient centrés autour de 0 (c'est-à-dire que la moyenne est 0).
m <- scale(m, scale=FALSE)
Voici l'image corrigée, montrant pour une matrice avec des données aléatoires, la première colonne SVD est proche de 0, comme prévu.
Réponses:
Le premier PC explique que les variables ne sont pas centrées autour de zéro. La mise à l'échelle en premier ou le centrage de vos variables aléatoires autour de zéro donnera le résultat attendu. Par exemple, l'un ou l'autre:
la source
J'ajouterai une réponse plus visuelle à votre question, en utilisant une comparaison de modèle nulle. La procédure mélange de manière aléatoire les données de chaque colonne pour conserver la variance globale tandis que la covariance entre les variables (colonnes) est perdue. Ceci est effectué plusieurs fois et la distribution résultante des valeurs singulières dans la matrice randomisée est comparée aux valeurs d'origine.
J'utilise
prcomp
au lieu desvd
pour la décomposition matricielle, mais les résultats sont similaires:La comparaison du modèle nul est effectuée sur la matrice centrée ci-dessous:
Ce qui suit est une boîte à moustaches de la matrice permutée avec le quantile à 95% de chaque valeur singulière représentée en trait plein. Les valeurs originales de PCA de
m
sont les points. qui se trouvent tous sous la ligne de 95% - Ainsi, leur amplitude est indiscernable du bruit aléatoire.La même procédure peut être effectuée sur la version non centrée de
m
avec le même résultat - Pas de valeurs singulières significatives:À titre de comparaison, regardons un ensemble de données avec un ensemble de données non aléatoire:
iris
Ici, la 1ère valeur singulière est significative et explique plus de 92% de la variance totale:
la source