Анализ данных в среде R. Анализ данных и моделирование взаимосвязи в R Продолжение доступно только участникам

Анализ данных в среде R

Институт вычислительной математики и информационных технологий, кафедра анализа данных и исследования операций


Направление
: 01.03.02 "Прикладная математика и информатика. Системное программирование" (бакалавриат, 3 курс)

Дисциплина : "Анализ данных в среде R"

Учебный план : "Очное обучение, 2017 г."

Количество часов: 90 (в том числе: лекции - 18, лабораторные занятия – 36, самостоятельная работа - 36); форма контроля - зачёт.

Направление : 38.03.05 "Бизнес информатика" (бакалавриат, 4 курс)

Дисциплина : "Анализ данных"

Учебный план : "Очное обучение, 2018 г."

Количество часов: 78 (в том числе: лекции - 18, лабораторные занятия – 36, самостоятельная работа - 24); форма контроля - зачёт.


Ключевые слова
: Data Mining, Machine Learning, regression, classification, clusterization, support vector, SVM, artificial neutron, neural network, recommendation system, анализ данных, машинное обучение, модель, выборка, переменная отклика, обучение выборки, переобучение выборки, обучение с учителем, обучение без учителя, пакет R, язык программирования R, статистика, случайная величина, с.в., закон распределения, нормальное распределение, выборка, статистика, метод максимального правдоподобия, распределение Хи-квадрат, распределение Стьюдента, распределение Фишера, гипотеза, область принятия гипотезы, уровень значимости, ошибки первого и второго рода, сравнение выборок, критерии согласия, таблица сопряженности признаков, корреляция, регрессия, линейная регрессия, нелинейная регрессия, фактор, предиктор, однофакторная регрессия, множественная регрессия, классификация, логистическая регрессия, однофакторный дискриминантный анализ, Байесовский подход, наивный Байес, метод опорных векторов, разделяющая гиперплоскость, деревья решений, нейронная сеть, нейрон, функция активации, рекомендательная система, кластеризация, функционал качества.

Темы : 1. Cреда разработки R: сведения из истории. установка и запуск пакета. 2. Программируем в R. первые шаги. 3. Построение графиков в среде R. 4. Ввод данных и работа с файлами в среде R. 4.1. Работа с одномерными массивами данных. 4.2. Работа с матрицами и таблицами данных. 5. Проверка статистических гипотез в среде R. 5.1. Проверка гипотезы о законе распределения вероятностей случайной величины (критерий Хи-квадрат Пирсона). 5.2. Проверка гипотезы о независимости признаков с качественной группировкой (критерий Хи-квадрат Пирсона). 5.3. Проверка гипотезы о равенстве математических ожиданий нормальных генеральных совокупностей (критерий Стьюдента). 5.4. Проверка гипотезы о равенстве дисперсий нормальных генеральных совокупностей (критерий Фишера). 6. Задача построения модели однофакторной линейной регрессии. Прогнозирование. 7. Задача многожественной линейной регрессии. 7.1. Задача однофакторной линейной регрессии как частный случай множе-ственной регрессии. 7.2. Исследование зависимости переменной отклика от фактора в регресси-онной модели. 8. Задача классификации, подходы к её решению. 8.1. Логистическая регрессия. 8.2. Линейный дискриминантный анализ. 8.3. Деревья решений - принцип "разделяй и властвуй" ("divide and con-quer"). 9. Нейронные сети (neural networks) и их применение в машинном обучении. 10. Опорные векторы, метод опорных векторов ("support vector machines", SVM) в машинном обучении. 11. Рекомендательные системы ("recommendation system"), их назначение, построение, применение. 12. Специальные задачи машинного обучения.


Дата начала эксплуатации : 1 сентября 2014 года
  • Миссаров Мукадас Дмухтасибович, зав. кафедрой анализа данных и исследова-ния операций КФУ, д.ф.-м.н., профессор, email: [email protected]
  • Кашина Ольга Андреевна, к.ф.-м.н., доцент кафедры анализа данных и исследования операций, email: [email protected]

Введение

