1 мар. 2013 г.

Результаты голосования по закону 207-ФЗ

В комментариях меня попросили посмотреть результаты голосований в ГД по отдельному закону 207-ФЗ,  внесшему ряд изменений в  УК РФ. Закон действительно любопытный и не громкий (я о нем вообще не слышал до этого)  был быстро принят Госдумой в конце ноября прошлого года и подписан президентом в начале декабря.
Закон дополнил состав ст. 159 УК РФ ("мошенничество")  шестью отдельными подпунктами:
  1. Мошенничество в сфере кредитования 
  2. Мошенничество при получении выплат  
  3. Мошенничество с использованием платежных карт 
  4. Мошенничество в сфере предпринимательской деятельности 
  5. Мошенничество в сфере страхования
  6. Мошенничество в сфере компьютерной информации
а также дополнил ст. 303 УК РФ ("Фальсификация доказательств и результатов оперативно-розыскной деятельности"). 
Насколько я понял, одновременно произошло ужесточение наказания по всем подпунктам ст. 159 УК в части увеличения штрафов и сроков наказания. 
Законопроект №53700-6, который привел к 207-ФЗ, был изначально внесен Верховным Судом РФ в апреле прошлого года. В ГД по этому законопроекту состоялось три чтения: первое - 23.10.2012, второе и третье чтение - прошли вместе, ровно через месяц -  23.11.2012.

Вот результаты голосования  в трех чтениях по этому законопроекту: 

Как видно, все партии, за исключением КПРФ, последовательно поддерживали законопроект. КПРФ почему-то просто не голосовала практически полным составом, но и  не голосовала "против". 

27 февр. 2013 г.

Работа Государственной Думы РФ в 2012 году


Я уже объяснял, в чем причина интереса к статистике по голосованиям в Госдуме и о том, что планирую собрать и проанализировать не просто результаты голосований по отдельным законопроектам (это и сейчас вполне удобно можно сделать на vote.duma.gov.ru), а собрать и проанализировать достаточно большой массив данных и посмотреть, можно ли извлечь из этого какие-то выводы.
За это время мне удалось написать более или менее полный набор функций для R, которые позволяют собирать данные с помощью API "Законопроект" и самого портала Госдумы. Пока я решил сосредоточиться на результатах голосования за весь 2012 год. Это первый год работы именно Думы шестого созыва.  Год не так давно закончился и имеет смысл хотя бы просто подвести его итоги, чтобы немного понять, что за данные у нас имеются.

Вот краткие итоги работы Государственной Думы РФ в 2012 году по результатам анализа:


  • Дума рассмотрела 888 законопроектов (в  первом и/или втором и/или третьем чтениях).
  • По этим 888 законопроектам было проведено 2395 голосования (Дума провела, конечно, гораздо больше голосований, включая множество голосований, определяющих регламент ее работы, но мы их не учитываем). 
  • Из  2395 законопроектных голосований 1372 голосований (или 57%) завершились положительно, то есть принятием этого чтения или рассматриваемых поправок, а 1023 голосования (43%) завершились отрицательно, то есть отклонением. 
  •  Наиболее активно ГД работала в декабре (469 голосований по законопроектам) и июне (575). Самыми "расслабленными" месяцами были январь-март прошлого года (в среднем, около 70 голосований  в месяц). Видимо, это объясняется тем, депутаты были заняты формированием комитетов и распределением аппаратных должностей.  
График. Распределение голосований в Госдуме по времени в 2012 году 
Источник: анализ по данным Государственной Думы РФ

  • В среднем по каждому законопроекту (из 888) было проведено 2,7 голосования, однако распределение голосований очень своеобразно.  Почти законопроектов (то есть около 67 %) законопроектов рассматривалось только один раз.  
