В этом примере показано, как выполнить взвешенный анализ главных компонентов и интерпретировать результаты.
Загрузите образцы данных. Данные включают рейтинги по 9 различным показателям качества жизни в 329 городах США. Это климат, жилье, здравоохранение, преступность, транспорт, образование, искусство, отдых и экономика. Для каждой категории более высокая оценка лучше. Например, более высокий рейтинг преступности означает более низкий уровень преступности.
Отображение categories переменная.
load cities
categoriescategories = climate housing health crime transportation education arts recreation economics
В общей сложности, cities набор данных содержит три переменные:
categories, символьная матрица, содержащая имена индексов
names, символьная матрица, содержащая 329 названий городов
ratings, матрица данных с 329 строками и 9 столбцами
Создайте рамочный график для просмотра распределения ratings данные.
figure() boxplot(ratings,'Orientation','horizontal','Labels',categories)

В рейтингах искусств и жилья больше изменчивости, чем в рейтингах преступности и климата.
Проверьте попарную корреляцию между переменными.
C = corr(ratings,ratings);
Корреляция между некоторыми переменными достигает 0,85. Анализ главных компонентов создает независимые новые переменные, которые являются линейными комбинациями исходных переменных.
Когда все переменные находятся в одной единице, целесообразно вычислять основные компоненты для необработанных данных. Когда переменные находятся в разных единицах или разница в дисперсии различных столбцов существенна (как в этом случае), масштабирование данных или использование весов часто предпочтительнее.
Выполните анализ основного компонента, используя в качестве весов обратные отклонения оценок.
w = 1./var(ratings); [wcoeff,score,latent,tsquared,explained] = pca(ratings,... 'VariableWeights',w);
Или эквивалентно:
[wcoeff,score,latent,tsquared,explained] = pca(ratings,... 'VariableWeights','variance');
В следующих разделах разъясняются пять выходов: pca.
Первый выход, wcoeff, содержит коэффициенты главных компонентов.
Первыми тремя векторами коэффициентов основных компонентов являются:
c3 = wcoeff(:,1:3)
c3 = wcoeff(:,1:3)
c3 =
1.0e+03 *
0.0249 -0.0263 -0.0834
0.8504 -0.5978 -0.4965
0.4616 0.3004 -0.0073
0.1005 -0.1269 0.0661
0.5096 0.2606 0.2124
0.0883 0.1551 0.0737
2.1496 0.9043 -0.1229
0.2649 -0.3106 -0.0411
0.1469 -0.5111 0.6586Эти коэффициенты взвешиваются, следовательно, матрица коэффициентов не является ортонормированной.
Преобразуйте коэффициенты так, чтобы они были ортонормированными.
coefforth = inv(diag(std(ratings)))*wcoeff;
Обратите внимание, что при использовании вектора весов w, во время проведения pca, то
coefforth = diag(sqrt(w))*wcoeff;
Преобразованные коэффициенты теперь являются ортонормированными.
I = coefforth'*coefforth; I(1:3,1:3)
ans =
1.0000 -0.0000 -0.0000
-0.0000 1.0000 -0.0000
-0.0000 -0.0000 1.0000Второй выход, scoreсодержит координаты исходных данных в новой системе координат, определенной главными компонентами. score матрица имеет тот же размер, что и матрица входных данных. Оценки компонентов можно также получить с помощью ортонормированных коэффициентов и стандартизированных оценок следующим образом.
cscores = zscore(ratings)*coefforth;
cscores и score являются идентичными матрицами.
Создание графика первых двух столбцов score.
figure() plot(score(:,1),score(:,2),'+') xlabel('1st Principal Component') ylabel('2nd Principal Component')

На этом графике показаны центрированные и масштабированные данные оценок, спроецированные на первые два основных компонента. pca вычисляет баллы, чтобы иметь среднее значение ноль.
Обратите внимание на внешние точки в правой части графика. Можно графически идентифицировать эти точки следующим образом.
gname
Наведите курсор на график и щелкните один раз рядом с самыми правыми семью точками. Точки помечаются по номерам строк, как показано на следующем рисунке.