Прежде всего, давайте обсудим терминологию. Речь идёт об области, которая в западной литературе называется Data Mining, а на русский язык чаще переводится как «анализ данных». Термин не совсем удачный, поскольку слово «анализ» в математике достаточно привычно, имеет устоявшееся значение и входит в название многих классических разделов: математический анализ, функциональный анализ, выпуклый анализ, нестандартный анализ, многомерный комплексный анализ, дискретный анализ, стохастический анализ, квантовый анализ и т.д. Во всех перечисленных областях науки изучается математический аппарат, который базируется на некоторых фундаментальных результатах и позволяет решать задачи из этих областей. В анализе данных ситуация гораздо сложнее. Это, прежде всего, прикладная наука, в которой математического аппарата нет, в том смысле, что нет конечного набора базовых фактов, из которых следует, как решать задачи. Многие задачи «индивидуальны», и сейчас появляются всё новые и новые классы задач, под которые необходимо разрабатывать математический аппарат. Тут ещё большую роль играет тот факт, что анализ данных относительно новое направление в науке.

Далее, надо пояснить, что такое «анализ данных». Я назвал это «областью», но областью чего? Здесь начинается самое интересное, поскольку это не только область науки. Настоящий аналитик решает, прежде всего, прикладные задачи и нацелен на практику. Кроме того, анализировать данные приходится в экономике, биологии, социологии, психологии и т.д. Решение

новых задач, как я уже сказал, требует изобретения новых техник (это не всегда теории, но и приёмы, способы и т.п.), поэтому некоторые говорят, что анализ данных это также искусство и ремесло.

В прикладных областях самое важное – это практика! Невозможно представить себе хирурга, который не сделал ни одной операции. Собственно, это и не хирург вовсе. Также не может аналитик данных обойтись без решения реальных прикладных задач. Чем больше таких задач вы самостоятельно решите, тем более квалифицированными специалистами вы станете.

Во-первых, анализ данных это практика, практика и ещё раз практика. Надо решать реальные задачи, много, из разных областей. Поскольку, например, классификация сигналов и текстов две совершенно разные области. Специалисты, которые с лёгкостью построят алгоритм диагностики двигателя на основе сигналов датчиков, возможно, не смогут сделать простейший спам-фильтр для электронных писем. Но очень желательно получить базовые навыки при работе с разными объектами: сигналами, текстами, изображениями, графами, признаковыми описаниями и т.д. Кроме того, это позволит вам выбрать задачи по душе.

Во-вторых, важно грамотно выбрать себе учебные курсы и наставников.

В принципе, можно всему научиться самому. Ведь мы не имеем дело с областью, где есть какие-то секреты, передающиеся из уст в уста. Наоборот, есть много грамотных учебных курсов, исходников программ и данных. Кроме того, очень полезно, когда одну задачу решают несколько людей параллельно. Дело в том, что при решении таких задач приходится сталкиваться с очень специфическим программированием. Допустим, ваш алгоритм

выдал 89% верных ответов. Вопрос: много это или мало? Если мало, то в чём дело: вы неправильно запрограммировали алгоритм, выбрали неверные параметры алгоритма или сам алгоритм плохой и не подходит для решения данной задачи? Если работа дублируется, то ошибки в программе и неверные параметры удаётся быстро найти. А если она дублируется специалистом, то вопросы оценки результата и приемлемости модели тоже решаются быстро.

В-третьих, полезно запомнить, что на решение задачи анализа данных требуется много времени.

Статистика

Анализ данных в R

1. Переменные

В R, как и во всех остальных языках программирования, существуют переменные. Что такое переменная? По сути, это адрес, при помощи которого мы можем найти какие-то данные, которые мы сохраняем в памяти.

Переменные состоят из левой и правой части, разделенных оператором присваивания. В R оператором присваивания является конструкция “<-”, если название переменной находится слева, а значение, которое сохраняется в памяти - справа, и она аналогична “=” в других языках программирования. В отличии от других языков программирования, хранимое значение может находиться слева от оператора присваивания, а имя переменной - справа. В таком случае, как можно догадаться, оператор присваивания примет конструкцию следующего вида: “->”.

В зависимости от хранимых данных, переменные могут быть различного типа: целочисленными, вещественными, строковыми. Например:

my.var1 <- 42 my.var2 <- 35.25

В данном случае переменная my.var1 будет целочисленными типа, а my.var2 - вещественного.

Так же, как и в других языках программирования, с переменными можно выполнять различные арифметические операции.

my.var1 + my.var2 - 12

my.var3 <- my.var1^2 + my.var2^2

Кроме арифметических операций, можно выполнять логические операции, то есть операции сравнения.

my.var3 > 200 my.var3 > 3009 my.var1 == my.var2 my.var1 != my.var2 my.var3 >= 200 my.var3 <= 200

Результатом логической операции будет правдивое (TRUE) или ложное (FALSE) высказывание. Так же можно выполнять логические операции не только между переменной с каким-то значением, но и с другой переменной.

my.new.var <- my.var1 == my.var2

Предположим, у вас есть большой набор утверждений (напр., «человек — это звучит гордо», «все люди — сёстры», «худой мир лучше доброй ссоры» и пр.), своё отношение к которым респонденты оценивали по одинаковому шаблону (напр., «согласен / не знаю / не согласен»). Можно, конечно, в статье дать таблички по каждому пункту, но можно попытаться найти что-то, что объединяет одну часть пунктов в более общую категорию, другую — в ещё одну категорию (безусловно, может оказаться и так, что ваши утверждения ничего не объединяет). Факторный анализ — это один из инструментов, который позволяет найти это общее, если оно там, конечно, есть.

Говоря более строго, если оценки двух и более пунктов коррелируют между собой, то логично предположить, что эта корреляция указывает на некий общий фактор (например, высокие оценки у школьников по алгебре и высокие оценки по геометрии скорее всего будут встречаться одновременно и указывать на хорошее абстрактное мышление и развитую логику). Факторный анализ помогает найти эти связи в массиве ваших данных.

Это одновременно сильное и слабое место. Сильное потому, что большой массив данных упрощается и его легче анализировать. А слабое потому, что сильная корреляция, как известно, не указывает на причинность и реальные связи — компьютер покажет вам нечто, но что это значит, насколько находка разумна и правдоподобна, судить только вам. Как написано в одной умной книге «to interpret the factors, which is more like voodoo than science».

Однако перейдём к примеру.

Итак, в 2013 г. Центр социальных экспертиз по заказу ВОО «Гей-Альянс Украины» опрашивал обычных людей (800 чел.) на предмет гомофобии (отчёт). Среди прочего, в опроснике фигурировали и пункты, к гомофобии прямого отношения не имеющие, напр. о доверии к разнообразным политическим и социальным институтам. Вопрос звучал так: «Какой уровень Вашего доверия к следующим социальным институтам? (Дайте один наиболее подходящий ответ по каждой строке)» с вариантами ответов «5. Совсем не доверяю — 4. Скорее не доверяю — 3. Трудно сказать, доверяю или нет — 2. Скорее доверяю — 1. Полностью доверяю». Список институтов, к которым респондент выражал своё отношение, таков:

1. Семье и родственникам
2. Соседям
3. Коллегам
4. Церкви и духовенству
5. Астрологам
6. Средствам массовой информации (телевидение, радио, газеты)
7. Политическим партиям
8. Налоговой инспекции
9. Милиции
10. Прокуратуре
11. Судам
12. Президенту
13. Верховной Раде
14. Правительству
15. Местным органам власти
16. Банкам
17. Страховым компаниям
18. Благотворительным фондам, общественным организациям

Как провести факторный анализ этих данных? (предположим, что таблица с ответами называется dovira)
Присоединяем массив:

>attach(dovira)

Вначале следует убедиться, что в загруженном массиве нет пропусков и ошибок ввода:

>which(is.na(dovira)==T)
integer(0)
>summary(dovira)
p1
Min. :1.000
1st Qu.:2.000
Median:2.000
Mean:2.711
3rd Qu.:4.000
Max. :5.000 ... ... ...

Как видим, всё в порядке (для того, чтобы не загромождать изложение, в выводе оставлен только первый вопрос).
Команда, выполняющая факторный анализ, входит в набор пакетов, устанавливаемых по умолчанию. Она очень проста:

>factanal(dovira,6)
Call:
factanal(x = dovira, factors = 6)