График. Распределение законопроектов по количеству голосований в 2012 году 
Источник: анализ по данным Государственной Думы РФ


  • Самим "голосуемым" законопроектом прошлого года стал проект №70631-6 ( О проекте федерального закона № 70631-6 "О внесении изменений в Кодекс Российской Федерации об административных правонарушениях и Федеральный закон "О собраниях, митингах, демонстрациях, шествиях и пикетированиях" (в части уточнения порядка организации и проведения публичных мероприятий, прав, обязанностей и ответственности организаторов и участников публичных мероприятий). По нему Дума голосовала 389 (!) раз.  
  • На втором месте идет закон "Об образовании" (законопроект № 121965-6) с 89 голосованиями. Ну и на третьем месте - Закон о бюджете, который похоже, не слишком волнует депутатов (или они понимают, что практически ни на что повлиять в бюджете не могут). За бюджет на 2013 год и поправки к нему депутаты голосовали 52 раза. 
  • Достаточно любопытно смотрится распределение голосов, когда Дума голосует "за" или "против" по законопроектым голосованиям. Отклонение поправок происходит по причине отсутствия отсутствия кворума - по этой причине было отклонено 913 голосований из 1023 отклоненных. Остальные отклоненные голосования, как правило, смогли привлечь только несколько голосов (см. красные линии на графике внизу). Зато при положительном  голосовании у депутатов часто наблюдается полное единодушие:  475 голосований из 1372 имели поддержку более чем 90%, а в 71 голосованиях - поддержку более 99% депутатов. 
График. Распределение поддержки в зависимости от принятия/отклонения по голосованиям Государственной думы РФ в 2012 году
Добавьте подпись
Источник: анализ по данным Государственной Думы РФ

Таковы результаты первого взгляда на собранные данные, впереди - более обстоятельный анализ и разбор того, как на самом деле голосуют депутаты Госдумы. 

P.S. Я выложил файл с написанными функциями для R на github, в отдельном репозитарии. Когда оформятся результаты анализа и будут перепроверены данные, они будут выложены там же. Если у кого-то вдруг возникнут вопросы по работе функций - спрашивайте.  




15 февр. 2013 г.

Игра в промилле - про содержание алкоголя в крови водителей

Вчера прочитывая Ъ за утренней чашкой кофе, натыкаюсь на такую новость - В Госдуме предлагают вернуть 0,2 промилле для водителей. Вкратце - депутат "Справедливой России" Антон Беляков предлагает отменить "нулевой промилле". Из статьи непонятно, на сколько эта инициатива пользуется поддержкой хотя бы части депутатов  фракции СР. Вполне возможно, что личный самопиар на животрепещущей теме.
Метания властей со с "промилле" действительно удивляют. Напомню, что в середине 2008 года по инициативе президента Д. Медведева были введены поправки, допускающие содержание алкоголя в крови до 0,3 промилле. Но уже в 2009 году, когда воздействие этой меры на дорожную безопасность было еще совершенно непонятно, Д. Медведев сам раскритиковал свою же инициативу и установил нулевой норматив. После известного ДТП на Минской Д. Медведев предложил закрутить гайки еще дальше - штрафы в 500 тыс. рублей + лишение свободы до 15 лет за ДТП с жертвами. Я уже говорил, о том, что мне кажется, способ "закручивания гаек" не самый оптимальный, а проблему пьянства за рулем не решить показной "казнью" виновников резонансных ДТП.
В качестве побочных последствий в суда появились "кефирные дела", в Москве вдоль дорог висят вот такие вот плакаты (точно видел такой на Ленинградском шоссе):

Я видел разные апелляции в дискуссиях к международному опыту, поэтому решил посмотреть на данные. Это данные ВОЗ за 2007 год по максимальному разрешенному содержанию алкоголя в крови (BAC - blood alcohol content). С тех прошло уже 5 лет, поэтому вероятно, что-то изменилось, но тем нее менее, выборка очень большая. Более того она разделена по группам водителей (обычные-профессиональные водители  то есть водители коммерческого и общественного транспорта, а также новички, которые имеют небольшой стаж).
График. Максимальное разрешенное содержание алкоголя в крови для водителей, 2007
Какие выводы можно сделать? Удивительно, но большинство стран разрешают определенное содержание в крови водителя. В большинстве случаев это 0,5-0,8 промилле, причем есть три страны - ОАЭ, Лесото и Бурунди, в которых разрешено содержание в 1 промилле или 0,01 процента (!). 1 промилле - это средний мужчина после 50-75 г водки, как я понимаю. Всемирная организация здравоохранения официально рекомендует странам устанавливать норматив по содержанию алкоголя в 0,5 промилле и меньше. Эти рекомендации основаны на исследованиях, которые показывают, что после 0,4 промилле относительный риск попадания в ДТП начинает резко возрастать. Вот результат некоторых таких исследований:
Поэтому в установлении норматива по содержанию алкоголя в 0,2-0,3 промилле нет ничего зазорного. Подобный уровень не означает, что можно выпить даже бутылку пива и садиться за руль (это диапазон 0,4-0,5 промилле), но позволяет фиксировать фоновый уровень. Большинство стран именно так и делает.

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

Максимальное разрешенное содержание алкоголя в крови для обычных водителей, 2007

//--> -->
а вот и сам законопроект, о котором шла речь. Депутат тоже аппелирует к международному опыту :)

12 февр. 2013 г.

Построение страновых хороплет-карт (choropleth maps) с помощью пакета rworldmap в статистическом пакете R


Довольно часто социально-экономические данные удобно визуализировать с помощью карт. Стандартным является представление в форме так называемых choropleth maps (похоже, на русском они так и называются - хороплет-карты). Хороплет - это такая карта, на которой с помощью визуального оформления (обычно цвета, но может быть и к примеру, точками или линиями разной густоты/толщины) отображается интенсивность какого-либо показателя для географических регионов. Такие карты очень легко позволяют наглядно отобразить данные по большому количеству географических объектов.
Вот для примера такая карта - правда, наглядно? На ней изображена доля курильщиков среди мужчин по почти 150 странам. Создание такой карты в R заняло 8 строк кода, включая загрузку данных из Сети.
Smoking prevalence, males (% of adults)

Как создавать подобные карты?
Существует множество различных вариантов. В принципе, любая ГИС-программа типа MapInfo или ArcGIS умеет строить хороплет, но покупать эти дорогостоящие системы только для того, чтобы рисовать цветные карты, смысла не имеет. Можно рисовать карты хорорлет и в любимом Excel. Существует несколько "рецептов", как можно это делать.  Как правило, они требуют запуска VBA-макроса - для того, чтобы сопоставить исходный показатель с географическими регионами на карте. Еще одно условние - необходимо иметь исходную карту (линии) в графическом формате SVG. Это обычно не проблема, и другие гео-форматы можно тоже преобразовать в графический SVG, но это требует определенных манипуляций Вот один из предлагаемых рецептов, как построить карту хорорлет в Excel. Обратите внимание на то, сколько телодвижений надо сделать для того, чтобы нарисовать достаточно простую карту. Причем если даже процесс автоматизирован при смене данных (то есть, меняешь данные - карта перерисовывается), то при смене самой карты все ломается и требуется "доводка напильником" под новую карту.
 Наконец - обещанное. Конечно, хороплет-карты можно построить в статистическом пакете R. Возможности по работе с гео-данными в R, в том числе и графические, сопоставимы, а в некоторых случаях даже превосходят возможности полноценных ГИС-систем. И все это - в одном флаконе.

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

