Читать книгу mixOmics для гуманитариев - Денис Владимирович Соломатин - Страница 3
Глава 2. Метод главных компонент (PCA)
ОглавлениеЗададимся следующим вопросом: как определить основные источники различий в имеющихся данных, а после этого выяснить, соответствуют ли такие источники объективным условиям педагогического эксперимента или они образовались в результате предвзятости экспериментаторов? Попутно хотелось бы визуализировать основные тенденции и закономерности изменения значений между образцами, в частности, естественного характера, в соответствии с известными условиями педагогического наблюдения.
Так, например, исходные данные для анализа могут содержать таблицу с n рядами и p столбцами, соответствующими уровню успеваемости p студентов, измеренных на n курсах. Чтобы проиллюстрировать PCA, фокусируемся на уровнях успеваемости по темам, описанным в таблице данных My_table, сохранённой ранее.
Цель PCA заключается в том, чтобы уменьшить размерность данных, сохраняя при этом как можно больше информации, насколько это возможно. «Информация» здесь обусловлена дисперсией. Идея заключается в создании попарно несвязанных между собой вспомогательных переменных, называемых главными компонентами (PC), которые являются линейной комбинацией исходных (возможно, коррелирующих между собой) переменных (например, тематика контрольных работ и так далее).
Уменьшение размерности достигается за счет отображения исходных данных в пространство, порождаемое главными компонентами (PC). На практике это означает, что каждому образцу присваивается координата по каждому новому измерению PC – эта координата рассчитывается как линейная комбинация исходных переменных, с некоторыми весовыми коэффициентами. Вес каждой из исходных переменных хранится в так называемых векторах нагрузки, связанных с каждым образцом. Размер данных уменьшается за счет проецирования данных в подпространство меньшей размерности, порождаемое PC, при одновременном охвате крупнейших источников различий между образцами.
Главные компоненты получены таким образом, чтобы их дисперсия была максимальной. С этой целью вычисляются собственные векторы и собственные значения матрицы дисперсии-ковариации, часто с помощью алгоритмов линейного разложения значения, когда количество переменных достаточно велико. Данные, как правило, центруют (опцией center = TRUE), а иногда и масштабируют (scale = TRUE) при вызове метода. Масштабирование рекомендуется применять в том случае, если дисперсия неоднородна по переменным.
Первая главная компонента (PC1) определяется линейной комбинацией исходных переменных, что объясняет наибольшее количество вариаций. Вторая главная компонента (PC2) затем определяется как линейное сочетание исходных переменных, на которые приходится наибольшее количество оставшегося объема вариаций ортогонального (несвязанного) с первым компонентом. Последующие компоненты определяются также для других размерностей PCA. Таким образом, пользователь должен сообщить, сколько информации объясняется первыми ПК, поскольку они используются для графического представления выходов PCA.
Сначала загружаем данные. Чтобы загрузить свои собственные данные можно воспользоваться следующей командой:
My_result.pca <– pca(X) # 1 Запуск выбранного метода анализа
plotIndiv(My_result.pca) # 2 Визуальное представление образцов
plotVar(My_result.pca) # 3 Визуальное представление переменных
Если запустить PCA этим минимальным кодом, то будут использоваться следующие значения по умолчанию:
1. ncomp = 2: лишь первые две главные компоненты рассчитываются и используются при построении диаграмм;
2. center = TRUE: данные отцентрованы (среднее значение равно 0);
3. scale = FALSE: данные не масштабируются. Если установить scale = TRUE, то алгоритм стандартизирует каждую переменную (дисперсия станет равной 1).
Другие параметры также могут быть настроены дополнительно, с полным списком настроек можно ознакомиться вызвав ?pca.
В примере, показанном выше, две пары тем не являются значительно отличающимися визуально, поэтому конкретные образцы должны быть дополнительно исследованы, тогда участок корреляционного круга, содержащий много переменных, можно будет легко интерпретировать. Ниже будет показано, как улучшить полученные диаграммы, чтобы облегчить интерпретацию результатов.
Диаграммы можно настроить с помощью многочисленных опций в plotIndiv и plotVar. Даже если PCA не принимает во внимание какую-либо информацию об известном членстве в группе каждой выборки, можно включить такую информацию в выборку для визуализации любого «естественного» кластера данных, который может быть обусловлен педагогической спецификой и условиями отбора группы.
Так, например, следующая команда включает информацию о классе в группах выборки аргументом группирования:
plotIndiv(My_result.pca, group = My_table$Класс,
legend = TRUE)
Кроме того, два фактора могут отображаться с использованием как цветов (аргумент group), так и символов (аргумент pch). Например, отобразим класс и оценки, полученные по второй теме, изменив при этом название и легенду диаграммы:
plotIndiv(My_result.pca, ind.names = FALSE,
group = My_table$'Класс',
pch = as.factor(My_table$'Тема2'),
legend = TRUE, title = 'Успеваемость по второй теме',
legend.title = 'Класс', legend.title.pch = 'Оценка')
Путем добавления информации, связанной с классом и оценкой появляется возможность увидеть кластер наблюдений успеваемости близких к эталонному образцу (зелёный ромб в левом нижнем углу), в то время как образцы с низкой успеваемостью (синие треугольники) оказались сгруппированы отдельно, но явно обнаруживается эффект разделения обучающихся на классы.
Чтобы отобразить результаты на других компонентах, можно изменить аргумент comp при условии, что было запрошено достаточно компонент для расчета. Приведём второй пример PCA с тремя компонентами, в котором третий компонент по оси PC3 четко разграничивает обучающихся по классам:
My_result.pca2 <– pca(X, ncomp = 3)
plotIndiv(My_result.pca2,
comp = c(1,3),
legend = TRUE,
group = My_table$'Класс',
legend.title = 'Класс',
title = 'Анализ успеваемости, PCA 1-3')
В связи с этим возникает естественный вопрос об оптимальном количестве главных компонент. С другой стороны, важную роль в дисперсионном анализе (ANOVA) играет объясненная дисперсия, пропорционально характеризующая долю общего числа образцов, охватываемую той или иной главной компонентой. Объяснённая дисперсия может быть представлена наглядно, функцией plot, либо фактическими численными её пропорциями и накапливаемыми пропорциями:
plot(My_result.pca2)
Следующая команда:
My_result.pca2
Выведет собственные значения для первых трех главных компонент:
PC1 PC2 PC3
2.8142478 1.2477355 0.7394421
Пропорциональное отношение объяснённой ими дисперсии:
PC1 PC2 PC3
0.5433274 0.2408917 0.1427590
И совокупное значение оной по мере увеличения числа главных компонент:
PC1 PC2 PC3
0.5433274 0.7842191 0.9269781
К сожалению, не существует строгих правил, руководствуясь которыми можно определить, сколько компонентов должно быть включено в PCA, – это зависит от данных и от уровня шума. Зачастую просто по приведённой выше диаграмме делают вывод о том, что увеличение количества главных компонент в модели не способствует резкому увеличению оставшейся доли объяснённой дисперсии.
С другой стороны, всегда можно посмотреть на переменные коэффициенты в каждом компоненте с векторами нагрузки. Весы нагрузки представлены по убыванию абсолютной величины снизу вверх. Абсолютное значение указывает на важность каждой переменной для определения каждого главной компоненты и представлено длиной каждого прямоугольника:
plotLoadings(My_result.pca)
Можно открыть справку командой ?plotLoadings, чтобы ознакомиться с полным списком аргументов. Следующий пример покажет только две темы, оказавших наибольше влияние на разделение, с указанием их названий и увеличением шрифта на 10%:
plotLoadings(My_result.pca, ndisplay = 2,
name.var = c('первая тема','вторая тема','третья тема','четвертая тема','пятая тема'),
size.name = rel(1.1))
Такое представление будет особенно информативным в случае, когда необходимо выбирать из нескольких переменных. Диаграммы и графики можно отображать интерактивно в 3D, используя стилевую опцию style="3d". Для этого используется пакет rgl, устанавливаемый и подключаемый предварительно: