Я часто использовал для диагностики своих многомерных данных с использованием PCA (опускаются данные с сотнями тысяч переменных и десятками или сотнями выборок). Данные часто приходят из экспериментов с несколькими категориальными независимыми переменными, определяющими некоторые группы, и мне часто приходится проходить через несколько компонентов, прежде чем я смогу найти те, которые показывают разделение между интересующими группами. Я придумала довольно примитивный способ поиска таких различающих компонентов, и мне интересно,
- в какой степени это разумно / оправданно, и
- есть ли лучшие способы достижения того же.
Обратите внимание, что это ознакомительный. Прежде чем убедить кого-либо еще, я хочу убедить себя. Если я вижу, что есть компоненты, которые четко различают группы, представляющие интерес (например, контроль и лечение), даже если они несут ответственность за незначительную часть дисперсии ответов, я доверяю этому больше, чем результат, скажем, от контролируемой машины учусь.
Вот мой подход. Я буду использовать пример данных metabo из pca3d в R.
Идея состоит в том, чтобы оценить, насколько дисперсия каждого компонента может быть объяснена независимой переменной. Для этого я вычисляю простую модель для каждого компонента и использую в качестве метрики, чтобы упорядочить компоненты от «наиболее интересных» до «наименее интересных».
require( pca3d )
# data on metabolic profiles of TB patients and controls
data( metabo )
# first column is the independent variable
pca <- prcomp( metabo[,-1], scale.= T )
# create a model for each component
lm.m <- lm( pca$x ~ metabo[,1] )
lm.s <- summary( lm.m )
lm.r2 <- sapply( lm.s, function( x ) x$r.squared )
plot( lm.r2, type= "l" )
text( 1:length( lm.r2 ), lm.r2, 1:length( lm.r2 ), pos= 3 )
Вот результат. График показывает процент дисперсии каждого компонента, объясняемый независимой переменной в metabo[,1]
.
Мы можем отсортировать компоненты по чтобы узнать, какие из них отображать ; первые три компонента - 2, 1 и 7.order( lm.r2, decreasing= TRUE )
pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )
Вот сюжет:
(Красные и зеленые категории представляют собой две группы субъектов, которые не являются пациентами, и следует ожидать, что их невозможно различить.)
Чтобы переформулировать мои вопросы,
- Имеет ли этот подход смысл для вас? Моя проблема в том, что это слишком похоже на выемку данных. Кроме того, интуитивно я думаю, что, возможно, мне следует повернуть таблицу и спросить, какая часть дисперсии в независимой переменной объясняется каждой переменной? Наконец, я (почти) уверен, что плохо изобретаю колесо, поэтому мой второй вопрос
- есть что-нибудь получше?
Обратите внимание, что я не хочу переключаться на частичные наименьшие квадраты или что-то подобное на этом этапе; Я просто хочу диагностировать PCA в контексте моей классификации.
to find out what share of the overall variance in the data matrix is explained by a given classification
Если вы хотите знать это, вам не нужен PCA. Просто вычислите отношение суммы квадратов между группами к общей сумме квадратов:(SStotal-SSwithin)/SStotal
где SSwithin - это объединенная сумма квадратов внутри группы.Is there anything better?
.Ответы:
Ответ на ваш вопрос № 1 - да, ваше решение сводится к углублению данных. Ответ на ваш вопрос № 2 - да, в литературе есть лучшие методы.
Вы выполняете анализ, который напоминает регрессию главных компонентов, за исключением того, что вы поменяли местами независимые и зависимые переменные, что привело к большому многомерному (в отличие от множественного ) регрессионному анализу. Многофакторная регрессия требует, чтобы размер вашей выборки был больше, чем количество зависимых переменных, - требование, которое вы тщательно нарушаете в своем примере.
Если вы действительно хотите запустить PCA для своих данных, а затем использовать многомерную регрессию, вы должны использовать соответствующий метод. Например, посмотрите на MRCE и связанные с ним методы [1].
Однако, несмотря на несколько удивительных комментариев, которые вы сделали, все, что вы представили в своем анализе в настоящее время, говорит о том, что ваша конечная цель - определить взаимосвязи между большим набором непрерывных переменных (metabo [, - 1]) и одной категориальной переменной (metabo [ , 1]). PCA - плохой способ сделать это. Существует два основных класса решений этой проблемы в многомерном случае: во-первых, решения, которые предполагают разреженность, и решения, которые принимают структуру фактора.
Решения на основе разреженности обычно предполагают, что только очень небольшая часть переменных на самом деле связана с интересующей категориальной переменной, и пытаются найти это небольшое подмножество; например, см. DALASS [2]. Методы, основанные на факторной структуре, предполагают, что ваши дискриминаторные переменные являются проявлениями скрытых скрытых переменных, имеющих истинную связь с категориальной переменной. Примером этого класса методов является DLDA [3].
Обратите внимание, что я не обязательно рекомендую любые методы, которые я упомянул для ваших данных; Вы должны тщательно обдумать свои цели и априорное знание проблемы при выборе подходящего метода.
[1] Ротман, Левина, Чжу (2010). Разреженная многомерная регрессия с оценкой ковариации. Журнал вычислительной и графической статистики, том 19, номер 4, страницы 947–962.
[2] Николай Т. Трендафилов, Ян Т. Джоллифф, DALASS: Выбор переменных в дискриминантном анализе с помощью LASSO, Вычислительная статистика и анализ данных, том 51, выпуск 8, 1 мая 2007 года, страницы 3718-3736.
[3] Yu, Yang (2001). Прямой алгоритм LDA для многомерных данных с применением распознавания лиц. Распознавание образов 34, 2067-2070.
источник
@ahfoss уже указал вам на LDA как классификационный аналог PCA. На самом деле эти два метода связаны друг с другом, а также с PLS:
PLS можно рассматривать как регуляризацию, подобную LASSO, а также доступен разреженный PLS (хотя я не использовал его: мои данные больше подходят для обычного PLS, который не предполагает разреженности). Хорошее обсуждение различных методов регуляризации см., Например, « Элементы статистического обучения» .
Практическое замечание: если вы работаете в R, у меня есть пакет в разработке, который предоставляет модели PLS-LDA и PCA-LDA. Дайте мне знать, если вы хотите попробовать.
Чтобы избежать углубления данных, вам необходимо проверить окончательную модель (= измерить ее производительность) с помощью независимых данных.
Независимое здесь означает , что в этом случае (пациент?) Не вносят вклад в модели фитинга в любом пути. Особенно,
Поскольку у вас есть только несколько случаев, уместной будет стратегия повторной выборки. В этой ситуации, вероятно, лучше исправить любые гиперпараметры (например, количество ПК или скрытых переменных PLS, или привязку LASSO) с помощью внешних знаний, чтобы избежать второго, внутреннего разделения ваших обучающих данных для оптимизации гиперпараметра.
источник
pls::plsr
для PLS (который позволяет выбирать из разных алгоритмов). И у меня есть куча функций пост-обработки, например, для перелистывания и поворота модели, что иногда полезно для интерпретации.