Краткая процедура построения выглядит следующим образом:

  1. Получение данных для отображения. В нашем случае мы используем данные из базы данных World Development Indicators (WDI), которую поддерживает Всемирный банк. В этой базе, как обещано, 331 показатель по 221 стране. Возьмем показатель "Smoking prevalence, males (% of adults)", который мне показался достаточно интересным. Загрузим его в R с помощью специального пакета, который носит название "WDI", как и следовало ожидать. Этот пакет позволяет обратиться напрямую к базе данных из R и получить данные сразу в необходимой разбивке "страна"-"год"-"показатель". Можно сразу загружать несколько показатель для диапазона лет для всех или некоторых стран. Очень удобно! В функции WDI() из одноименного пакета я рекомендую использовать параметр extra = TRUE для того, чтобы получаемые данные содержали код страны по ИСО (двух и трехзначный). 
  2. Сопоставление карты и данных. Для этого уже используется пакет rworldmap и его функция с говорящим названием joinCountryData2Map. Здесь все просто выбираем ключ, по которосу мы сопоставляем данные и карту. Это может быть название страны на английском языке, но лучше всего использовать коды стран по ISO (ISO2 или ISO3). Соответственно это параметр "joinCode". 
  3. Выбор показателя, который мы хотим отобразить на карте с помощью функции mapCountryData. Здесь все понятно  nameColumnToPlot соответственно название показателя, который хотим отобразить. Важными являются также параметры catMethod (определяет методы для категоризации данных, то есть деления их на группы одного цвета), а также colourPalette, который определяет цветовую палитру. Для палитры удобно использовать имеющиеся варианты из пакета RColorBrewer. Как выглядят сами палитры удобно смотреть на специальном сайте. 
  4. Дополнительно. Функция mapCountryData сразу же отображает карту, но если вы хотите внести некоторые изменения - в нашем случае немного поправить легенду с помощью addMapLegend. 
Вот код , который уже нарисует долю курильщиков-женщин по странам мира:

<!-- Styles for R syntax highlighter
require(WDI)
require(rworldmap)
require(RColorBrewer)

smoker <- WDI(country = "all", indicator = "SH.PRV.SMOK.FE", start = 2009, end = 2009, 
    extra = TRUE, cache = NULL)
# получить данные из WDI
fMap <- joinCountryData2Map(smoker, joinCode = "ISO3", nameJoinColumn = "iso3c", 
    nameCountryColumn = "country")
# cопоставить данные с картой по коду ISO3 (трехзначный код страны)
mapParams <- mapCountryData(fMap, nameColumnToPlot = "SH.PRV.SMOK.FE", catMethod = "quantiles", 
    missingCountryCol = gray(0.8), colourPalette = rev(brewer.pal(7, "RdYlBu")), 
    addLegend = FALSE, mapTitle = "")
# добавить легенду
do.call(addMapLegend, c(mapParams, legendLabels = "all", labelFontSize = 0.8, 
    legendWidth = 0.5, sigFigs = 0))

--> А вот и результат его выполнения:
Smoking prevalence, females (% of adults)
По картам можно сразу же сделать несколько наблюдений. Среди мужчин больше всего курят Россия, Китай, Восточная Европа и Малайзия с Индонезией. Среди женщин все по другому - здесь в лидерах жительницы стран Западной Европы (Австрия на первом месте), Чили и  Папуа-Новая Гвинея.

9 февр. 2013 г.

Про безопасность на дорогах (ч. 2). Насколько разные страны отличаются друг от друга?

Первая часть

В первой части я вкратце описал, откуда родилась идея заниматься статистикой безопасности на дорогах и описал некоторые источники, которые мне удалось найти. Во второй части я опишу основные показатели дорожной безопасности (смертности) по разными странам. 
Межстрановой контекст кажется довольно важным для того, чтобы понимать нашу российскую действительность. Аварии и смерти на дороге - это неизбежность, определенное их количество будет происходить всегда, независимо от какие правила принимаются. Можно считать, что есть некий фоновый уровень аварийности, не зависящий от действия властей и принятых правил.
К примеру, если в следующему году население стало перемещаться по дорогам по любым причинам на 10% больше (в терминах совокупного автопробега всех автомобилей), то при прочих равных условиях это приведет к тому, что количество ДТП и смертей на дорогах увеличится на 10%. Этот аспект довольно часто, как мне показалось, упускается из виду при анализе данных. Любые изменения в количестве аварий мы пытаемся соотнести с теми или иными управляющими изменениями - новыми законами, правилами или чем-то, не всегда понимая, что возможно, причины изменений находятся за пределами нашего контроля.
Поэтому необходимо разделить итоговую безопасность на две части: 1 ) определяется некоторыми  внешними причинами 2) факторами, которые также оказывают воздействие на безопасность, но являются управляемыми. К примеру, общее количество автомобилей, которое ездит по дорогам, или их совокупный пробег, относится к первой группе факторов, а размер штрафов или количество сотрудников дорожной полиции - ко второй.
Чтобы выделить именно первую группу факторов полезно обратиться к межстрановым сопоставлениям. Безопасность на дорогах сильно отличаются между странами. Отличаются также и факторы первой и второй групп. Если соотнести внешние причины и результирующие показатели безопасности, можно выделить уровень безопасности, который определяется исключительно ими.  А отклонения от этих значений можно считать, что определяются факторами второй группы.
Для начала посмотрим на сами данные по безопасности по странам. Здесь сразу возникают проблемы. Критерии того, что считается "дорожно-транспортным происшествием" могут сильно отличаться между странами. Более того всегда возникают вопросы о том, какая доля "реальных" ДТП фиксируется в статистике. Поэтому обычно для того, чтобы сравнивать на сколько безопасность на дорогах отличается между разными странами, используют данные по смертности, так как они вполне справедливо считаются наиболее надежными. По международным правилам считается, что человек погиб в ДТП если он погибает в течение 30 дней после происшествия. Соответственно, основным источником информации считаются данные дорожной полиции, которые дополняются информацией из больниц. Есть даже большой специальный большой отчет IRTAD (International Traffic Safety Data and Analysis Group), посвященный тому, каким образом учитываются данные по авариям в разных странах мира.
Посмотрим наконец на данные для стран с населением более 10 млн человек. Это данные за 2007 год (то есть, довольно старые) - последние имеющиеся данные, собранные Всемирной организацией здравоохранения (ВОЗ) по широкому кругу стран.
График. Уровень смертности в ДТП по странам с населением более 10 млн человек, 2007


