Ne pas normaliser les données avant que l'ACP ne donne un rapport de variance mieux expliqué

19

J'ai normalisé mon ensemble de données, puis j'ai exécuté 3 composants PCA pour obtenir de petits ratios de variance expliqués ([0,50, 0,1, 0,05]).

Quand je n'ai pas normalisé mais blanchi mon ensemble de données puis exécuté l'APC à 3 composants, j'ai obtenu des ratios de variance expliqués élevés ([0.86, 0.06,0.01]).

Étant donné que je souhaite conserver autant de données en 3 composants, ne dois-je PAS normaliser les données? D'après ma compréhension, nous devrions toujours normaliser avant l'APC.

En normalisant: mettre la moyenne à 0 et avoir la variance unitaire.


la source
3
Bien qu'il ne soit pas clair de ce que vous entendez par «normaliser» les données (je connais au moins quatre façons standard de le faire dans PCA et probablement il y en a plus), cela ressemble au matériel sur stats.stackexchange.com/questions/53 pourrait être éclairant.
whuber
Salut whubber: Je veux dire normaliser chaque observation à la norme de l'unité
1
Merci. Le terme habituel pour cela est «standardiser». Lorsque vous faites cela, vous effectuez l'ACP sur la base de corrélations: c'est pourquoi je pense que le lien que j'ai fourni pourrait déjà répondre à votre question. Cependant, je ne vois aucune des réponses qui explique réellement pourquoi ou comment vous obtiendrez des résultats différents (peut-être parce que c'est complexe et que l'effet de la normalisation peut être difficile à prévoir).
whuber
1
Le blanchiment avant l'ACP est-il typique? Quel est le but de faire ça?
shadowtalker
2
Si vous travaillez avec des images, par exemple, la norme des images correspond à la luminosité. La forte variance expliquée des données non normalisées signifie que beaucoup de données peuvent être expliquées par des changements de luminosité. Si la luminosité n'est pas importante pour vous, comme elle ne l'est souvent pas dans le traitement d'image, alors vous voudrez faire en sorte que toutes les images soient standard. Même si la variance expliquée de vos composants pca sera plus faible, elle reflète mieux ce qui vous intéresse.
Aaron

Réponses:

37

Dépend de l'objectif de votre analyse. Quelques pratiques courantes, dont certaines sont mentionnées dans le lien de whuber:

  1. La normalisation est généralement effectuée lorsque les variables sur lesquelles l'ACP est effectuée ne sont pas mesurées sur la même échelle. Notez que la standardisation implique d'attribuer une importance égale à toutes les variables.
  2. S'ils ne sont pas mesurés sur la même échelle et que vous choisissez de travailler sur les variables non standardisées, il arrive souvent que chaque PC soit dominé par une seule variable et vous obtenez juste une sorte de classement des variables par leur variance. (L'un des chargements de chaque composant (précoce) sera proche de +1 ou -1.)
  3. Les deux méthodes conduisent souvent à des résultats différents, comme vous l'avez constaté.

Exemple intuitif:

Supposons que vous ayez deux variables: la hauteur d'un arbre et la circonférence du même arbre. Nous convertirons le volume en un facteur: un arbre aura un volume élevé si son volume est supérieur à 20 pieds cubes et un volume faible dans le cas contraire. Nous utiliserons l'ensemble de données d'arbres préchargé dans R.

>data(trees)
>tree.girth<-trees[,1]
>tree.height<-trees[,2]
>tree.vol<-as.factor(ifelse(trees[,3]>20,"high","low"))

Supposons maintenant que la hauteur soit réellement mesurée en miles au lieu de pieds.

>tree.height<-tree.height/5280
>tree<-cbind(tree.height,tree.girth)
>
>#do the PCA
>tree.pca<-princomp(tree)
>summary(tree.pca)
Importance of components:
                      Comp.1       Comp.2
Standard deviation     3.0871086 1.014551e-03
Proportion of Variance 0.9999999 1.080050e-07
Cumulative Proportion  0.9999999 1.000000e+00

La première composante explique près de 100% de la variabilité des données. Les chargements:

> loadings(tree.pca)

Loadings:
            Comp.1 Comp.2
tree.height        -1    
tree.girth   1           

Évaluation graphique:

>biplot(tree.pca,xlabs=tree.vol,col=c("grey","red"))

Biplot de première méthode

Nous voyons que les arbres à volume élevé ont tendance à avoir une circonférence d'arbre élevée, mais les trois hauteurs ne donnent aucune information sur le volume des arbres. C'est probablement faux et la conséquence des deux mesures unitaires différentes.

Nous pourrions utiliser les mêmes unités ou standardiser les variables. Je pense que les deux mèneront à une image plus équilibrée de la variabilité. Bien sûr, dans ce cas, on peut affirmer que les variables devraient avoir la même unité mais ne pas être normalisées, ce qui peut être un argument valable, si nous ne mesurons pas deux choses différentes. (Lorsque nous mesurerions le poids de l'arbre et la circonférence de l'arbre, l'échelle sur laquelle les deux devraient être mesurés n'est plus très claire. Dans ce cas, nous avons un argument clair pour travailler sur les variables normalisées.)

>tree.height<-tree.height*5280
>tree<-cbind(tree.height,tree.girth)
>
>#do the PCA
>tree.pca<-princomp(tree)
> summary(tree.pca)
Importance of components:
                          Comp.1    Comp.2
Standard deviation     6.5088696 2.5407042
Proportion of Variance 0.8677775 0.1322225
Cumulative Proportion  0.8677775 1.0000000
> loadings(tree.pca)

Loadings:
            Comp.1 Comp.2
tree.height -0.956  0.293
tree.girth  -0.293 -0.956

>biplot(tree.pca,xlabs=tree.vol,col=c("grey","red"))

Biplot de deuxième méthode

Nous voyons maintenant que les arbres qui sont grands et qui ont une grande circonférence, ont un volume élevé (coin inférieur gauche), par rapport à une circonférence basse et une faible hauteur pour les arbres à faible volume (coin supérieur droit). Cela a un sens intuitif.

Cependant, si l'on regarde attentivement, on voit que le contraste entre le volume haut / bas est le plus fort dans le sens de la circonférence et non dans le sens de la hauteur. Voyons ce qui se passe quand on standardise:

>tree<-scale(tree,center=F,scale=T)
>tree.pca<-princomp(tree)
> summary(tree.pca)
Importance of components:
                          Comp.1     Comp.2
Standard deviation     0.2275561 0.06779544
Proportion of Variance 0.9184749 0.08152510
Cumulative Proportion  0.9184749 1.00000000
> loadings(tree.pca)

Loadings:
            Comp.1 Comp.2
tree.height  0.203 -0.979
tree.girth   0.979  0.203
>biplot(tree.pca,xlabs=tree.vol,col=c("grey","red"))

Biplot de troisième méthode

En effet, la circonférence explique désormais la majorité de la différence dans les arbres à volume élevé et faible! (La longueur de la flèche dans le biplot indique la variance de la variable d'origine.) Ainsi, même si les choses sont mesurées à la même échelle, la normalisation peut être utile. Une non standardisation peut être recommandée lorsque nous comparons par exemple la longueur de différentes espèces d'arbres car il s'agit exactement de la même mesure.

Matt.135
la source
2
(+1) Très belle réponse, dépassant en fait toutes celles données dans le fil de discussion populaire lié à l'ACP sur la covariance vs la corrélation.
amibe dit Réintégrer Monica le