522 гр., по выбору. Анализ многомерных данных на компьютере
Место и время проведения: ? (4399)
Преподаватель: Голяндина Нина Эдуардовна
Текущий 2022 год
22.12.2022 - Кристина, Иван, Дмитрий рассказывают про кластеризацию (три способа, model-based (EM), k-means/partitioning и hierarchical) + Андрей и Миша про факторный анализ. Все до 21.12 присылают мне классификацию.
15.12.2022 - Кристина, Иван, Дмитрий рассказывают про классификацию до конца, можно уже и посмотреть в сторону кластеризации.
Миша, Андрей - начните делать кластеризацию, model-based (EM) и (k-means/partitioning или hierarchical). Обзор пакетов в R https://cran.r-project.org/web/views/Cluster.html
07.12.2022 - Кристина, Иван, Дмитрий рассказывают про начало классификации.
Миша, Андрей - классификация до конца.
01.12.2022 - Рассказы про АГК. Кристина, Иван, Дмитрий рассказывают про АГК на своих выбранных данных, пакет любой.
Миша, Андрей - начните делать классификацию.
24.11.2022 - Рассказы про АГК. Кристина, Иван, Дмитрий рассказывают про АГК сначала на учебных данных, а потом на своих выбранных данных. Дмитрий - prcomp() и princomp() [built-in R stats package], Кристина - dudi.pca() [ade4 package], Иван - PCA() [FactoMineR].
Миша, Андрей - посмотрите, что умеют acp() из amap package и пакет pcaMethods.
17.11.2022 - Михаил, Андрей - рассказы про АГК.
10.11.2022 - Закончили рассказ про регрессию (анализ outliers). Теперь все должны прислать свои работы до 10.11.2022, включая регрессию (обработки с комментариями). 10.11.2022 - завершаем прослушивание рассказов про регрессию.
03.11.2022 - Закончили рассказ про регрессию (анализ outliers). Теперь все должны прислать свои работы до 10.11.2022, включая регрессию (обработки с комментариями). 10.11.2022 - завершаем прослушивание рассказов про регрессию.
27.10.2022 - Все 4 человека продолжают показывать результаты первых трех блоков. Продолжение рассказа про регрессию.
20.10.2022 - Все 4 человека продолжают показывать результаты первых трех блоков. Продолжение рассказа про регрессию.
13.10.2022 - Все 4 человека показывают результаты первичного анализа данных для своих наборов данных. Пример в Rmarkdown, вопросы можно задавайти Михаилу и Андрею. Пример (черновой) анализа данных Михаила poverty.rar Однако важно (!): анализ данных имеет свою логику, зависящую от данных. Поэтому у каждого должен быть свой анализ данных, а не повтор этого для других данных. Также улучшайте код, ищите новые функции.
Начало рассказа про регрессию.
06.10.2022 - Рассказ о том, как делается первичный анализ данных, вплоть до регрессии.
Информация 2021 (первые занятия)
18.11.2021 Регрессия от Юли, Полины, Ани.
АГК от Полины, Егора, Владимира.
Информация для всех: Варианты пакетов для АГК перечислены здесь и более свежий и подробный вариант здесь.
Выкладываю архив с примерами простых данных. Можете выбрать любой пакет для АГК (их 5, см. вторую ссылку) и разные данные из архива, согласуйте между собой. Если что-то непонятно, спрашивайте. Нужно разобраться в пакетах и параметрах функций на том уровне, чтобы повторить то, что было на лекции в распечатке. Также, описание порядка действий приведено в файле PC.TXT в архиве. Про используемую для PCA функцию нужно постараться понять, что означают там параметры, и из чего состоит объект, который они возвращают (в терминах и обозначениях лекций).
Егор: prcomp() and princomp() [built-in R stats package], Владимир: PCA() [FactoMineR package], Полина: dudi.pca() [ade4 package].
11.11.2021 Все остальные показывают задания по регрессии.
04.11.2021 Егор и Владимир показывают задание по регрессии.
28.10.2021 Рассказываю про множественную линейную регрессию.
21.10.2021 Задание 4 (корреляции).
14.10.2021 Задание 2 и 3 (распределения и сравнение распределений).
07.10.2021 - Все (командой либо индивидуально) показывают результаты первичного анализа данных (задание 1) для выбранного набора данных. Пример в Rmarkdown. Вопросы по коду и смыслу можно задавать представителям статмода, их задача - все объяснить (нормальный вариант для первого задания - статмод объясняет, а остальные делают и показывают). Код не очень хороший, используйте силу гугла и stackoverflow. Например, для pair гораздо лучше подходит ggpairs. Смотреть на графики по соответствию тому или иному распределению удобно так:
library(fitdistrplus) fit.exp <- fitdist(x, “exp”) plot(fit.exp)
Информация 2020
03.12.2020 - Каждый на своих (по выбору) данных готовит начало задания по классификации (От всех жду работ по регрессии и АГК.) Пример классификации на R. Cделайте для своих данных что-то аналогичное до того момента, до которого сможете разобраться (предполагается, до ROC/AUC сможете сделать).
Классификация включает в себя lda, qda, cross-validation, визуализацию. (Можете посмотреть на другие методы классификации, которые частично будут в след. семестре, здесь https://github.com/kabacoff/RiA2/blob/master/Ch17%20Classification.R)
Кросс-проверка (leave-one-out CV) делается так: по очереди каждый индивид удаляется из данных, строится правило классификации без него, а потом это правило применяется к удаленному индивиду. Получаем классификацию для каждого индивида, но результат честный, без переподгонки. Для случая небольших выборок этот способ спасает, так как разбиение на тренировочную и тестовую выборки дает очень неустойчивый результат.
#LDA library(MASS) iris.train <- iris iris.lda <- lda(iris.train[,1:4], iris.train[,5]) iris.ldap <- predict(iris.lda, iris.train[,1:4])$class table(iris.ldap, iris.train[,5]) #classification quality ris.lda <- lda(iris.train[,1:4], iris.train[,5], CV = TRUE) table(iris.lda$class, iris.train[,5]) #leave-one-out cross-validation #LDA, out-of-sample iris.train <- iris[seq(1,nrow(iris),5),] iris.unknown <- iris[-seq(1,nrow(iris),5),] iris.lda <- lda(iris.train[,1:4], iris.train[,5]) iris.ldap <- predict(iris.lda, iris.unknown[,1:4])$class ct <- table(iris.ldap, iris.unknown[,5]) diag(prop.table(ct, 1)) # Exploratory Graph for LDA or QDA for each pair of variables library(klaR) partimat(Sp ~ ., Iris, method=“lda”)
26.11.2020 - По-прежнему, все команды делают (переделывают) и показывают задание по АГК (по своим данным), а каждый отдельно делает по данным, выданным в рамках курса по МАД и присылает. (От всех жду работ по регрессии.)
19.11.2020 - Все команды делают и показывают задание по АГК (по своим данным), а каждый отдельно делает по данным, выданным в рамках курса по МАД и присылает.
12.11.2020 - Все команды делают и показывают задание по регрессии (см. пример ниже).
05.11.2020 - Две оставшиеся команды показывают результаты третьего задания (О мерах зависимостей) для выбранного набора данных. Все заранее присылают мне первые три задания. Пример на R с линейной регрессией.
29.10.2020 - Все (4 команды) показывают результаты третьего задания (О мерах зависимостей) для выбранного набора данных. Нужно прислать доделанной второе задание (и первое команде 4).
22.10.2020 - Все (4 команды) показывают результаты второго задания (О виде распределений и о сравнении распределений) для выбранного набора данных. Так как до 15.10 ничего не было прислано, то еще раз пишу, что нужно прислать доделанный первичный анализ данных, пока без штрафа, но при дальнейшем игнорировании сроков придется их вводить.
15.10.2020 - Буду рассказывать-показывать я сама. А вам нужно до 15 октября прислать доделанное (и исправленное, если были комментарии 8 октября) первое задание.
08.10.2020 - Все (4 команды) показывают результаты первичного анализа данных для выбранного набора данных. Пример в Rmarkdown, вопросы по коду можно задавать А.И.Коробейникову.
01.10.2020 - Первичный анализ данных.
Про задания¶
Первичный анализ данных¶
- Выбрать данные. Можно взять стандартные из R, а можно найти в интернете какие-нибудь интересные для вас и их загрузить. При этом нужно, чтобы данные соответствовали повторной независимой выборке (данные, меняющиеся во времени, не годятся, так как такая выборка зависимая (будущее зависит от настоящего и прошлого) и, скорее всего, не из одного и того же распределения, т.е. идут изменения во времени).
- Каким-либо образом прочитать данные data; посмотреть на них head(data).
- Разобраться в том, что означают признаки.
- Определить вид признаков (колич., порядковые, качеств.). Для количеств. признаков определить, непрерывные они или дискретные (в том числе, дискретными могут стать непрерывные признаки, которые измерены с плохой точностью). Как вариант, это можно увидеть, посмотрев на частоту моды.
- Если признак порядковый и для него использованы текстовые метки, то проверить, что кодировка текстовых меток соответствует их естественному порядку.
- Построить matrix plot (pairs, таблица с попарными скаттерплотами), его долго разглядывать с точки зрения outliers, неоднородностей, вида распределений, вида зависимостей (линейные/нелинейные) и пр.
- Если есть сильно несимметричные (с хвостом вправо) распределения на положительной полуоси, то прологарифмировать их и снова построить matrix plot - зависимости должны стать более линейными, а распределения более симметричными.
- Если есть outliers, то попробовать объяснить причину (ошибка в данных, особые индивиды) и удалить их, поставив NA на их место; исходные данные не надо портить, скопируйте в новые, а потом уже что-то меняйте.
- Если есть неоднородности (например, видны два облака точек), то объяснить причину (найти категоризующую переменную, объясняющую эту неоднородность).
- В дальнейшем вид matrix plots, распределения признаков и корреляции анализировать отдельно для неоднородных групп, используя factor.
- Можно также посмотреть на descriptive statistics с точки зрения минимумов-максимумов, асимметрии, эксцесса и пр.
О виде распределений и о сравнении распределений¶
- Выберите в данных категоризующую переменную. По ней выборка разбивается на подвыборки (например, случай, когда вы увидели неоднородность при первичном анализе, но необязательно).
- Сначала имеет смысл посмотреть на сравнение сравнение распределений в группах с помощью ящиков с усами (box plot). С помощью ящиков с усами там, где групп больше двух, можно выбрать две из них, которые интересно сравнить с помощью критериев.
- Проверьте, близко ли распределение выбранных признаков к нормальному. Можно использовать различные критерии для проверки этой гипотезы, можно рисовать normal probability plot.
- Сравните группы между собой. Можно сравнить по разным критериям, например, критерий t-test, который умеет обнаруживать разницу в среднем. Непараметрический аналог, с помощью которого можно обнаруживать сдвиг - критерий Манна-Уитни/Вилкоксона.
- Но распределения могут отличаться не только сдвигом. Рассмотрите критерий Колмогорова-Смирнова, который может обнаружить, если распределения отличаются формой.
- Если есть признаки, которые характеризуют одно и то же (например, время, которое человек тратит на сон, и время на работу), то аналогично производится сравнение по t-критерию и по непараметрическим критериям, они называются парными.
Об анализе зависимостей¶
- Вспомните, какие бывают виды зависимостей и чем они измеряются, по каким формулам. Посмотрите на основе matrix plot, какие зависимости у вас в данных. Не забудьте, что при неоднородных данных изучать зависимости имеет смысл только внутри групп по-отдельности.
- Начинать нужно с анализа линейных зависимостей. На основе коэффициента корреляции Пирсона нужно проинтерпретировать значимые зависимости. При наличие в данных пропусков обратите внимание на выбор между casewise and pairwise MD deletion (в чем разница, какие недостатки и достоинства у этих вариантов?).
- Затем можно переходить к ранговым коэффициентам корреляции. Расскажите, при каких условиях коэффициенты корреляции Пирсона и Спирмена примерно равны. Приведите примеры, когда один из них больше другого и наоборот. Сравните результаты на ваших данных. Если при сравнении буду найдены заметные различия в результатах, то попробуйте объяснить причину.
- Проинтерпретируйте найденные корреляции - можно ли сказать, что является причиной, что следствием. Если есть какая-то другая причина, которая влияет одновременно на оба признака (скрытый фактор), то попробуйте убрать его влияние с помощью частных корреляций.
Линейная регрессия¶
- Нужно выбрать, какую переменную вы хотите предсказывать. Вы выбираете признаки, по которым вы будете предсказывать. Делаете линейную регрессию (функция lm).
- Изучаете результат. В частности, значима ли регрессия (т.е. имеет ли смысл ей пользоваться для предсказания). Смотрите на коэффициенты регрессии, их значимость, их интерпретацию.
- Далее есть три проблемы, из-за которых результаты регрессии могут быть неправильными – линейная модель регрессии не соответствует данным, в данных могут быть сильно зависимые «независимые» переменные и также могут быть outliers. Если данные были предварительно хорошо подготовлены, то проблемы с outliers там менее вероятны. Поэтому сначала можно заняться проблемой зависимости. В общем случае, нет строгой рекомендации, в каком порядке нужно решать перечисленные проблемы.
- Надо учесть проблему, которая возникают, если предикторы сильно зависимы. На примере с двумя «независимыми» признаками пишете формулы и показываете, как корреляция между признаками влияет на качество оценок регрессии.
- Пытаетесь уменьшить количество предикторов. Для этого есть информационные критерии AIC, BIC.
- Строите обычную регрессию по выбранному числу признаков. Изучаете остатки (residuals), распределение, Сначала смотрите на нормальность остатков (зачем нужно на это смотреть?), затем можно посмотреть на зависимость Residuals vs Predicted.
- Далее переходите к поиску outliers. Напоминаю, что выброс по отношению к регрессии - это наблюдение, которое влияет на результат (leverage и Cook distance изменяют то, насколько наблюдение влияет).
- Итог: результат линейной регрессии, для которой проверена адекватность модели, значимость, отсутствие outliers, проинтерпретированы коэффициенты регрессии.
- Спрогнозируйте что-нибудь по построенной регрессионной модели. Постройте доверительный и предсказательный интервалы для предсказания.
Анализ главных компонент¶
Провести анализ главных компонент в данном случае означает следующее:
- Посмотреть график собственных чисел, прокомментировать его.
- Проинтерпретировать главные компоненты (их связь с исходными признаками), используя значения собственные вектора, а также двумерные диаграммы факторных весов (в круге).
- Посмотреть на двумерные графики нормированных значений главных компонент (значений факторов), увидеть, есть ли неоднородность в данных и есть ли выделяющиеся наблюдения.
- Проинтерпретировать, в чем состоит неоднородность (если она есть) и чем выделяются выделяющиеся наблюдения.
- Убрать выделяющиеся наблюдения, которые проинтерпретированы как выбросы, и неоднородность и затем провести АГК заново.
Классификация¶
- Разбейте данные на две части, где будете строить классификацию, и где будете ее проверять (train и test). Далее работа идет только на train.
- Посмотрите, как выглядят данные на графике pairs и в плоскости первых двух главных компонент, с раскраской по классам. При необходимости, преобразуйте данные (уберите outliers, прологарифмируйте признаки).
- Проведите классификацию с помощью линейного дискриминантного анализа. Подумайте, какие априорные вероятности вы хотите задать.
- Посмотрите на значимость дискриминации. Посмотрите, как выглядят данные в плоскости первых двух канонических переменных.
- Посмотрите на качество классификации - таблицу ошибок классификации, по данным, по кросс-валидации, по test данным.
- Постройте ROC-кривые, проинтерпретируйте (во множественном числе, так как можно строить на train, а можно - на test).
- Попробуйте применить какой-нибудь другой метод, например, QDA или еще какой-то другой. Постройте для него ROC-кривую, сравните с ROC-кривой для LDA.
Кластерный анализ¶
- Посмотрите, как выглядят данные на графике pairs и в плоскости первых двух главных компонент. При необходимости, преобразуйте данные (уберите outliers, прологарифмируйте признаки).
- Примените метод k-means для разного числа классов. Посмотрите на результат на графике pairs с раскраской.
- Применить метод иерархической кластеризации с разными правилами объединения кластеров. Посмотрите на получившиеся деревья.
- Примените метод разделения смеси нормальных распределений с разными ограничениями на модель (одинаковые ковариационные матрицы, разные, разные диагональные, …). Посмотрите на результат на графике pairs с раскраской и в плоскости первых двух главных компонент.