Видно, что развитые страны имеют уровень смертности около 10 на 100 тыс. населения, развивающиеся страны - в пределах 25. "Худшие" страны имеют показатели смертности в пределах 30 человек и больше.  Обратим внимание на Россию - в 2007 году она находилась в не лучшей компанией - между Замбией и Пакистаном. Однако с тех пор показатели дорожной смертности сильно улучшились. Если в 2007 году это было чуть больше 25 человек, то в 2011 году смертность на дорогах оказалась около 19 человек на 100 тыс. Это все существенно больше, чем показатели большинства развитых странах, то налицо большой прогресс. Мы постараемся разобраться в причинах этого прогресса позже.
Обратим внимание на то, что США имеют относительно высокие показатели дорожной смертности - гораздо хуже практически всех развитых стран. В лидерах - Западная Европа и Япония. Высокое место Кубы, по всей видимости, связано с тем, что в стране совсем не развит автомобильный транспорт (или по крайней мере, был не развит в 2007 году).
Теперь  посмотрим на те же данные на карте мира. Видно, что наиболее удручающая ситуация в африканских странах, а также некоторых странах Ближнего Востока.
Карта. Уровень смертности в ДТП по странам, 2007

Примечание: карта интерактивная. При наведении мышкой на страну показываются значения смертности (чел на 100 тыс. населения) в 2007 году.
Мы посмотрели на межстрановой срез данных - имеет смысл взглянуть и на длинную историю, хотя бы некоторому списку стран (Германия, Франция, Ирландия, Япония, Южная Корея, Польша, Россия, Украина, США). Это максимально длинная история, которую я смог найти.
График. Динамика уровня смертности в ДТП по некоторым странам, 1970-2010
 Хотя в целом по развитым странам уровень дорожной смертности снижается, есть некоторые интересные паттерны. Южная Корея (верхняя зеленая линия) испытала всплеск смертности в начале 90-х годов, которая потом стала снижаться. Данные по Польше показывают аналогичную тенденцию, хотя и с меньшим размахом. По России (я нашел пока данные с 1984 года) также наблюдался всплеск смертности в начале 90-х годов, который достиг сошел на нет к 1997 году, а затем снова пошел вверх. С 2006-2007 годов показатели российской смертности снижаются. Довольно странная тенденция - возможно, это связано с нашими российскими особенностями учета (или недоучета в 90-е годы) - надо будет поподробнее изучить этот вопрос.
Продолжение последует.

16 янв. 2013 г.

Статистика голосований в Госдуме (1) - первые результаты

Когда в Государственной Думе принимался печально известный анти-Магнитский "закон Димы Яковлева",  многие обратили внимание на то, как персонально голосовали депутаты за этот закон. Многие СМИ и интернет-ресурсы писали об этом - кто и как проголосовал, поименно. Напомню, что к третьему, то есть финальному чтению этого законопроекта, противников осталась всего 7 человек из 448 имеющихся в наличии депутатов, то есть всего лишь 1,5%. Вот их имена:

  1. Алферов Жорес Иванович (КПРФ)
  2. Гудков Дмитрий Геннадьевич (Справедливая Россия - СР)
  3. Озеров Андрей Александрович (Справедливая Россия - СР)
  4. Петров Сергей Анатольевич (Справедливая Россия - СР)
  5. Пономарев Илья Владимирович  (Справедливая Россия - СР)
  6. Резник Борис Львович (Единая Россия)
  7. Смолин Олег Николаевич (КПРФ). 
Меня, честно говоря, удивила редкая степень единодушия наших народных избранников в отношении явно неадекватного закона, принимаемого с необычайной скоростью. Сразу же был понятен и огромный общественный резонанс. В любом случае, в России явно не 1,5% противников этого закона, а гораздо больше. Тем не менее, депутаты проголосовали именно так.  

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

