26 июн. 2014 г.

Обзор книг по R


Давно уже хотел свести и систематизировать книги по R (языку программирования для статистических вычислений), которые прочел/просмотрел за последние 2 года. Возможно, это кому-то покажется полезным. По R выходит действительно огромное количество книг, наверно, больше чему по любым другим подобным продуктам (STATA, eViews, SPSS и другие) вместе взятым. Многие специальные книги по отдельным вопросам статистики приводят примеры, написанные именно на R. Единственная проблема заключается в том, что все книги - на английском языке. Российскими авторами написана пока только одна, насколько я знаю, оригинальная книга по R - я ее не читал и ничего не могу сказать. Но в целом, учите английский язык - это крайне полезно.  

Общие книги по R


1. R Cookbook. Paul Teeetor (2011).  Хорошая и удобная в использовании книга в стиле cookbook - сборника рецептов на разные случаи жизни. Особенно будет полезна первых порах, когда возникает множество вопросов в стиле "Как же сделать ХXX?". Одновременно дает представление о многих базовых вещах - основных командах, структурах данных и проч. Каждый рецепт дается в форме "Problem" - "Solution" - "Discussion". Часть Solution содержит непосредственно код, который решает данную проблему. Часть Disccussion, как следует из названия, содержит дополнительную информацию и обсуждение используемого подхода. Книга написана очень простым и понятным языком. Рекомендуется всем начинающим знакомиться с R, а также как дополнительное подспорье для опытных пользователей, чтобы быстро вспомнить подзабытые или редко используемые вещи. R Cookbook ориентирована на практические аспекты работы в R и не претендует на глубокое осмысление статистических вопросов, хотя в книге есть главы по расчеты основных статистик и линейной регрессии. Наверно, единственный существенный недостаток это то, что издатель/автор не выложили напрямую, используемый в книге код - это является уже общепринятым делом.

2. R Book Michael J Crawley (2012, 2 ed).
Огромное фундаментальное руководство по R объемом свыше 1000 страниц (если точное 1076 страниц в печатной версии!), написанное биологом - профессором экологии и теории эволюции в Imperial College London -  Майклом Кроули. Это уже второе издание монументального труда, первое издание вышло еще в 2007 году.  Сложно описать "вкратце" такую книгу, поэтому отмечу только некоторые моменты.
Первые главы посвящены "азам" работы в R - установка, типы данных, создание собственных функций и так далее.
Однако в отличие от первой книги, R Book рассматривает и практические аспекты использования R и статистические вопросы использования различных подходов, методов и так далее. Охват по статистическим вопросам очень широкий, начиная от простых тестов и линейной регрессии, до байесовких методов и нейронных сетей. Есть отдельные главы по анализу временных рядов (на уровне введения в тему) и анализу гео-данных. В целом, книга хороша, чтобы понимать, как можно использовать те или иные статистические методы в R. Так как автор - эколог, то практически все используемые в книги примеры имеют отношение к биологии/экологии. Не ждите примеров из экономики, к примеру :) С другой стороны, хорошо видно, что автор - практик, поэтому он довольно много времени уделяет обсуждений допущений различных методов, ограничений полученных результатов, альтернативным интрепретациям полученных результатов - это очень интересно.
Книгу удобно использовать как руководство, так как в ней содержится хороший индекс.
Автор предоставляет доступ к исходному коду и примерами с данными, которые используется в книге. Правда код не слишком удобно организован. В архиве выложено почти 300 текстовых файлов, не сгруппированных по главам книги (!). Для книги, которая стоит более $60, наверно, можно было бы сделать лучшую организацию, используемого в примерах кода.



