Залежить від мети вашого аналізу. Деякі поширені практики, деякі з яких згадуються у посиланні whuber:
- Стандартизація зазвичай проводиться, коли змінні, на яких виконується PCA, не вимірюються в одній шкалі. Зауважимо, що стандартизація передбачає надання однакового значення всім змінним.
- Якщо вони не вимірюються в одній шкалі і ви вирішили працювати над нестандартизованими змінними, часто буває так, що на кожному ПК переважає одна змінна, і ви просто отримуєте своєрідне впорядкування змінних за їхньою дисперсією. (Одне з завантажень кожного (раннього) компонента буде близьким до +1 або -1.)
- Ці два методи часто призводять до різних результатів.
Інтуїтивний приклад:
Припустимо, у вас є дві змінні: висота дерева та обхват одного дерева. Ми перетворимо об'єм у коефіцієнт: дерево буде великим за обсягом, якщо його обсяг перевищує 20 кубічних футів, а в іншому - низьким. Ми будемо використовувати набір даних дерев, який поставляється попередньо завантаженим у Р.
>data(trees)
>tree.girth<-trees[,1]
>tree.height<-trees[,2]
>tree.vol<-as.factor(ifelse(trees[,3]>20,"high","low"))
Тепер припустимо, що висоту насправді вимірювали в милях замість ніг.
>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
Перший компонент пояснює майже 100% мінливості даних. Навантаження:
> loadings(tree.pca)
Loadings:
Comp.1 Comp.2
tree.height -1
tree.girth 1
Графічна оцінка:
>biplot(tree.pca,xlabs=tree.vol,col=c("grey","red"))
Ми бачимо, що дерева, що мають високий об'єм, мають тенденцію до високого обхвату дерев, але три висоти не дають жодної інформації про об'єм дерева. Ймовірно, це неправильно і наслідок двох різних одиничних заходів.
Ми могли б використовувати ті самі одиниці, або ми могли б стандартизувати змінні. Я очікую, що обидва призведуть до більш збалансованої картини мінливості. Звичайно, у цьому випадку можна стверджувати, що змінні повинні мати однакову одиницю, але не бути стандартизованою, що може бути коректним аргументом, якби не те, що ми вимірюємо дві різні речі. (Коли ми вимірювали б вагу дерева та обхват дерева, шкала, за якою слід виміряти обидва, вже не дуже чітка. У цьому випадку ми маємо чіткий аргумент для роботи над стандартизованими змінними.)
>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"))
Тепер ми бачимо, що високі дерева та велика обхват дерев мають велику густину (нижній лівий кут), порівняно з низькою обхваткою та низькою висотою для дерев із низькою гучністю (верхній правий кут). Це інтуїтивно має сенс.
Однак, якщо уважно спостерігати, ми бачимо, що контраст між великим / низьким рівнем гучності є найбільш сильним у напрямку обхвату, а не у напрямку висоти. Подивимося, що станеться, коли ми стандартизуємо:
>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"))
Дійсно, обхват зараз пояснює більшість різниць у деревах високого та низького обсягу! (Довжина стрілки в біплоті вказує на відмінність у вихідній змінній.) Тож навіть якщо речі вимірюються в одній шкалі, стандартизація може бути корисною. Не можна рекомендувати стандартизацію, коли ми, наприклад, порівнюємо довжину різних порід дерев, тому що це точно однаковий показник.