Это была довольно давняя идея, но по каким-то причинам несколько лет назад я не смог найти информации по этому поводу. Возможно, просто был невнимателен. Когда принимался "закон Димы Яковлева" я решил проверить сайт Госдумы еще раз и был приятно удивлен. Благодаря на удивление квалифицированному ИТ-персоналу аппарата ГД, за любым законотворческим телодвижением довольно легко и удобно смотреть. 
Во первых, есть "Система анализа результатов голосований на заседаниях Государственной Думы", на которой собственно можно найти результаты голосований по тому или иному вопросу. Для быстрой проверки результатов голосований - самое то. 
Во вторых, есть "Автоматизированная информационная система «Законопроект»", в которой можно получать автоматизированным способом (API) множество интересной информации в удобном формате, в первую очередь, списки принятых законопроектов за тот или иной период времени. 
В третьих, есть "Автоматизированная система законотворческой деятельности", в которой удобно смотреть любые телодвижения и хронологию событий по любому законопроекту, включая дополнительные материалы такие как пояснительные записки к законопроектам. Вы не поверите, но порой там встречаются абсолютные шедевры бюрократической мысли и канцелярского языка и чудеса логики! 

Когда я посмотрел на это все, то понял, что эта информация заслуживает того, чтобы ее аккуратно и бережно собрать и проанализировать. Вообще эта тема для отдельного большого исследовательского проекта. В США есть отличный проект voteview.com, на котором ученые в области политической экономии Кит Пул (Keith T Poole) и Говард Розенталь (Howard Rosenthal) собирают, анализируют и разрабатывают новые методы анализа данные по результатам голосований в Конгрессе и Сенате США. 
С помощью подобного анализа можно ответить на довольно любопытные вопросы. К примеру, насколько вообще поляризирована наша Дума. Это вообще место для дискуссий и различных мнений или мнение может быть только одно? Кто оппозиционных фракций и насколько оппозиционен? Или оппозиционность это только ширма для публики. И так далее. Я буду по мере сил и времени заниматься этим проектом и делиться результатами. За последние несколько дней я успешно решил технические вопросы получения данных с помощью отличного языка для статистического анализа R. Возможно, напишу еще более подробно именно про технические аспекты более подробно для себя и для интересующихся. Впереди - заниматься анализом и интерпретацией полученных результатов. 

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

Закон Димы Яковлева 

Официальное название - О проекте федерального закона № 186614-6 "О мерах воздействия на лиц, причастных к нарушениям основополагающих прав и свобод человека, прав и свобод граждан Российской Федерации"
Результаты голосования по фракциям:
Cтатистика голосовоний по закону Димы Яковлева
 В принципе, можно смотреть и пофамильные результаты, но результаты по фракциям легче визуализировать и воспринимать. Легко видеть, что все фракции поддержали законопроект, "против" голосовали только единицы-еретики. 

Закон о цензуре в Интернете

Официальное название - О проекте федерального закона № 89417-6 "О внесении изменений в Федеральный закон "О защите детей от информации, причиняющей вред их здоровью и развитию" и отдельные законодательные акты Российской Федерации" (по вопросу ограничения доступа к противоправной информации в сети Интернет)
Результаты голосования: 
Статистика госолованя по закону о цензуре в Интернете
Как легко увидеть, закон принят единогласно - против нет вообще ни кого! У депутатов Госдумы нет совершенно никаких сомнений. 

Закон об ужесточении наказаний за митинги

Официальное название - О проекте федерального закона № 70631-6 "О внесении изменений в Кодекс Российской Федерации об административных правонарушениях и Федеральный закон "О собраниях, митингах, демонстрациях, шествиях и пикетированиях" (в части уточнения порядка организации и проведения публичных мероприятий, прав, обязанностей и ответственности организаторов и участников публичных мероприятий)
Результаты голосования: 

Статистика голосовия по закону об ужесточении наказаний за митинги
О, наконец-то возникли несогласные в лице КПРФ и ЛДПР. Справедливая Россия не голосует вообще, хотя три человека проголосовали "за" вместе с Единой Россией (Митрофанов, Зотов, Лакутин). 


Закон об иностранных агентах

Официальное название: О проекте федерального закона № 109968-6 "О внесении изменений в Кодекс Российской Федерации об административных правонарушениях" (в части установления административной ответственности за нарушение законодательства, регулирующего деятельность некоммерческих организаций, выполняющих функции иностранного агента)
Результаты голосования: 
Статитистика голосовия по закону об иностранном агенте
И снова редкое единодушие - против только справороссы, да и то - не все. КПРФ и ЛДПР слились в едином порыве в борьбе с иностранными агентами. 

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




13 янв. 2013 г.

Последнее прочитанное - "The Signal and the Noise: Why So Many Predictions Fail — but Some Don't" by Nate Silver