3. R in a Nutshell. Joseph Adler (2012, 2 ed). Еще один фундаментальный труд (объемом в 700 страниц), претендующий на звание "руководства по R". Написан специалистом-практиком по data mining, сейчас работающем в LinkedIn. Мне R in a Nutshell понравилась очень подробным и емким обсуждением различных "технических" аспектов работы в R - к примеру, подключение в качестве источников входных данных баз данных с помощью пакетов RODBC или DBI. Вторая часть книг посвящена использованию различных методов в R, в основном с ориентацией на data mining и machine learning. В принципе, все основные методы из этого арсенала вкратце описаны. Удобно то, что для сложных функций, реализующих методы (типа lm или lda) приводится базовая табличка, описывающая все аргументы и их значения "по умолчанию". Очень подробно описаны различные аспекты трансформирования данных и приведения их в нужный вид.
Я правда не очень разобрался, где можно взять исходный код. На CRAN есть отдельный пакет для книги, содержащий наборы данных, есть также исходные коды для первого издания книги, а для второго - я не нашел.


4. R in Action. Robert Kabacoff (2011).
Еще одна из книг-учебников, которые начинаются со знакомства с R и постепенно двигают вас дальше. R in Action несколько проще R Book или R in Nutshell, поэтому возможно больше подойдет именно для первого знакомства. Когда хочется познакомиться, но пока не слишком понятно, зачем это необходимо. Книга хорошо очень продуманной структурой. Все главы делятся на 4 группы:

  1. Getting Started
  2. Basic Methods 
  3. Intermediate Methods 
  4. Advanced Methods. 
В каждой главе, особенно в третьем-четвертом разделах, приводится один достаточно большой пример, который подробно разбирается в течение всей главы. Автор также подробно останавливается на том, как интерпретировать таблицы с полученными результатами и что они вообще означают. Оказывается, книга R in Action вышла на русском языке, что можно только приветствовать. 

Резюме. Мне кажется, имеет смысл начинать знакомиться с R c помощью R Cookbook и R in Action. Если вам уже стала все более или менее понятным, то можно продвигаться дальше. Если вы занимаетесь статистикой/эконометрикой, то лучше подойдет R Book, если machine learning - то R in a Nuthshell. 


Книги по графическим возможностям R 

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

R Graph Cookbook. Mittal Hrishi (2011). Еще одна книга в стиле "кукбук" - на этот раз только графическим возможностям - но от издательства Packt, а не O'Rilley. В целом, неплохая книга в качестве "введения" в тему и дает общее представление о том, как устроены графические возможности R и что можно с ними делать. Мне, к примеру, больше всего были полезны примеры из 4 главы "Creating Line Graphs and Line Series Charts". Охват тем достаточно широкий - от базовых графиков до рисования карт и 3d-изображений. Примеры построены в основном на базовой графике, хотя есть немного ggplot2 и других пакетов. Есть важные вещи, связанные с подготовкой и экспортом графики. К сожалению, книга уже достаточно старая, поэтому в ней нет разделов, посвященных интерактивной графике - тем же пакетам rCharts или ультра-новому ggvis. Также книга достаточно базовая, поэтому "продвинутые" вещи или тонкости не обсуждаются - для этого все равно придется использовать StackOverflow и прочие источники "мудрости".

R Graphics Cookbook. Winston Chang (2012).   
Еще одна "книга рецептов" от издательства O'Rilley, написанная одним из разработчиков RStudio, наиболее популярной среды разработки для R. Хотя книга формально посвящена "R графике", на самом деле это только ggplot2. Поэтому никаких примеров на базовой графике или других графических пакетах нет. Эту книгу можно рассматривать как очень хорошее справочное пособие по ggplot2, написанное понятное и доступным языком. К книге прилагается специальный пакет  с используемыми датасетами. Весь приведенный в книге код выложен отдельно на сайте издательства и отсортирован по главам книги. Поэтому проблем с воспроизведением кода при изучении материала возникнуть не должно.
ggplot2. Elegant Graphics for Data Analysis. Hadley Wickam (2009). Довольная старая, по меркам "технической" литературы, книга от легендарного в мире R человека - Hadley Wickham, профессора статистики из Rice University и создателя кучи пакетов, без которых не обходится ни один пользователь R. Книга посвящена популярному графическому пакету ggplot2. Книга интересна сейчас первыми главами, в которых автор рассуждает про "грамматику графику"  ("grammar of graphics") и рассказывает про идеи, стоящие за ggplot2. Приведенный в книге код сейчас может быть неработоспособным в текущей версии ggplot2. Поэтому использовать эту книгу как учебник по ggplot2 вряд ли получится. С другой стороны, Хэдли поддерживает документацию в настолько идеальном состоянии, что все вопросы по текущим возможностям, аргументам функций и примерам использования можно решать без помощи специальной литературы. 


Резюме по "графическим" книгам. Если вас интересуют возможности базовой графики - читайте R Graph Cookbook, если интересует ggplot2 - читайте R Graphics Cookbook. Две книги покрывают достаточно широкий спектр того, чтобы доступно в R для графики, по крайней мере, на первом этапе.

Как я уже говорил, выходит достаточно большое книг, посвященное отдельным "специальным" темам в R. В следующий раз я напишу про книги, которые посвящены R в эконометрике/финансах, machine learning и GIS. 

21 июн. 2014 г.

"Потому что на десять девчонок по статистике девять ребят" - так ли это на самом деле?




Для меня ключевой фразой в популярной песне является - "по статистике". Поразбираться с этим вопросом, натолкнул вот этот  пост в популярном (хотя и уж очень претенциозном) ЖЖ bespridanitsa под названием "Ситуация с женихами в регионах". Сообразительная девушка решила посмотреть на данные Росстата по численности населения по разным возрастным группам в Ярославской области. И пришла к выводу о том, что общепринятые представления о гендерных соотношениях могут быть не такими уж и однозначными.
Я решил пойти дальше и посмотреть данные не только по соотношению численности мужчин/женщин - ожидаемо, что женщин больше. С точки зрения "mate selection" важно не просто соотношение численности мужчин и женщин в соответствующих возрастных когортах, но и их брачный статус. По сути нас интересует соотношение между мужчинами и женщинами, которые не состоят в браке, то есть условно "свободны" для отношений.
Если существует дисбаланс между такими мужчинами и женщинами , то поиск партнера, на "брачном рынке", по всей видимости, осложняется. Вероятность встретить подходящего партнера - это в том числе и функция от их общего количества, которые находятся более или менее рядом, в том числе и в географическом смысле. Поэтому интересна картина отдельным регионам, а не только по стране в целом.

Небольшое отступление. Термин "брачный рынок" может показаться несколько странным, но это общепринятый в настоящее время экономический термин, введенный работами Ричарда Познера и Гэри Беккера (лауреат Нобелевской премии по экономике 1992 года, недавно скончавшийся). "Брачным рынком" называют процесс поиска индивидами партнеров для брака для создания домохозяйства. С точки зрения экономиста экономические агенты всегда максимизируют собственную полезность (utility). В рамках этого подхода человек вступает в брак, когда ожидаемая полезность семейной жизни превосходит ожидаемую полезность холостой жизни или дополнительные издержки, возникающие при продолжении поиска более подходящей пары. На этих допущениях обычно строятся различные модели family economics. Подробнее про теорию вопроса можно посмотреть в [4]. Про российский "брачный рынок" можно посмотреть любопытную работу экономистов ВШЭ 2006 года [2]. 


Немного про данные и расчеты

Единственным источником такого рода полных данных является последняя Всероссийская перепись населения 2010 года, а именно ее второй том - "Возрастно-половой состав и состояние в браке" (таблица 2.5. "Население по возрастным группам, полу и состоянию в браке по субъектам Российской Федерации") [1]. Более актуальных цифр, к сожалению, нет.
В лучших традициях предоставления полезной информации от государственных органов искомая таблица организована крайне неудобно для какого, сколь бы то ни было серьезного анализа (как и вообще все результаты переписи, содержащей множество уникальной информации). Поэтому ее пришлось приводить в "нормальный вид" средствами Excel + R.

Перепись дает следующую разбивку состояния в браке:
  • Состоящие в зарегестрированном браке 
  • Состоящие в незарегестрированном браке 
  • Никогда не состоявшие в браке 
  • Разведенные официально 
  • Разошедшиеся 
  • Вдовые 
  • Не указавшие состояние в брак
В принципе, все понятно. Единственный неясный аспект - разница между "разведенные официально" и "разошедшимися". Так вот, разошедшиеся - это те, кто состоял в незарегестрированном браке, но на дату переписи разошелся, а также те, кто разошелся с официальным мужем/женой, но еще не оформил развод в ЗАГСе.

Нас интересуют все категории, которые указывают на не-состояние в браке. Я использовал такое агрегирование:
"Свободные" = "Никогда не состоявшие в браке" + "Разведенные официально" + "Разошедшиеся" + "Вдовые".
Разумеется, отдельно для мужчин и отдельно для женщин.
Посмотрим сначала на общероссийский результат. Получается, что в стране 30,2 млн "свободных" женщин и всего лишь 19,2 млн "свободных" мужчин. Разница - в 11 млн человек. Соотношение - 3 к 2. Это ли не повод для уныния незамужним девушкам?
Однако посмотрим на эти же результаты  по возрастным группам.



Легко видеть, что превышение количества женщин над количеством мужчин идет после 35 лет и нарастает с возрастом. В группе 70+ женщин почти 8 раз больше чем мужчин той же возрастной категории! Очевидная причина - разные показатели смертности. Так как женщины в среднем живут дольше чем мужчины, то в старших возрастных категориях становится совсем мало мужчин и много, как правило, одиноких женщин.
В то же время в возрастных категориях от 20 до 30 лет есть довольно устойчивое превышение "свободных" мужчин над количеством "свободных" женщин той же возрастной категории.
К примеру, в возрасте от 18 до 39 лет в 2010 году было 12,0 млн "свободных" мужчин и 10,3 млн "свободных" женщин. Получается, что как раз по статистике на на десять девчонок 11,6 ребят!

Разумеется, речь идет именно о статистике и формальном соотношении мужчин и женщин по брачному статусу, а не об сравнительной легкости найти подходящего партнера на "брачном рынке". Можно подумать по каким причинам, могут выходить подобные расхождения между статистикой и общепринятыми представлениями. Мне на ум приходят следующие вещи.

Различия в среднем возрасте заключения брака. Социальные и культурные обычаи таковы, что "нормальным" считается, что в паре мужчина должен быть несколько старше, чем женщина. Поэтому значительное превышение "свободных" мужчин над количеством "свободных" женщин в возрастной категории от 20 до 24 лет может быть связано с тем, что достаточно большое количество девушек к этому возрасту уже выходят замуж, в то время как парни из той же возрастной категории будут жениться несколько позже, через несколько лет, попадая в следующую возрастную когорту.
К сожалению, хороших данных по возрасту заключения брака не собирается. Данные Росстата публикуются лишь по крупным возрастным когортам и не разделяют между первым и повторными браками.
Вот процентное распределение заключенных браков по возрасту жениха:

Вот аналогичное распределение по возрасту невесты:


Я специально выделил возрастную когорту 18-24 года: в 2013 году из общего количества заключенных браков (1,2 млн) 24,5% были заключены женихами в этом возрасте, но для невест - это уже 38%. Видно также, что за последние 40 лет возрасты заключения брака сильно увеличились. И еще одно интересное наблюдение - всплеск ранних браков (невеста - до 18 лет) в начале 90-х годов - в 1992 году на подобные браки приходилось почти 7% от общего количества!
Согласно более аккуратным расчетам демографов [5], средний возраст первого брака составлял в 2011 году 27,38 лет для мужчин и 24,97 лет для женщин. Разница - в 2,41 год. В целом, она не очень большая и, по всей видимости, эффект от различий в возрасте заключения брака между мужчинами и женщинами не слишком влияет на наши результаты.