После маркировки точек нажмите клавишу Return.
Создайте индексную переменную, содержащую номера строк всех выбранных городов, и получите имена городов.
metro = [43 65 179 213 234 270 314]; names(metro,:)
ans = Boston, MA Chicago, IL Los Angeles, Long Beach, CA New York, NY Philadelphia, PA-NJ San Francisco, CA Washington, DC-MD-VA
Эти помеченные города являются одними из крупнейших населенных пунктов в Соединенных Штатах, и они кажутся более экстремальными, чем остальные данные.
Третий выход, latent, - вектор, содержащий дисперсию, объясненную соответствующей главной составляющей. Каждый столбец score имеет дисперсию выборки, равную соответствующей строке latent.
latent
latent =
3.4083
1.2140
1.1415
0.9209
0.7533
0.6306
0.4930
0.3180
0.1204Пятый выход, explained, - вектор, содержащий процентную дисперсию, объясненную соответствующей главной составляющей.
explained
explained =
37.8699
13.4886
12.6831
10.2324
8.3698
7.0062
5.4783
3.5338
1.3378Постройте график распределения процентов изменчивости, объясняемый каждым основным компонентом.
figure() pareto(explained) xlabel('Principal Component') ylabel('Variance Explained (%)')

Этот scree-график показывает только первые семь (вместо девяти) компонентов, которые объясняют 95% общей дисперсии. Единственным четким разрывом в величине дисперсии, учитываемой каждым компонентом, является разрыв между первым и вторым компонентами. Однако первый компонент сам по себе объясняет менее 40% дисперсии, поэтому может потребоваться больше компонентов. Можно видеть, что первые три основных компонента объясняют примерно две трети общей изменчивости стандартизированных рейтингов, так что это может быть разумным способом уменьшения размеров.
Последний вывод из pca является tsquared, что является T2 Хотеллинга, статистической мерой многомерного расстояния каждого наблюдения от центра набора данных. Это аналитический способ найти самые экстремальные точки в данных.
[st2,index] = sort(tsquared,'descend'); % sort in descending order extreme = index(1); names(extreme,:)
ans = New York, NY
Рейтинги Нью-Йорка наиболее далеки от среднего города США.
Визуализируйте как ортонормированные коэффициенты главной компоненты для каждой переменной, так и оценки главной компоненты для каждого наблюдения на одном графике.
biplot(coefforth(:,1:2),'Scores',score(:,1:2),'Varlabels',categories); axis([-.26 0.6 -.51 .51]);

Все девять переменных представлены в этом двумерном графике вектором, и направление и длина вектора указывают, как каждая переменная вносит вклад в два главных компонента графика. Например, первый главный компонент на горизонтальной оси имеет положительные коэффициенты для всех девяти переменных. Именно поэтому девять векторов направлены в правую половину графика. Наибольшими коэффициентами в первом главном компоненте являются третий и седьмой элементы, соответствующие переменным. health и arts.
Второй главный компонент на вертикальной оси имеет положительные коэффициенты для переменных education, health, arts, и transportationи отрицательные коэффициенты для остальных пяти переменных. Это указывает на то, что второй компонент различает города, которые имеют высокие значения для первого набора переменных и низкие для второго, и города, которые имеют противоположные значения.
Метки переменных на этом рисунке несколько переполнены. Вы можете либо исключить VarLabels аргумент пары «имя-значение» при создании графика или выберите и перетащите некоторые метки в лучшее положение с помощью инструмента «Редактировать график» на панели инструментов окна рисунка.
Этот 2-й bi-сюжет также включает пункт для каждого из этих 329 наблюдений с координатами, указывающими на счет каждого наблюдения для двух основных компонентов в сюжете. Например, точки вблизи левого края этого графика имеют самые низкие оценки для первого главного компонента. Точки масштабируются относительно максимального значения оценки и максимальной длины коэффициента, так что из графика можно определить только их относительные местоположения.
Можно определить элементы на графике, выбрав Инструменты > Курсор данных в окне рисунка. Щелкнув переменную (вектор), можно прочитать метку переменной и коэффициенты для каждого главного компонента. Щелкнув на наблюдении (точке), можно прочитать имя наблюдения и оценки для каждого основного компонента. Можно указать'Obslabels',names для отображения имен наблюдений вместо номеров наблюдений в окне курсора данных.
Можно также создать двойной график в трех измерениях.
figure() biplot(coefforth(:,1:3),'Scores',score(:,1:3),'Obslabels',names); axis([-.26 0.8 -.51 .51 -.61 .81]); view([30 40]);

Этот график полезен, если первые две основные координаты недостаточно объясняют дисперсию в данных. Чтобы повернуть фигуру под разными углами, выберите команду Инструменты >Rotate 3D.
biplot | boxplot | pca | pcacov | pcares | ppca