Решил написать про впечатления про последнюю прочитанную книгу . В основном, для того, чтобы немного навести порядок в собственной голове и закрепить впечатления от прочитанного. Давно себя поймал на мысли о том, что если читать много книг, то через некоторое время большинство из них превращается в один большой комок  разодранных впечатлений и мыслей. Поэтому надо как-то "разгружать" себя.
Теперь о книге. Называется она в американском стиле довольно длинно -
"The Signal and the Noise: Why So Many Predictions Fail — but Some Don't". Написал ее Нейт Сильвер (Nate Silver). В США Нейт Сильвер стал широко известен в первую очередь тем, что  смог правильно спрогнозировать победителя по всех штатах в ходе президентских выборов 2012 года. Об этом довольно много писали, что прибавило и книге, и ее автору популярности. Сама книга вышла совсем недавно, в конце сентября 2012 года. Что удивительно, стала довольно популярной для подобного рода литературы. Сейчас она занимает 32 место в списке бестселлеров Амазона и держит прочное место в разделах "Популярная экономика", "Технологии" и "Математика". Причем у нее достаточно высокий рейтинг на Амазоне - 4.3 из 5.
Сразу скажу, что мне книга понравилась. Если вкратце, то она научно-популярно описывает статистические модели в разных областях человеческой жизни, начиная от экономики до шахмат и "птичьего гриппа". Она рассчитана на широкую аудиторию, поэтому никаких особых требований к читателю в виде пройденного курса по статистике или математическому анализу,  она не предъявляет. В ней нет ни одной формулы, только доступные графики. И это конечно большой плюс автору, который умеет удивительно легко и понятно объяснять сложные вещи. Судя по всему, именно поэтому она взлетела в списки бестселлеров Амазона. Вообще стиль изложения мне напомнил другого отличного автора, пишущего на финансово-экономические темы для широкой аудитории - Майкла Льюиса (Micheal Lewis), автора таких книг, как "Liars Poker", "Moneyball" (да именно, тот фильм Moneyball, в котором снялся Бред Питт) и "Boomerang. Причина популярности книг Майкла Льюса и Нейта Сильвера (хотя он и написал пока единственную книгу) заключается в том, что авторы сочетают два начала  - отличный и доступный стиль изложения и глубокое понимание тех вещей, о которых они пишут.
Нейт Сильвер в разное время занимался тем, что разрабатывал систему прогнозирования будущей успешности молодых игроков в бейсболе, зарабатывал на жизнь, играя в интернет-покер и создал систему прогнозирования результатов политических выборов в США на основе агрегирования результатов различных опросов. Как я говорил, именно благодаря успехам в прогнозировании выборов он и стал широко известен и получил работу штатного блоггера в New York Times.  Поэтому разделы, которые посвящены прогнозированию в бейсболе, покере и политике - лучшие в книги. Вообще, сама книга разбита на главы, в каждой из которых Нейт рассказывает о статистических моделях в какой-либо одной области.
Я видел несколько не очень положительных рецензий на книгу от экономистов, которые критикуют Нейта за главу, в которой он описывает причины финансового кризиса 2007-2009 годов. Он пытается уместить рассказ о причинах кризиса, и рассказы про модели рейтинговых агентств и ненадежность экономических прогнозов в одну главу. Все это смотрится сваленным в одну кучу. Сказывается, видимо, и то, что у самого Нейта не было собственного опыта в области финансовых моделей. И он, судя по всему, почему-то не стал общаться с людьми из этой области - по крайней мере, я не припоминаю прямых цитат в "экономической" главе. Хотя в главах, в которых он рассказывает про модели прогнозирования погоды и климатические модели, прогнозирование землетрясений, распространение инфекционных заболеваний - в тех областях, в которых у него тоже нет своего опыта, он основывается на общении и консультациях со специалистами из этих областей. Мой совет - лучше пропустить первую главу "A catastrophic failure of prediction". К ней можно вернуться, прочитав всю книгу, если возникнет желание. К тому же экономистов -  за прогнозы "в молоко" - Нейт еще покритикует в последующих главах.
Еще одна рецензия, которую видел, укоряет Нейта за слишком вольное трактование "байесовского подхода". С этим действительно есть некоторые сложности. Еще в предисловии Нейт сообщает о том, что он является горячим сторонником байесовских методов в статистике. Но возвращается к описанию байесовских методов и собственно самой теоремы Байеса только в 8 главе, описывая подходы, которые использует профессиональный игрок в тотализатор на результаты баскетбольных матчей. До этого времени - речь просто об описании статистических моделей и как они используются в реальности. Постороннему человеку может быть непонятно при чем тут вообще Байес.
Ответ автора на вопрос, который поставлен в название самой книги, в упрощенном варианте выглядит так - байесовский подход дает лучшее качество прогнозов. Тем не менее, описание байесовского подхода для спортивных моделей и покера является одним из лучших "простых" введений в эту тему, на мой взгляд. Для серьезного и осмысленного изучения темы байесовских методов я рекомендую другую книгу -
"Doing Bayesian Data Analysis" (John Kruschke). У Нейта - хорошее общее описание, как байесовские методы используются в современных моделях, но для того, чтобы "сделать" что-то самому, нужно читать дальше другие книги.
Резюмируя, книгу "The Signal and the Noise: Why So Many Predictions Fail — but Some Don't" я рекомендую всем, кто не засыпал на университетском курсе мат. статистики :) Вам понравится! 

10 янв. 2013 г.

Про аварийность на дорогах (1). Ищем источники

