Рынок услышан

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

К счастью, для этого не нужно “гуглить спектральный анализ, преобразование Фурье, вейвлеты” [1].

1. Используем данные, которые предлает Финам. Для примера я выбрал исторические котировки индекса ММВБ.

2. В Mathematica используем ListPlay[x] для того, чтобы получить звук из котировок.

3. (по желанию) Этот звук возможно экспортировать, напримерв в wav:
Export[“micex.wav”,ListPlay[x]]

Скачать .nb.

1.Rorschach, Надоело смотреть на графики, решил их послушать, smart-lab.ru, 2012

Рынок услышан

Победа над простотой (очередная)

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

Новость же в том, что я написал кластеризацию к-средних [1] для Mathcad. Поскольку интернет по поводу наличия другого готового воплощения молчалив (хотя в других средах их предостаточно), то мое находится здесь.

В файле две функции (вспомогательная и основная) и пример с данными.

Вы знакомы с Mathcad и готовы предложить способы улучшить файл? Есть идеи по поводу других подходов к кластеризации в Mathcad?

Приложение
1. Lloyd, Stuart P. (1982), “Least squares quantization in PCM”, IEEE Transactions on Information Theory 28 (2): 129–137,doi:10.1109/TIT.1982.1056489.

3. Предыдущий материал о Mathcad.
Победа над простотой (очередная)

Замкнутый круг

Процедура под названием “усреднение” позволяет кредитным организациям держать не все обязательные резервы в Банке России постоянно, а лишь их часть (например, сейчас 40% от размера обязательствых резервов).

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

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

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

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

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

Угол – (номер дня усреднения/количество дней усреднения в данном периоде)*2 Pi,
расстояние от центра – (Ставка RUONIA в данный день)/(Средняя ставка  RUONIA за данный период усреднения).
Всего периодов усреднения – 26.

Черной линией показана оценка (устойчивой к выбросам) линейной регрессии. Казалось бы сезонности нет. Для того чтобы проверить себя, отложим наши данные в привычной декартовой плоскости:

Хочу отметить, что периоды усреднения не совпадают с календарными месяцами, а проходят с 10 по 10 число месяцев.
Синей линией показана скользящая средняя по процентной ставке.

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

Мне наглядное доказательство наличия сезонности кажется убедительным.

Какие формальные или наглядные тесты Вы используете для того, чтобы проверить наличие сезонности?

Приложение

  1. Расчеты в .nb
  2. Данные в .xlsx
Замкнутый круг

Регрессионная кулинария

Одна из распространенных проблем с регрессией в том, что данные обычно содержат выбросы – редкие наблюдения, которые делают оценки коэффициентов смещенными. Скажем, если мы пытаемся использовать характеристики отдельных людей, то неожиданым может считаться возраст 2000 лет, наличие  180 детей и пол “пенсионер”.
Обычно, такие выбросы нужно внимательно осмотреть и убедиться в том, что они результат ошибки заполения и не являются характерными для нашей целевой группы.
Как найти выбросы, если мы не полагаемся на собственную способность увидеть их? Можем найти отдельные наблюдения, которые сильно влияют на оценки коэффициентов модели, рассчитав расстояние Кука. Это расстояние рассчитывается для каждого наблюдения следующим образом:
Не буду здесь расписывать переменные – они есть в статье. Главное, что расстояние для наблюдения i – это сумма разниц между оценками всех наблюдений с помощью регрессии, построенной на всем наборе наблюдений, и регрессии, построенной без наблюдения i.
Для примера возьмем данные из [1] по весу людей, страдающих анорексией, до и после лечения:
Оценим линейную модель LinearModelFit[]:
Мы теперь хотели бы определить, какие из наблюдений имеют большое расстояние Кука и являются выбросами. Используем правило [2], согласно которому выбросами являются наблюдения с 
Здесь показаны расстояния для каждого наблюдения – mod[“CookDistances”], красная линия на уровне 4/n:
Найдем четыре наблюдения, которые, как кажется, выбиваются из общего ряда:
clean = Extract[anarox, 
   Position[mod[“CookDistances”], x_ /; x < 4/Length[anarox]]];
И построим новую модель на очищенных данных:
Здесь синей линией показана новая модель, красные точки – удаленные наблюдения.
Наконец мы можем собрать все вместе и получить функцию, которая самостоятельно  избавится от выбросов и вернет построенную на очищенных данных модель:

cookedReg[l_List] := Module[{x, vars, cooks, clean},
  vars = Table[Subscript[x, i], {i, Length[First[l]] – 1}];
  cooks = LinearModelFit[l, vars, vars][“CookDistances”];
  clean = Extract[l, Position[cooks, x_ /; x < 4/Length[l]]];
  LinearModelFit[clean, vars, vars]
  ]


1.   A. Agresti, B. Finlay, “STATISTICAL METHODS FOR THE SOCIAL SCIENCES”, Prentice Hall, 4th edition, 2008

2. Bollen, Kenneth A.; and Jackman, Robert W. (1990); Regression diagnostics: An expository treatment of outliers and influential cases, in Fox, John; and Long, J. Scott (eds.); Modern Methods of Data Analysis (pp. 257-91). Newbury Park, CA: Sage

Регрессионная кулинария

TernaryPlot[]

Для первого вопроса про структуру хозяйства приготовил пару графиков. Мне нравится треугольный график, который показывает размер вкладов разных отраслей в общий выпуск экономик:

Данные говорят, что самый большой вклад промышленности у Экварториальной Гвинеи, а сельского хозяйства – у Фолклендских островов, услуги приносят почти весь доход Гонконгу, например.
Для тех у кого есть CDF Plugin – здесь интерактивная версия с возможностью выделить страну и прочим.
Исходный код для графика взят у Lunchtime Playground, данные – здесь (да, мне тоже не очень нравится Factbook, но что делать?).

TernaryPlot[]