Uniquenesses:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
0.431 0.195 0.379 0.614 0.047 0.672 0.506 0.285 0.174 0.106 0.186 0.215 0.112 0.082 0.464 0.288 0.204 Factor1 Factor2 Factor3 Factor4 Factor5 Factor6
1 -0.407 -0.324 0.489 -0.106 -0.213
2 0.879 0.131 -0.112
3 0.784
4 -0.128 0.540 -0.170 0.193
5 0.125 0.171 0.133 0.943
6 0.265 0.122 0.252 0.393 0.139
7 0.522 0.382 0.148 0.151 0.175
8 0.395 0.673
-0.119 0.204 0.182 0.131
9 0.329 0.817 0.181
10 0.297 0.865 -0.113 0.145 0.122
11 0.353 0.769 -0.104 0.277
12 0.805 0.320 0.111
13 0.853 0.318 -0.144 0.151 0.121
14 0.902 0.250 0.125
15 0.582 0.230 0.181 0.325
16 0.196 0.414 0.667 0.139 0.184
17 0.243 0.351 0.694 0.160 0.317
18 0.162 0.109 0.228 0.608
Factor1 Factor2 Factor3 Factor4 Factor5 3.662 3.399 2.079 0.324 1.275 0.765
ProportionVar 0.203 0.189 0.116 0.074 0.071 0.043
CumulativeVar 0.203 0.392 0.508 0.581 0.652 0.695
Test of the hypothesis that 6 factors are sufficient.
The chi square statistic is 257.27 on 60 degrees of freedom.
The p-value is 2.95e-26

Посмотрим на результаты.

Вначале в выводе повторяется отданная машине команда, потом идёт табличка «уникальностей», т. е. долей общей дисперсии, вносимых каждой переменной по отдельности. Следом мы видим таблицу нагрузок, в которой столбцы соответствуют коэффициентам корреляции отдельных переменных с выделенными факторами. Наконец, третья таблица — доля общей дисперсии, объясняемой каждым конкретным фактором и накопление этих дисперсий. Завершает вывод информация о тестировании гипотезы «выбранное число факторов достаточно для описания массива».

Наиболее важными являются таблицы нагрузок и долей объясняемой дисперсии.

Из последней видно, что в сумме 6 выделенных факторов объясняют 70% разброса данных, при этом первый фактор отвечает за пятую часть суммарной дисперсии, второй — 19%, третий — 12% и т. д.
Таблица нагрузок указывает, что в первом факторе объединены 7, 12, 13, 14 и 15 институция (коэффициенты корреляций больше 0.5), во втором — 8, 9, 10, 11, в третьем — 2, 3, 4 и т. д.

Попробуем интерпретировать результаты.

Фактор 1 объединяет доверие к политическим партиям, президенту, Верховной Раде, правительству и к местным органам власти. Иными словами, это доверие к политической сфере в целом .
Фактор 2 объединяет доверие к налоговой инспекции, милиции, прокуратуре и судам. Иными словами, это доверие к фискальным и силовым органам .
Фактор 3 объединяет доверие к соседям, коллегам и, неожиданно, к церкви и духовенству. Эти институции можно обобщить следующим образом — доверие к людям, с которыми респонденты встречаются лицом к лицу . В пользу этого говорит и корреляция с уровнем доверия к родственникам (она лишь ненамного ниже, чем произвольно избранный нами порог коэффициента корреляции 0.5).
Фактор 4 — это доверие к банкам и страховым компаниям, т. е. к финансовым учреждениям .
Фактор 5 стоит особняком — доверие к астрологам (других заметных корреляций нет).
Фактор 6 подобно предыдущему коррелирует только с уровнем доверия только к одной институции — благотворительные фонды и общественные организации .
Лишь одна институция не вошла в эти факторы — средства массовой информации (телевидение, радио, газеты). Доверие к ней приблизительно одинаково «размазано» по выделенным факторам.

Что нам дают эти результаты?

Если мы уровень доверия к социальным институтам усредним по факторам (т. е. для каждого респондента просуммируем баллы институций, вошедших в фактор, и поделим на число этих объединённых фактором институций), то получим картинку настроений украинцев в отношении отдельных элементов государства и общества:

Видно, что больше всего у респондентов доверия к людям, с которыми они встречаются лицом к лицу. А меньше всего доверия к фискальным и силовым органам, а также к финансовым учреждениям.

Последний аспект, который не может не вызвать вопросов: откуда мы знаем, что факторов нужно выделить именно 6. Самым, пожалуй, точным ответом будет — ниоткуда. Каждый раз, нужно экспериментировать, опираясь на здравый смысл. Во-первых, количество факторов не может быть большим, чем число переменных. Во-вторых, можно ориентироваться на суммарную объясняемую дисперсию, ибо нет смысла рассуждать о факторах, если они в совокупности не описывают хотя бы её половину (а умные люди рекомендуют добиваться по крайней мере 70%). В-третьих, нужно ориентироваться на возможность подобрать разумное объяснение полученным факторам.

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

Литература

Teetor P. R Cookbook. — O’Reilly, 2011

Публикации по теме