С недавних пор заинтересовала тематика, связанная с безопасностью на дорогах. Регулярно случаются резонансные происшествия, которые приводят к оживленному обсуждению в "интернетах", активности наших государственных деятелей, перетряске системы ГИБДД и прочим "организационным выводам".
К примеру, известное "ДТП на Минской" в прошлом сентябре - пьяный водитель наехал на автобусную остановку, погибли пять человек, в том числе трое детей. После этого стали говорить об ужесточении наказания за вождение в пьяном виде. Уже через несколько недель премьер-министр Медведев выступил с известным видеообращением на фоне отличного автомобиля BMW X5 и предложил сажать до 15 лет и ввести штрафы до 500 тысяч рублей (для Москвы) и до 250 тысяч для регионов. Если вспомнить метания с введением "промилле", такой же быстрой его отменой, то все это воспринимается очень странно.
Для меня это выглядит странно потому, что если серьезно воспринимать проблему (а именно - повысить безопасность на дорогах), необходимо хорошо представлять причины происходящего, мотивы участников и воздействовать именно на те точки, которые могут принести максимальную отдачу. К примеру, та же проблема с пьянством за рулем. Кто вообще эти люди, что садятся пьяными за руль? Почему они это делают? Насколько повлияет формальное ужесточение наказания на их мотивы? На что лучше делать приоритет - на ужесточение наказания, "если попался", или на то, чтобы повышать вероятность неотвратимости "попадания". К примеру, во многих европейских странах "на алкоголь" проверяют не так, как у нас - просто останавливаются весь поток и проверяют всех без исключения. Соответственно, шансов "проскочить" нет, и водители знают об этом.
Насколько необходимо ставить первоочередной приоритет именно на борьбу с "пьянкой"? В ДТП с участием нетрезвых водителей в 2011 году погибло, по данным ГИБДД, 2103 человека. Это очень много, но это всего лишь 7,6% от общего количества людей, которые погибли на дорогах. То есть 92,4% погибли в ДТП, в которых водители были трезвыми. Какова ключевые причины - нарушение скоростного режима, низкая безопасность автомобилей (к примеру, отсутствие подушек), плохие дороги или что-то еще? Все это довольно сложные вопросы, на которые непросто дать ответ. Но если заниматься не дешевым популизмом, а пытаться действительно что-то изменить, то необходимо иметь ответы на них.
Я, как обычно, пытаюсь смотреть на данные и понять что-то из них. Конечно, как и во многих областях, связанных с деятельностью человека, у сугубо количественного подхода есть свои ограничения. Всегда есть особенности сбора и характер данных (к примеру, мы никогда точно не знаем количество людей, которые садятся пьяными за руль, мы можем только опосредованно оценивать через количество ДТП). Любая модель - это упрощение сложной реальности и так далее. Но тем не менее, такой взгляд такой свой угол зрения и позволяет подходить к проблемам с более объективных точек зрения. С недавних пор я пытаюсь собирать и смотреть на цифры и хотя бы немного понять, что из них может следовать.

Ищем источники откровения - органы власти

Первым делом я попытался найти результаты каких-либо количественных исследований на тему дорожной безопасности в России. И с этим оказались проблемы. Формально всей информацией о  зарегистрированных ДТП обладает ГИБДД. В системе ГИБДД есть специальный "Аналитический центр безопасности дорожного движения", который занимается сбором, анализом и интерпретацией имеющейся информации. Однако каких-либо публичных результатов его деятельности мне обнаружить не удалось. Есть презентация этого центра с большим количеством фотографий - в марте прошлого года тогда еще президент Д.Медведев побывал в этом центре. К сожалению, помимо отличных фотографий, содержательных результатов анализа данных от этого аналитического центра я не смог найти. В презентации нашел великолепный слайд №13 под названием названием "Факторный анализ аварийности" с результатами простой линейной регрессии.


Объясняемая переменная - количество ДТП по РФ в целом. Объясняющие переменные - неназванные переменные, закодированные именами А0-А4. Количество степеней свободы - всего лишь 6, так как используются годовые данные за 2005-2010 годы. На первый взгляд смотрится все очень солидно - график, огромная таблица "статистические характеристики" со сложными показателями и цифрами. Однако если присмотреться внимательно к таблице с результатами анализа, то легко увидеть, что все объясняющие переменные являются незначимыми! Об этом  говорит и статистика Фишера. Ценность этой регрессии - нулевая, никакой пользы она не имеет.