"Свободных" мужчин на "брачном рынке" может быть в действительности меньше. К примеру, в 2010 году (год проведения переписи), почти 700 тыс. человек находились в местах лишения свободы, из них 93-94% - это мужчины.

Разумеется, среди них есть и женатые (данных по брачному статусу заключенных я не знаю), но к примеру, около 23-24% заключенных (почти 161 тыс. человек в 2010 году) находились в возрасте от 18 до 25 лет и в большинстве своем, видимо, не состоят в браке. Подобные соображения можно привести и в части количества наркоманов или ВИЧ-инфицированных - хотя я не знаю доступные данные о гендерных соотношениях в этой части.

Различия в "качестве" между мужчинами и женщинами.
Одним из результатов исследований экономистами брачных отношений, подтвержденных эмпирически, заключаются в том, что мужчины и женщины более "высокого качества" вступают в отношения с себе подобными, когда эти качества являются взаимодополняющими (образование, раса, культурный уровень). Женщина "высокого качества" повышает производительность мужчины "высокого качества" и - наоборот. "Качество" - это некий условный термин, отражающий общую характеристику индивидов.
Однако такая склонность может ограничить количество "эффективных" потенциальных партнеров, если есть существенные различия в "качестве" и "качество" выступают ограничивающим критерием. Так как "качество" само по себе субъективно, его сложно оценивать. Некоторым аппроксимирующим показателям "качества" может быть уровень образования. По данным той же переписи в возрастной категории от 20 до  39 лет на 5,2 млн мужчин с высшим образованием приходится 7,5 млн женщин с высшим. Соотношение 3 к 2. Причем именно в возрастных категориях от 25 до 35 лет различия в уровнях образования между мужчинами и женщинами максимальны.


Региональная картина

При всей условности этих оценок и ограничений на данные, которые мы используем, все же интересно посмотреть на региональное распределение и соотношения количества "свободных" мужчин и женщин. Речь идет о том же самом соотношение "свободных" мужчин и женщин в возрасте от 18 до 39 лет по субъектам РФ. Если посмотреть абсолютные количества, то данные выглядят вот так вот. Имейте в виду, что отрицательные значения указывают на то, что в регионе больше "свободных" мужчин, чем женщин. Почти по всех регионах "свободных" мужчин оказывается больше (в Москве -45 тыс. человек, в Московской области - на 125 тыс. человек). Исключением (то есть там, где "свободных" женщин больше) являются "окраинные" регионы - Тыва, Алтай, Хакассия, Оренбургская область и некоторые другие (закрашены синим на карте, карта интерактивная - если навести мышкой на регион, будут появляться подсказка с данными и названием региона).


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



Наиболее "привлекательными" для женщин (в том смысле, что там сильное превышение "свободных" мужчин) являются Мурманская область и Камчатский край, а также почти все регионы Дальнего Востока - делайте выводы :). Для мужчин наиболее "привлекательны" в аналогичным смысле некоторые регионы Северного Кавказа (Ингушетия, Кабардино-Балкария), Алтай, Омская область, Тыва и Мордовия!. В Москве картина в целом достаточно сбалансированная - мужчин больше на 4,5%.


Список использованных источников

  1. "Итоги всероссийской переписи населения. Том 2. Возрастно-половой состав и состояние в браке". Ссылка.
  2. Рощина Я.М., Рощин С.Ю. Брачный рынок в России: выбор партнера и факторы ус­пеха. Препринт WP4/2006/04. — М.: ГУ ВШЭ, 2006. Ссылка.
  3. Р. Познер. Экономический анализ права. СПб.Экономическая школа. / Пер. с англ. под ред. В.Л. Тамбовцева, 2004, в 2-х т. Глава 5 "Семейное право и регулирование сексуальных отношений". Ссылка
  4. Becker, Gary S. 1993. A treatise on the family. Cambridge, Mass: Harvard University Press. Ссылка.
  5. С. Захаров "Куда движется супружество в России?". ДЕМОСКОП Weekly №545-546. 4-17 марта 2013. Ссылка