В системе МВД обнаружился и целый НИИ - "Научно-исследовательский центр проблем безопасности дорожного движения МВД России", у которого нет даже сайта. Зато обнаружился целый портал - "Портал безопасности дорожного движения (информационная система мониторинга и анализа", почему-то базирующийся на домене prognoz.ru (компания "Прогноз), хотя явно имеет отношение к органам власти. На портале есть довольно интересные региональные данные от ГИБДД. К примеру, можно посмотреть более подробные данные о типах нарушений ПДД водителями и пешеходами, места совершения ДТП чем те, что доступны на самом сайте ГИБДД. К сожалению, в лучших традициях систем, которые строит компания "Прогноз", есть красивые всплывающие диаграммы, но скачать данные для нормального количественного анализа невозможно. То есть выглядит вроде бы красиво, но для серьезной работы использовать данные крайне затруднительно. Еще меня порадовал прогноз с количеством ДТП на период до 2012 года. Прогноз был выполнен в 2007 году, основной прогнозный фактор - объемы финансирования соответствующей федеральной целевой программы и больше ничего :) На самом портале есть только данные, к слову сказать, регулярно обновляемые, но каких-либо аналитических материалов с интерпретацией и анализом этого большого массива, нету.
Система МЧС также имеет специализированную структуру - "Центр мониторинга ликвидации последствий дорожно-транспортных происшествий". К сожалению, материалов с количественным анализом данных по дорожной безопасности так же найти не удалось, зато есть интересные плакаты, которые используются при обучении. К примеру, можно узнать, как лучше тушить автомобиль и извлекать пострадавшего в ДТП с использованием подручных средств. Но в лучших традициях плакаты выложены в маленьких размерах, разглядеть текст очень сложно - от кого прячемся, непонятно.


Кстати, если кто-то знает результаты хороших исследований по теме, буду рад ссылке. 

23 дек. 2012 г.

Построение графика с двумя осями Y в статистическом пакете R


При построении графиков временных рядов иногда бывает нужно объединить два ряда в один график. Чаще всего это бывает необходимо в двух случаях:
  • каждый из рядов имеет разную размерность
  • размерность одна, но ряды отличаются на порядок или несколько порядков по величине.
В Excel такое построение решается очень просто: “Параметры ряда” - “По вспомогательной оси”. Как же сделать подобное в R? Проблема заключается в том, что стандартные средства построение графиков в R - базовая графика, либо известный пакет ggplot2 не имеют встроенных средств для построения таких графиков. Причем по принципиальным соображениям. К примеру, создатель пакета ggplot2 Hadley Wickham написал еще в 2008 году по этому поводу следующее: “It's possible to do this with base graphics, but impossible to do this with ggplot2. I'm against this technique because I believe it leads to serious visual distortions and meaningless graphics.” Специалисты по визуализации предлагают вместо того, чтобы “смешивать” два графика в один, использовать две панели на одном графике.
К примеру, мы хотим построить график индекса S&P 500 и цены нефти марки Brent для того, чтобы посмотреть, есть ли визуальная зависимость между двумя рядами. Для начала получим исходные данные из базы данных Федерального резервного банка Сент-Луиса - FRED c помощью отличной библиотеки для получения бесплатных финансово-экономических данных quantmod.
require(quantmod)
Sys.setenv(TZ = "GMT")  # необходимо установить часовой пояс на GMT, чтобы без скачивание из FRED работало без ошибок
spx <- getSymbols("SP500", src = "FRED", auto.assign = FALSE)  #S&P 500 Stock Price Index (SP500)
brent <- getSymbols("DCOILBRENTEU", src = "FRED", auto.assign = FALSE)  #Crude Oil Prices: Brent - Europe
API базы данных FRED работает таким образом, что он возвращает все историю в каждом вызове. Задать временной интервал  за который необходимы данные, в действующей реализации невозможно. Скорее всего, они добавят это в будущем, чтобы снизить нагрузки на свои сервера. С нашей точки зрения, это приводит к тому, что данные по индексу S&P 500 доступны с 1957 года.
plot(spx)
plot of chunk unnamed-chunk-2
plot(brent)
plot of chunk unnamed-chunk-2
А данные по ценам на нефть - с 1987 года. Мы же хотим, к примеру, только цифры за последние 5 лет.
brent <- brent["2007::"]  # возьмем данные по нефти только с 2007 года
data <- merge(spx, brent, join = "right")  #объединим индикаторы в один объект xts
names(data) <- c("spx", "brent")  # присвоим нашим имена
Параметр join в функции merge.xts определяет каким образом, осуществляется “слияние” рядов. В нашем случае мы определили слияние по правой переменной (right). Это означает, что в новый объект должны войти все показатели правой переменной и только те значения левой переменной, которые совпадают с правой. В R очень легко комбинировать несколько графиков в один визуальный элемент. Параметр mfrow позволяет задавать матрицу из n-строк и m-столбцов, который заполняются построчно.
par(mfrow = c(2, 1))  # строим графики в 2 строках и 1 столбце
plot(data$spx, main = "S&P 500")
plot(data$brent, main = "Brent")
plot of chunk unnamed-chunk-4
Графики совмещены точно друг над другом, что позволяет соотносить их между собой. Это стандартная рекомендация от специалистов по R, когда необходимо строить графики временных рядов для сравнения друг с другом. Но что делать, если все таки необходимо объединить два ряда в один график и нарисовать разные левые и правые оси для оси Y?
Как обычно в R можно один и тот же результат получить с помощью разных инструментов. Наиболее простой вариант следующий. С помощью того же параметра new можно “заставить” R нарисовать на месте уже нарисованного. Так как оба наших ряда полностью совпадают по оси Х (времени), то все будет выглядеть абсолютно нормально. Создадим специальную функцию для этого, чтобы можно было ее использовать в будущем для разных рядов:
Plot2Axis <- function(y1, y2, name1, name2) {
    y <- merge(y1, y2)
    plot.zoo(na.omit(y[, 1]), type = "l", col = "#3266cc", lwd = 2, main = "", 
        xlab = "Дата", ylab = "points", oma = c(4, 4, 2, 0.5))
    grid()  #нарисовать сеточку
    par(new = TRUE)  # параметр, который позволяет рисовать новый график на текущем графике
    plot.zoo(na.omit(y[, 2]), type = "l", col = "#db3a10", lwd = 2, xaxt = "n", 
        yaxt = "n", xlab = "", ylab = "", oma = c(4, 4, 2, 0.5))
    axis(4)  #построим ось второго графика слева
    legend("topright", col = c("#3266cc", "#db3a10"), lty = 1, lwd = 3, bty = "n", 
        legend = c(name1, name2), text.col = c("#3266cc", "#db3a10"))
}
# теперь можно использовать функцию,
# задав предварительно несколько
# глобальных параметров, чтобы график
# выглядел более привлекательно

par(bty = "l")  #  глобальный параметр - граница вокруг графика слева и снизу
par(las = 1)  #  глобальный параметр - текст пишется параллельно оси X
par(mar = c(2, 4, 1, 3))  #  глобальный параметр - границы между область графика и остальной частью

Plot2Axis(data$spx, data$brent, "S&P 500", "Brent")
plot of chunk unnamed-chunk-5
Примечание: данный пост создавался с помощью пакета knitr, который не всегда дружит с кириллицей в текущей реализации. Поэтому я не стал использовать надписи на кириллице в графиках. В самом R все отображается правильно.
-->