18 июн. 2014 г.

Как закрасить площадь между двумя линиями на графике в Excel?

Я уже рассматривал некоторые хитрости построения графиков в Excel - график с двумя осями Y и прочие довольно простые вещи. Можно поговорить о чуть более сложных вещах.
Возьмем стандартный график с линиями (line chart). Зачем нужно закрашивать площадь между этими линиями? Часто площадь закрашивают для того, чтобы акцентировать внимание читателя на различии/расстоянии между двумя линиями. Другой вариант, который встречается в моей деятельности - построение совмещенных графиков показателей, имеющих сильные сезонные колебания.
К примеру, вот такой вот график. На нем изображены недельные данные по объемам хранимого в подземных хранилищах  природного газа (ПХГ) в США. Показатель имеет сильную сезонность, поэтому в таком представлении сложно понять, что происходит на "конце" графика и соотнести последние точки с предыдущими периодами.

В совмещенном же виде график будет выглядеть вот таким вот образом. По оси Х отображен только один год - 52 недели для недельных данных. Данные по разным годам совмещены в линиях - в данном представлении показывается только текущий (2014), серой линией обозначен среднее значение за пятилетний период, светло-серым закрашенным участком выделен диапазон между минимальным и максимальным значением за соответствующий период.

Рассмотрим только построение закрашенной светло-серой площади, которая показывает диапазон. Сначала строим обычный линейный график для максимума и минимума - предполагается, что исходные данные (обычный временной ряд) уже преобразованы для такого представления и у нас есть ряд Max и Min.

Сначала нужно закрасить площадь между двумя линиями. "Трюк" состоит в том, чтобы добавить на графику гистограмму с накоплением, которая будет состоять из двух частей. Верхняя часть гистограммы будет соответствовать расстоянию между графиками и будет видимой. Нижняя часть будет занимать площадь от линии Min до 0 и будет невидимой на графике.
Для этого нужно в расчетной таблице добавить два дополнительных расчетных столбца к двум имеющимся (Max и Min).
Нижняя часть = Min
Разница = Max - Min.



Теперь нужно выделить полностью два дополнительных столбца -> Копировать. Перейти на уже имеющийся график с линиями и нажать Ctrl-V. Две дополнительных линии появятся на графике.

Выглядит правда все еще не очень похоже. Теперь нужно изменить вид диаграммы на гистограмму с накоплением. Соответственно выбираем сначала ряд "Разница" -> "Изменить тип диаграммы для ряда" -> "С областями и накоплением" (если выбрать просто гистограмму с накоплением, то будут "зубцы"). Тоже самое делается для для ряда "Нижняя часть".
Обратите внимание, что два ряда "Min" и "Нижняя часть" имеют одинаковые значения и наложены друг на друга. Удостоверьтесь, что вы выбираете нужный ряд. После этих манипуляций должно стать понятнее, что происходит. Фактически на графике совмещены две диаграммы.


В дальнейшем остается только доработать все "напильником", чтобы получить желаемый результат.
- Установить "Нет заливки" для нижней части гистограммы с накоплением. Это приведет к тому, что нижняя часть гистограммы станет невидимой.
- Поменять цвет для верхней части области на нужный.
Можно убрать сами линии Max и Min, чтобы они не отвлекали внимание, добавить дополнительные ряды ("2014" и "Среднее за 2009-2013"), чтобы получился итоговый результат (второй график) - но это уже дело вкуса и итоговый целей представления данных.
Единственное, что плохо с моей точки зрения - площадь получается с "зубцами", я пока не нашел способа, как можно обеспечивать"сглаживание" для такого графика. Если знаете - расскажите!

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