Как найти ковариацию зная дисперсию

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

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

Что такое ковариация?

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

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

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

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

Ковариация против дисперсии

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

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

Как рассчитать ковариацию

Для расчета ковариации можно использовать формулу:

Cov(X, Y) = Σ(Xi-µ)(Yj-v)/n

Где части уравнения:

  • Cov(X, Y) представляет собой ковариацию переменных X и Y.

  • Σ представляет собой сумму других частей формулы.

  • (Xi) представляет все значения переменной X.

  • µ представляет собой среднее значение переменной X.

  • Yj представляет все значения переменной Y.

  • v представляет собой среднее значение Y-переменной.

  • Σ представляет собой сумму значений для (Xi-µ) и (Yj-v).

  • n представляет собой общее количество точек данных по обеим переменным.

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

1. Получите данные

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

Год Компания X Стоимость акций ($) Компания Y Стоимость акций ($) 2015 1 245 100 2016 1 415 123 2017 1 312 129 2018 1 427 143 2019 1 510 150 2020 1 590 197

2. Рассчитайте среднее значение для каждой переменной

Чтобы найти среднее значение для каждой акции, сложите все значения X вместе и разделите на общее количество значений X. Затем сделайте то же самое для значений Y:

  1. µ = 1 245 + 1 415 + 1 312 + 1 427 + 1 510 + 1 590 / 6

  2. µ = 1416,5

  3. v = 100 + 123 + 129 + 143 + 150 + 197 / 6

  4. v = 140,3

3. Найдите разницу между каждым значением и средним значением для обеих переменных.

Вычтите среднее значение для каждого набора переменных из каждой переменной в этом наборе. Например:

Год Компания X (Xi-µ) Компания Y (Yj-v) 2015 1 245 — 1 416,5 = -171,5 100 — 140,3 = -40,3 2016 1 415 — 1 416,5 = -1,5 123 — 140,3 = -17,3 2017 1 312 — 1 416,5 = -1 209,5 140,2 = -11,2 2018 г. 1 427 — 1 416,5 = 10,5 143 — 140,3 = 2,7 2019 г. 1 510 — 1 416,5 = 93,5 150 — 140,3 = 9,7 2020 г. 1 590 — 1 416,5 = 5 6,7 — 4 0,7

4. Умножьте значения двух переменных

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

Год Компания X (Xi-µ) Компания Y (Yj-v) (Xi-µ)(Yj-v) 2015 1 245 — 1 416,5 = -171,5 100 — 140,3 = -40,3 (-171,5)(-40,3) = 6 911,45 2016 1 415 — 1 416,5 = -1,5 123 — 140,3 = -17,3 (-1,5)(-17,3) = 25,95 2017 1 312 — 1 416,5 = -104,5 129 — 140,2 = -11,2 (-104,5)(-11,3) = 1 180,85 2016 — 1 4218 1 143 — 140,3 = 2,7 (10.5) (2.7) = 28,35 2019 1,510 — 140,3 — 93,5 150 — 140,3 = 9,7 (93,5) (9.7) = 906,95 2020 1 590 — 1 416,5 = 173,5 197 — 140,3 = 56,7 (173,5) (56.7) = 9 837,45

5. Сложите значения вместе

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

6 911,45 + 25,95 + 1 180,85 + 28,35 + 906,95 + 9 837,45 = 18 891

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

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

Cov(X, Y) = 18 891/6

Где значения:

  • 18 891 = Σ(Xi-µ)(Yj-v)

  • 6 = п

Как подсчитано выше, ковариация акций компании X и компании Y составляет 3148,5. Положительный характер значения ковариации показывает, что акции двух компаний движутся в одном направлении.

Приложения ковариации

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

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

Пример расчета

Ниже приведен пример расчета ковариации продаж двух новых игрушек, проданных одной и той же компанией:

1. Найдите свои данные

Сначала найдите интересующие вас данные. В данном примере это количество двух игрушек, проданных с января по апрель:

Месяц Игрушка X Игрушка Y 12 января 67 13 февраля 45 25 марта 32 39 апреля 21

2. Найдите количество проданных игрушек

Затем найдите количество игрушек, проданных за указанные выше месяцы, и вы сможете найти среднее количество игрушек, проданных для каждой из них:

  • µ = 12 + 13 + 25 + 39 / 4

  • м = 22,25

  • v = 67 + 45 + 32 + 21/4

  • v = 41,25

3. Найдите разницу в значениях

В-третьих, вычислите разницу между каждым значением X и µ. Затем вычислите разницу между каждым значением Y и v:

Месяц Toy X (Xi-µ) Toy Y (Yj-v) 12 января — 22,25 = -10,25 67 — 41,25 = 25,75 13 февраля — 22,25 = -9,25 45 — 41,25 = 3,75 25 марта — 22,25 = 2,75 32 — 41,25 = — 9,25 39 апреля — 22,25 = 16,75 21 — 41,25 = -20,25

4. Рассчитайте произведение

В-четвертых, вы можете вычислить произведение (Xi-µ) и (Yj-v):

  • (-10,25)(25,75) = -263,94

  • (-9,25)(3,75) = -34,69

  • (2,75)(-9,25) = -25,44

  • (16,75)(-20,25) = -339,19

5. Добавляйте товары вместе

В-пятых, вы можете сложить произведения драгоценных вычислений, чтобы получить сумму -663,26:

  • Σ = (-263,94) + (-34,69) + (-25,44) + (-339,19) = -663,26

6. Замените значения

Наконец, вы можете подставить значения в уравнение из предыдущего:

  • Cov(X, Y) = -663,26/4

  • Cov(X, Y) = -165,82

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

Двумерной называют случайную величину

, возможные значения
которой есть пары чисел

. Составляющие

 и

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

 на плоскости

 либо как случайный вектор

.

Дискретной называют двумерную величину, составляющие которой дискретны.

Закон распределения дискретной двумерной СВ.
Безусловные и условные законы распределения составляющих

Законом распределения вероятностей двумерной случайной величины называют соответствие
между возможными значениями и их вероятностями.

Закон
распределения дискретной двумерной случайной величины может быть задан:

а) в
виде таблицы с двойными входом, содержащей возможные значения и их вероятности;

б) аналитически, например в виде функции распределения.

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

, надо просуммировать
вероятности столбца

. Аналогично сложив
вероятности строки

 получим вероятность

.

Пусть
составляющие

 и

 дискретны и имеют соответственно следующие
возможные значения:

.

Условным распределением составляющей

 при

 (j сохраняет одно и то же
значение при всех возможных значениях

) называют совокупность
условных вероятностей:

Аналогично
определяется условное распределение

.

Условные
вероятности составляющих

 и

 вычисляют соответственно по формулам:

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

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

ВКонтакте
WhatsApp
Telegram

Мгновенная связь в любое время и на любом этапе заказа. Общение без посредников. Удобная и быстрая оплата переводом на карту СберБанка. Опыт работы более 25 лет.

Подробное решение в электронном виде (docx, pdf) получите точно в срок или раньше.

Ковариация (корреляционный момент)

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

.

Ковариацию
(корреляционный момент) можно найти по формуле:

Свойства ковариации

Свойство 1.

Ковариация двух независимых случайных величин равна нулю.

Свойство 2.

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

Свойство 3.

Ковариация двухмерной случайной величины по абсолютной случайной величине не
превосходит среднеквадратических отклонений своих компонентов.

Коэффициент корреляции

Коэффициент корреляции – отношение ковариации двухмерной случайной
величины к произведению среднеквадратических отклонений.

Формула коэффициента корреляции:

Две
случайные величины

 и

 называют коррелированными, если их коэффициент
корреляции отличен от нуля.

 и

 называют некоррелированными величинами, если
их коэффициент корреляции равен нулю

Свойства коэффициента корреляции

Свойство 1.

Коэффициент корреляции двух независимых случайных величин равен нулю. Отметим,
что обратное утверждение неверно.

Свойство 2.

Коэффициент корреляции двух случайных величин не превосходит по абсолютной
величине единицы.

Свойство 3.

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

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

ВКонтакте
WhatsApp
Telegram

Мгновенная связь в любое время и на любом этапе заказа. Общение без посредников. Удобная и быстрая оплата переводом на карту СберБанка. Опыт работы более 25 лет.

Подробное решение в электронном виде (docx, pdf) получите точно в срок или раньше.

Линейная регрессия

Рассмотрим
двумерную случайную величину

, где

 и

 – зависимые случайные величины. Представим
одну из величины как функцию другой. Ограничимся приближенным представлением
величины

 в виде линейной функции величины

:

где

 и

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

Линейная
средняя квадратическая регрессия

 на

 имеет вид:

Коэффициент

называют
коэффициентом регрессии

 на

, а прямую

называют
прямой среднеквадратической регрессии

 на

.

Аналогично
можно получить прямую среднеквадратической регрессии

 на

:

Смежные темы решебника:

  • Двумерная непрерывная случайная величина
  • Линейный выборочный коэффициент корреляции
  • Парная линейная регрессия и метод наименьших квадратов

Задача 1

Закон
распределения дискретной двумерной случайной величины (X,Y) задан таблицей.

Требуется:


определить одномерные законы распределения случайных величин X и Y;

— найти
условные плотности распределения вероятностей величин;


вычислить математические ожидания mx и my;


вычислить дисперсии σx и σy;


вычислить ковариацию μxy;


вычислить коэффициент корреляции rxy.

xy 3 5 8 10 12
-1 0.04 0.04 0.03 0.03 0.01
1 0.04 0.07 0.06 0.05 0.03
3 0.05 0.08 0.09 0.08 0.05
6 0.03 0.04 0.04 0.06 0.08

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

ВКонтакте
WhatsApp
Telegram

Мгновенная связь в любое время и на любом этапе заказа. Общение без посредников. Удобная и быстрая оплата переводом на карту СберБанка. Опыт работы более 25 лет.

Подробное решение в электронном виде (docx, pdf) получите точно в срок или раньше.

Задача 2

Задана
дискретная двумерная случайная величина (X,Y).

а) найти
безусловные законы распределения составляющих; б) построить регрессию случайной
величины Y на X;  в) построить регрессию случайной величины X на Y;  г) найти коэффициент ковариации; д) найти
коэффициент корреляции.

Y X
1 2 3 4 5
30 0.05 0.03 0.02 0.01 0.01
40 0.03 0.02 0.02 0.04 0.01
50 0.05 0.03 0.02 0.02 0.01
70 0.1 0.03 0.04 0.03 0.01
90 0.1 0.04 0.01 0.07 0.2

Задача 3

Двумерная случайная величина (X,Y) задана
таблицей распределения. Найти законы распределения X и Y, условные
законы, регрессию и линейную регрессию Y на X.

                             x
y
1 2 3
1.5 0.03 0.02 0.02
2.9 0.06 0.13 0.03
4.1 0.4 0.07 0.02
5.6 0.15 0.06 0.01

Задача 4

Двумерная
случайная величина (X,Y) распределена по закону

XY 1 2
-3 0,1 0,2
0 0,2 0,3
-3 0 0,2

Найти
законы распределения случайных величины X и Y, условный закон
распределения Y при X=0 и вычислить ковариацию.
Исследовать зависимость случайной величины X и Y.


Задача 5

Случайные
величины ξ и η имеют следующий совместный закон распределения:

P(ξ=1,η=1)=0.14

P(ξ=1,η=2)=0.18

P(ξ=1,η=3)=0.16

P(ξ=2,η=1)=0.11

P(ξ=2,η=2)=0.2

P(ξ=2,η=3)=0.21

1)
Выписать одномерные законы распределения случайных величин ξ и η, вычислить
математические ожидания Mξ, Mη и дисперсии Dξ, Dη.

2) Найти
ковариацию cov(ξ,η) и коэффициент корреляции ρ(ξ,η).

3)
Выяснить, зависимы или нет события {η=1} и {ξ≥η}

4)
Составить условный закон распределения случайной величины γ=(ξ|η≥2) и найти Mγ и
Dγ.


Задача 6

Дан закон
распределения двумерной случайной величины (ξ,η):

  ξ=-1 ξ=0 ξ=2
η=1 0,1 0,1 0,1
η=2 0,1 0,2 0,1
η=3 0,1 0,1 0,1

1) Выписать одномерные законы
распределения случайных величин ξ и η, вычислить математические ожидания Mξ,
Mη и дисперсии Dξ, Dη

2) Найти ковариацию cov(ξ,η) и
коэффициент корреляции ρ(ξ,η).

3) Являются ли случайные события |ξ>0|
и |η> ξ | зависимыми?

4) Составить условный закон
распределения случайной величины γ=(ξ|η>0) и найти Mγ  и Dγ.


Задача 7

Дано
распределение случайного вектора (X,Y). Найти ковариацию X и Y.

XY 1 2 4
-2 0,25 0 0,25
1 0 0,25 0
3 0 0,25 0

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

ВКонтакте
WhatsApp
Telegram

Мгновенная связь в любое время и на любом этапе заказа. Общение без посредников. Удобная и быстрая оплата переводом на карту СберБанка. Опыт работы более 25 лет.

Подробное решение в электронном виде (docx, pdf) получите точно в срок или раньше.

Задача 8

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

YX -1 1
-1 0,4 0,1
1 0,2 0,3

Задача 9

Найдите
ковариацию Cov(X,Y) для случайного дискретного вектора (X,Y),
распределенного по закону:

  X=-3 X=0 X=1
Y=-2 0,3 ? 0,1
Y=1 0,1 0,1 0,2

Задача 10

Совместный
закон распределения пары

 задан таблицей:

xh -1 0 1
-1 1/12 1/4 1/6
1 1/4 1/12 1/6

Найти
закон распределения вероятностей случайной величины xh и вычислить cov(2x-3h,x+2h).
Исследовать вопрос о зависимости случайных величин x и h.


Задача 11

Составить двумерный закон распределения случайной
величины (X,Y), если известны законы независимых составляющих. Чему равен коэффициент
корреляции rxy?

X 20 25 30 35
P 0.1 0.1 0.4 0.4

и


Задача 12

Задано
распределение вероятностей дискретной двумерной случайной величины (X,Y):

XY 0 1 2
-1 ? 0,1 0,2
1 0,1 0,2 0,3

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

ВКонтакте
WhatsApp
Telegram

Мгновенная связь в любое время и на любом этапе заказа. Общение без посредников. Удобная и быстрая оплата переводом на карту СберБанка. Опыт работы более 25 лет.

Подробное решение в электронном виде (docx, pdf) получите точно в срок или раньше.

Задача 13

Совместное
распределение двух дискретных случайных величин ξ и η задано таблицей:

ξη -1 1 2
0 1/7 2/7 1/7
1 1/7 1/7 1/7

Вычислить
ковариацию cov(ξ-η,η+5ξ). Зависимы ли ξ и η?


Задача 14

Рассчитать
коэффициенты ковариации и корреляции на основе заданного закона распределения
двумерной случайной величины и сделать выводы о тесноте связи между X и Y.

XY 2,3 2,9 3,1 3,4
0,2 0,15 0,15 0 0
2,8 0 0,25 0,05 0,01
3,3 0 0,09 0,2 0,1

Задача 15

Задан
закон распределения случайного вектора (ξ,η). Найдите ковариацию (ξ,η)
и коэффициент корреляции случайных величин.

xy 1 4
-10 0,1 0,2
0 0,3 0,1
20 0,2 0,1

Задача 16

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

а) законы
распределения ее компонент и их числовые характеристики;

b) условные законы распределения СВ X при условии Y=b и СВ Y при
условии X=a, где a и b – наименьшие значения X и Y.

с)
ковариацию и коэффициент корреляции случайных величин X и Y;

d) составить матрицу ковариаций и матрицу корреляций;

e) вероятность попадания в область, ограниченную линиями y=16-x2 и y=0.

f) установить, являются ли случайные величины X и Y зависимыми;
коррелированными.

XY -1 0 1 2
-1 0 1/6 0 1/12
0 1/18 1/9 1/12 1/9
2 1/6 0 1/9 1/9

Задача 17

Совместный
закон распределения случайных величин X и Y задан таблицей:

XY

0

1

3

0

0,15

0,05

0,3

-1

0

0,15

0,1

-2

0,15

0

0,1

Найдите:

а) закон
распределения случайной величины X и закон распределения
случайной величины Y;

б) EX, EY, DX, DY, cov(2X+3Y, X-Y), а
также математическое ожидание и дисперсию случайной величины V=6X-8Y+3.


Задача 18

Известен
закон распределения двумерной случайной величины (X,Y).

а) найти
законы распределения составляющих и их числовые характеристики (M[X],D[X],M[Y],D[Y]);

б)
составить условные законы распределения составляющих и вычислить
соответствующие мат. ожидания;

в)
построить поле распределения и линию регрессии Y по X и X по Y;

г)
вычислить корреляционный момент (коэффициент ковариации) μxy и
коэффициент корреляции rxy.

5 20 35
100 0.05
115 0.2 0.15
130 0.15 0.35
145 0.1 —-

Все курсы > Оптимизация > Занятие 3

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

Откроем ноутбук к этому занятию⧉

Возьмем вот такой простой набор данных.

toy_df = pd.DataFrame({

    ‘a’:[1, 4, 5, 6, 9],

    ‘b’:[2, 3, 5, 6, 8],

    ‘c’:[6, 5, 4, 3, 2],

    ‘d’:[7, 4, 3, 4, 6]

})

toy_df

датасет для демонстрации взаимосвязи переменных

Посмотрим на распределения величин с помощью boxplot.

plt.figure(figsize = (8, 6))

sns.boxplot(data = toy_df)

plt.show()

распределения переменных искусственного датасета

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

Начнем с расчета дисперсии.

Дисперсия

Дисперсия (variance) показывает изменение переменной относительно среднего значения. Приведем формулу для расчета дисперсии генеральной совокупности.

$$ sigma^2 = frac{sum (x_i-mu)^2}{N} $$

где $mu$ — среднее генеральной совокупности из $ x_i $ элементов, а $N$ — ее размер. Дисперсию выборки мы рассчитываем немного иначе.

$$ s^2 = frac{sum (x_i-bar{x})^2}{n-1} $$

В данном случае деление на $n-1$, а не на $n$ называется поправкой Бесселя (Bessel’s correction). Зачем нужна такая поправка? Оказывается, можно показать, что сумма квадратов расстояний, то есть числитель формулы, до среднего генсовокупности (population mean) будет всегда больше, чем сумма квадратов расстояний до выборочного среднего (sample mean).

Как следствие, если при расчете выборочной дисперсии делить на $n$, то мы будем постоянно недооценивать дисперсию генсовокупности. Поправка с делением на $ n-1 $ увеличит дисперсию выборки и сделает ее несмещенной оценкой (unbiased estimation) дисперсии генеральной совокупности.

Приведем основные выводы для показателя дисперсии.

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

Замечу, что далее мы в большинстве случаев будем приводить формулы и вычислять именно выборочные показатели.

Найдем дисперсию для переменной a.

# применим формулу дисперсии к первому столбцу

(np.square(toy_df[‘a’] toy_df[‘a’].mean())).sum() / (toy_df.shape[0] 1)

Дисперсию для каждой переменной можно измерить с помощью функции np.var() библиотеки Numpy.

# рассчитаем дисперсию по столбцам с делением на n — 1

np.var(toy_df, ddof = 1)

a    8.5

b    5.7

c    2.5

d    2.7

dtype: float64

Точно такой же результат можно получить с помощью метода .var() библиотеки Pandas.

# ddof = 1 можно не указывать, это параметр по умолчанию

toy_df.var()

a    8.5

b    5.7

c    2.5

d    2.7

dtype: float64

Параметр ddof означает Delta Degrees of Freedom (дельта степеней свободы) и указывает на размер поправки при расчете дисперсии выборки. Соответственно ddof = 1 как раз использует деление на $n-ddof = n-1$. Как мы видим, дисперсия переменной a существенно больше, чем, например, переменной d.

Показатель дисперсии представляет собой квадрат измеряемых нами величин. Для понимания величины отклонения это не очень удобно. В этом смысле лучше подойдет среднее квадратическое отклонение.

Среднее квадратическое отклонение

Среднее квадратическое отклонение (СКО, standard deviation) как раз вычисляется как корень из дисперсии.

$$ sigma = sqrt{sigma^2} $$

$$ s = sqrt{s^2} $$

Рассчитаем СКО для первого столбца.

np.sqrt((np.square(toy_df[‘a’] toy_df[‘a’].mean())).sum() / (toy_df.shape[0] 1))

Мы также можем использовать функцию np.std() библиотеки Numpy и метод .std() библиотеки Pandas.

# для расчета СКО будем также делить на n — 1

np.std(toy_df, ddof = 1)

a    2.915476

b    2.387467

c    1.581139

d    1.643168

dtype: float64

# опять же, этот параметр установлен по умолчанию, и его можно не указывать

toy_df.std()

a    2.915476

b    2.387467

c    1.581139

d    1.643168

dtype: float64

Теперь перейдем к изучению взаимосвязи между переменными. Одним из способов измерения взаимосвязи является ковариация.

Ковариация

Ковариация (covariance) измеряет направление изменения двух переменных. Другими словами она позволяет понять как изменится одна из двух переменных при изменении второй.

Построим три точечные диаграммы (scatter plots) для переменных a и b, b и c, и c и d соответственно.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# создадим сетку 1 х 3 с подграфиками для каждой из пар переменных

f, (pair1, pair2, pair3) = plt.subplots(nrows = 1,

                                        ncols = 3,

                                        figsize = (12, 4),

                                        constrained_layout = True)

# в первый подграфик поместим точечную диаграмму переменных a и b

pair1.scatter(toy_df[‘a’], toy_df[‘b’])

pair1.set_title(‘a vs. b’, fontsize = 14)

pair1.set(xlabel = ‘a’)

pair1.set(ylabel = ‘b’)

# во второй — b и c

pair2.scatter(toy_df[‘b’], toy_df[‘c’])

pair2.set_title(‘b vs. c’, fontsize = 14)

pair2.set(xlabel = ‘b’)

pair2.set(ylabel = ‘c’)

# в третий — c и d

pair3.scatter(toy_df[‘c’], toy_df[‘d’])

pair3.set_title(‘c vs. d’, fontsize = 14)

pair3.set(xlabel = ‘c’)

pair3.set(ylabel = ‘d’)

plt.show()

ковариация: три точечные диаграммы

На первом и втором графике мы видим линейную взаимосвязь. Приведем формулу для ее измерения.

$$ Cov_{x, y} = frac{sum (x_i-bar{x})(y_i-bar{y})}{n-1} $$

Как вы видите, ковариация представляет собой сумму произведений отклонений переменных от своего среднего значения, усредненную на количество наблюдений ($n-1$).

Рассчитаем ковариацию a и b с помощью Питона.

((toy_df[‘a’]   toy_df[‘a’].mean()) * (toy_df[‘b’] toy_df[‘b’].mean())).sum() / (toy_df.shape[0] 1)

Если использовать функцию np.cov() библиотеки Numpy или метод .cov() библиотеки Pandas, то мы получим так называемую ковариационную матрицу (covariance matrix).

# для расчета по столбцам нужно использовать параметр rowvar = False

np.cov(toy_df, ddof = 1, rowvar = False)

array([[ 8.5 ,  6.75, -4.5 , -1.  ],

       [ 6.75,  5.7 , -3.75, -0.55],

       [-4.5 , -3.75,  2.5 ,  0.5 ],

       [-1.  , -0.55,  0.5 ,  2.7 ]])

ковариационная матрица

По диагонали указана дисперсия, вне диагонали — ковариация любых двух переменных.

Переменные a и b имеют положительную ковариацию, с увеличением a увеличивается и b. Переменные b и c — отрицательную, переменные c и d демонстрируют нулевую или близкую к нулевой ковариацию.

Интересно, что если переменные независимы (между ними нет взаимосвязи) — ковариация будет равна нулю, при этом обратное не обязательно верно. Если ковариация равна нулю, взаимосвязь может быть, просто она нелинейна (возможно именно такая взаимосвязь существует между c и d).

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

# умножим данные на три, рассчитаем ковариацию

# и разделим на ковариационную матрицу исходного датасета,

# чтобы посмотреть масштаб изменения

(toy_df * 3).cov() / toy_df.cov()

воздействие умножения данных на число на ковариационную матрицу

Этот недостаток исправляет коэффициент корреляции.

Корреляция

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

Параметрические и непараметрические тесты

Прежде чем перейти к различным коэффициентам корреляции несколько слов про разделение статистических тестов или методов на параметрические и непараметрические.

Параметрические методы (parametric methods) основываются на допущении (assumption) или предпосылке о том, как распределена генеральная совокупность, из которой взята изучаемая выборка. Например, статистический тест может предполагать, что данные имеют нормальное распределение.

Непараметрические методы (non-parametric) таких допущений соответственно не предполагают.

На практике это означает, что если допущения параметрического теста не выполняются, его результат нельзя считать достоверным. Для непараметрического теста такое ограничение отсутствует.

Коэффициент корреляции Пирсона

Коэффициент корреляции Пирсона (Pearson correlation coefficient) — это параметрический тест, который строится на основе расчета ковариации двух переменных, разделенного на произведение СКО каждой из них.

$$ r_{pearson} = frac{Cov_{x, y}}{s_x s_y} $$

Деление на произведение СКО $(s_x s_y)$ выражает любой коэффициент ковариации в единицах этого произведения (нормализует его). Как следствие, мы получаем возможность сравнения коэффициентов корреляции, а значит измерения не только направления, но и силы взаимосвязи.

Коэффициент корреляции всегда находится в диапазоне от $-1$ до $1$.

Значения, приближающиеся к 1 указывают на сильную положительную линейную корреляцию. Близкие к −1 — на сильную отрицательную линейную корреляцию. Околонулевые значения означают отсутствие линейной корреляции.

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

пример различных коэффициентов корреляции Пирсона

Библиотека Numpy предлагает нам функцию np.corrcoef() для создания корреляционной матрицы (correlation matrix) коэффициента Пирсона.

# для расчета корреляции по столбцам используем параметр rowvar = False

np.corrcoef(toy_df, rowvar = False).round(2)

array([[ 1.  ,  0.97, -0.98, -0.21],

       [ 0.97,  1.  , -0.99, -0.14],

       [-0.98, -0.99,  1.  ,  0.19],

       [-0.21, -0.14,  0.19,  1.  ]])

В Pandas мы можем воспользоваться методом .corr().

# параметр method = ‘pearson’ используется по умолчанию,

# его можно не указывать

toy_df.corr(method = ‘pearson’).round(2)

корреляционная матрица

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

Продемонстрируем также, что изменение масштаба данных не отразится на коэффициенте корреляции.

# умножим значения датасета на два и снова рассчитаем коэффициент Пирсона

(toy_df * 2).corr().round(2)

корреляция не зависит от масштаба данных

Особенности коэффициента Пирсона

Несколько важных замечаний.

Замечание 1. Ни ковариация, ни корреляция не устанавливают причинно-следственной связи (correlation does not imply causation). Например, мы можем наблюдать существенную корреляцию между потреблением мороженого и продажами кондиционеров, при этом изменения в обеих переменных могут быть вызваны третьей, на рассматриваемой нами переменной, в частности, температурой воздуха.

корреляция не устанавливает причинно-следственной связи: потребление мороженого и продажи кондиционеров

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

Замечание 2. Коэффициент корреляции Пирсона измеряет взаимосвязь (1) количественных переменных и (2) предполагает, что обе переменные имеют нормальное распределение (это и есть упомянутое выше допущение (assumption) параметрического теста).

Замечание 3. Как и в случае с ковариацией, отсутствие линейной корреляции не означает отсутствие взаимосвязи. Возможно взаимосвязь есть, но она нелинейна.

Замечание 4. Более того, на коэффициент корреляции существенное влияние оказывают выбросы (outliers).

Последние два замечения хорошо иллюстрируются квартетом Энскомба (Anscombe’s quartet), набором небольших датасетов (кстати, встроенных в сессионное хранилище Google Colab) с совершенно разными распределениями x и y, но одинаковым средним арифметическим и СКО переменной y, а также одинаковым коэффициентом корреляции Пирсона.

Вначале получим необходимые данные.

# загрузим данные в формате json из сессионного хранилища,

# преобразуем в датафрейм и посмотрим на первые три строки

anscombe = pd.read_json(‘/content/sample_data/anscombe.json’)

anscombe.head(3)

квартет Энскомба в Google Colab

# разобьем данные на четыре части по столбцу Series

series_by_group = [x for _, x in anscombe.groupby(‘Series’)]

# отдельно получим названия каждой из четырех частей

labels = anscombe.Series.unique()

labels

array([‘I’, ‘II’, ‘III’, ‘IV’], dtype=object)

# создадим пустой словарь

datasets = {}

# в цикле пройдемся по названиям и значениям переменных x и y каждой из частей

for label, series in zip(labels, series_by_group):

  # каждое название части станет ключом словаря, а переменные x и y — значениями

  datasets[label] = (list(series.X.round(2)), list(series.Y.round(2)))

# выведем содержимое словаря с помощью функции pprint()

from pprint import pprint

pprint(datasets)

{‘I’: ([10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5],

       [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.81, 5.68]),

‘II’: ([10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5],

        [9.14, 8.14, 8.74, 8.77, 9.26, 8.1, 6.13, 3.1, 9.13, 7.26, 4.74]),

‘III’: ([10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5],

         [7.46, 6.77, 12.74, 7.11, 7.81, 8.84, 6.08, 5.39, 8.15, 6.42, 5.73]),

‘IV’: ([8, 8, 8, 8, 8, 8, 8, 19, 8, 8, 8],

        [6.58, 5.76, 7.71, 8.84, 8.47, 7.04, 5.25, 12.5, 5.56, 7.91, 6.89])}

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

# создадим сетку подграфиков 2 х 2

fig, axs = plt.subplots(2, 2,

                        sharex = True,

                        sharey = True,

                        figsize = (10, 10),

                        gridspec_kw = {‘wspace’: 0.08, ‘hspace’: 0.08})

# определим границы осей и отметки на осях x и y

axs[0, 0].set(xlim = (0, 20), ylim = (2, 14))

axs[0, 0].set(xticks = (0, 10, 20), yticks = (4, 8, 12))

# пройдемся по подграфикам, а также ключам и значениям словаря datasets

for ax, (label, (x, y)) in zip(axs.flat, datasets.items()):

    # выведем название (номер) группы

    ax.text(0.1, 0.9, label, fontsize = 20, transform = ax.transAxes, va = ‘top’)

    ax.tick_params(direction = ‘in’, top = True, right = True)

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

    ax.scatter(x, y)

    # обучим модель линейной регрессии

    slope, intercept = np.polyfit(x, y, deg = 1)

    # выведем график линейной регрессии

    x_vals = np.linspace(0, 20, num = 1000)

    y_vals = intercept + slope * x_vals

    ax.plot(x_vals, y_vals, ‘r’)

    # рассчитаем среднее арифметическое, СКО и корреляцию Пирсона

    stats = (f‘$\mu$ = {np.mean(y):.2f}n’

             f‘$\sigma$ = {np.std(y):.2f}n’

             f‘$r$ = {np.corrcoef(x, y)[0][1]:.2f}’)

    # создадим отформатированное пространство на графике

    bbox = dict(boxstyle = ‘square’, pad = 0.5,

                fc = ‘#c5d4e6’,

                ec = ‘#89a8cc’,

                alpha = 0.5)

    # и выведем в нем рассчитанные выше статистические показатели

    ax.text(0.95, 0.07, stats, fontsize = 15,

            bbox = bbox, transform = ax.transAxes,

            horizontalalignment = ‘right’)

plt.show()

квартет Энскомба на графиках

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

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

Коэффициент Пирсона как скалярное произведение векторов

Распишем формулу корреляции более подробно (см. формулы ковариации, дисперсии и СКО).

$$ r_{pearson} = frac{ frac{sum (x_i-bar{x})(y_i-bar{y})}{n-1} }{ sqrt {frac{sum (x_i-bar{x})^2}{n-1} frac{sum (y_i-bar{y})^2}{n-1} } } $$

Упростим выражение.

$$ r_{pearson} = frac{ sum (x_i-bar{x})(y_i-bar{y}) } { sqrt {sum (x_i-bar{x})^2} sqrt{ sum (y_i-bar{y})^2 } } $$

Теперь давайте представим случайные величины X и Y в форме векторов

$$ textbf{x} = [x_1, x_2, x_3,…, x_n] $$

$$ textbf{y} = [y_1, y_2, y_3,…, y_n] $$

со средними значениями $ bar{x} $ и $ bar{y} $. Затем определим новые векторы $ textbf{x}^c $ и $ textbf{y}^c $, в которых из значений $x_i$ и $y_i$ вычтем соответствующие средние значения.

$$ textbf{x}^c = [x_1-bar{x}, x_2-bar{x}, x_3-bar{x},…, x_n-bar{x}] $$

$$ textbf{y}^c = [y_1-bar{x}, y_2-bar{x}, y_3-bar{y},…, y_n-bar{y}] $$

Обратим внимание, что (1) числитель (1) в формуле коэффициента корреляции представляет собой покомпонентное умножение векторов с последующим сложением произведений (то есть скалярное произведение).

Знаменатель (2) же представляет собой покомпонентное умножение и сложение произведений векторов самих на себя. Как мы узнаем на курсе линейной алгебры, корень из скалярного произведение вектора на самого себя есть длина этого вектора. Приведем пример для вектора $ textbf{x} $

$$ sqrt { textbf{x}^2 } = sqrt { textbf{x} cdot textbf{x} } = || textbf{x} || $$

Исходя из этих двух соображений, перепишем формулу расчета коэффициента Пирсона.

$$ r_{pearson} = frac { textbf{x}^c cdot textbf{y}^c }{|| textbf{x}^c || cdot || textbf{y}^c || } $$

Это формула косинусного сходства двух векторов. Другими словами, коэффициент корреляции равен косинусу угла между двумя векторами данных. Рассчитаем корреляцию через косинусное сходство с помощью Питона.

# возьмем данные первой группы квартета Энскомба

x = np.array([10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5])

y = np.array([8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.81, 5.68])

# вычтем из каждого значения x и y соответствующее среднее арифметическое

xc = x np.mean(x)

yc = y np.mean(y)

# используем формулу косинусного сходства и округлим результат

np.round(np.dot(xc, yc)/(np.linalg.norm(xc) * np.linalg.norm(yc)), 2)

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

Коэффициент ранговой корреляции Спирмена

Коэффициент ранговой корреляции Спирмена (Spearman’s Rank Correlation Coefficient) хорошо измеряет постоянно возрастающую или постоянно убывающую (монотонную) зависимость двух переменных, а также подходит для работы с категориальными порядковыми данными.

Это непараметрический тест, который не предполагает каких-либо допущений о распределении генеральной совокупности.

Монотонная зависимость

Напомню, что функция или зависимость называется монотонной (monotonic), если на заданном интервале ее производная (градиент) не меняет знака (то есть всегда имеет неотрицательное или неположительное значение). Приведем пример.

монотонно возрастающая, монотонно убывающая и немонотонная функции

Рассмотрим взаимосвязь площади (area) и цены (price) квартиры.

# поместим данные площади и цены квартиры в датафрейм

flats = pd.DataFrame({

    ‘area’    :[78, 90, 74, 69, 63, 57, 72, 67, 83],

    ‘price’   :[9.1, 9.0, 8.9, 8.2, 6.0, 5.8, 8.7, 7.5, 9.2]

})

flats

количественные данные для расчета коэффициента ранговой корреляции Спирмена

Выведем эти данные с помощью точечной диаграммы (scatter plot).

plt.figure(figsize = (8, 6))

plt.scatter(flats.area, flats.price)

plt.xlabel(‘Площадь, кв. м.’, fontsize = 15)

plt.ylabel(‘Цена, млн. руб.’, fontsize = 15)

plt.grid()

plt.show()

точечная диаграмма данных о самочувствии пациентов до и после лечения

Рассчитаем коэффициент корреляции Пирсона.

# применим метод .corr() с параметром method = ‘pearson’

# выведем одно из значений корреляционной матрицы с помощью .iloc[0, 1] и округлим результат

flats.corr(method = ‘pearson’).iloc[0, 1].round(2)

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

Обратите внимание, прежде чем построить график, Питон упорядочил значения площади (ось x). Упорядочил, то есть присвоил им ранг (порядковый номер) от первого до, в данном примере, девятого. В каком случае значения цены (ось y) будут также возрастать? Только в случае если их ранги мало отличаются от рангов значений площади квартиры.

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

Приведем формулу.

$$ r_{spearman} = frac{6 sum d_i^2 }{n(n^{2}-1)} $$

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

# для этого используем метод .rank() с параметром ascending = False

flats[‘area_rank’] = flats.area.rank(ascending = False)

flats[‘price_rank’] = flats.price.rank(ascending = False)

flats

расчет рангов коэффициента корреляции Спирмена

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

# вычтем из рангов площади ранги цены

flats[‘diff’] = flats[‘area_rank’] flats[‘price_rank’]

# возведем разницу в квадрат

flats[‘diff_sq’] = np.square(flats[‘diff’])

flats

квадрат разницы рангов коэффициента корреляции Спирмена

Выполним оставшиеся вычисления в соответствии с приведенной выше формулой.

# поместим количество наблюдений в переменную n

n = flats.shape[0]

# применим формулу для расчета коэффициента Спирмена

1 ((6 * flats[‘diff_sq’].sum()) / (n * (n**2 1)))

Рассчитаем корреляцию Спирмена с помощью метода .corr() библиотеки Pandas с параметром method = ‘spearman’.

flats[[‘area’, ‘price’]].corr(method = ‘spearman’).iloc[0, 1].round(2)

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

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

Категориальные порядковые данные

Как уже было сказано, помимо количественных значений коэффициент Спирмена способен измерить направление и силу взаимосвязи категориальных порядковых значений (categorical ordinal data).

Это могут быть оценки уровня удовлетворености клиента (очень понравилось, понравилось, не понравилось), размеры, выраженные категорией (S, M, L, …) и так далее.

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

# создадим датафрейм с данными о самочувствии

treatment = pd.DataFrame(

    [

        [3, 2],

        [4, 3],

        [2, 1],

        [1, 5],

        [6, 7],

        [7, 6],

        [5, 4]

    ],

    columns = [‘Before’, ‘After’])

treatment

коэффициент корреляции Спирмена: данные о самочувствии

# выведем данные на графике

plt.figure(figsize = (8, 6))

plt.scatter(treatment.Before, treatment.After)

plt.xlabel(‘Before’, fontsize = 15)

plt.ylabel(‘After’, fontsize = 15)

plt.grid()

plt.show()

коэффициент корреляции Спирмена: точечная диаграмма данных

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

# найдем квардрат разницы рангов

treatment[‘diff’] = treatment[‘Before’] treatment[‘After’]

treatment[‘diff_sq’] = np.square(treatment[‘diff’])

treatment

коэффициент корреляции Спирмена: разница рангов и квадрат этой разницы

# применим формулу коэффициента корреляции Спирмена

n = treatment.shape[0]

round(1 ((6 * treatment[‘diff_sq’].sum()) / (n * (n**2 1))), 2)

Остается сравнить с методом .corr() библиотеки Pandas.

treatment[[‘Before’, ‘After’]].corr(method = ‘spearman’).iloc[0, 1].round(2)

Обратите внимание, ни в количественных данных, ни в порядковых у нас не было повторяющихся или совпадающих наблюдений. В случае совпадающих наблюдений (tied ranks), то есть когда значения x или y повторяются, расчет коэффициента корреляции Спирмена также возможен, но немного усложняется.

Коэффициент ранговой корреляции Кендалла

Коэффициент ранговой корреляции Кендалла (еще говорят тау Кендалла или тау-коэффициент, Kendall’s $tau$ rank correlation coefficient), как и метод Спирмена, может применяться для измерения силы взаимосвязи количественных и порядковых категориальных переменных и подходит для анализа нелинейных зависимостей. Это также непараметрический тест.

Смысл и методику расчета коэффициента Кендалла легко понять на примере. Вновь возьмем данные о самочувствии до и после лечения.

# вернем датафрейм к исходному виду

treatment = treatment[[‘Before’, ‘After’]]

treatment

коэффициент корреляции Кендалла: данные о самочувствии

Теперь рассмотрим две пары наблюдений, например, под индексом 0 и 1.

пары наблюдений 0 и 1

Мы видим, что в столбце Before значения наблюдения 0 меньше, чем значение наблюдения 1 (потому что 3 < 4). То же самое можно наблюдать в столбце After (2 < 3). Такая пара наблюдений называется конкордантной (concordant). Конкордантной будет и пара наблюдений, где оба значения в первом наблюдении больше обоих значений во втором. К ним относятся, например, пары 1 и 2 (где 4 > 2, а 3 > 1).

пары наблюдений 1 и 2

Если же описанные выше условия не выполняются, то такая пара наблюдений будет называться дискордантной (discordant). К таким наблюдениям относятся, например, наблюдения 4 и 5 (6 > 7, но 7 < 6).

пары наблюдений 4 и 5

Отнесем каждую из пар нашего датасета к одному из этих классов.

# 0

# 1 C

# 2 C  C

# 3 D  D  D

# 4 C  C  C  C

# 5 C  C  C  C  D

# 6 C  C  C  D  C  C

#   0  1  2  3  4  5  6

Получилось 16 конкордантных (C) и 5 дискордантных (D) пар. Их общее количество очевидно равно 21. Это значение удобно посчитать по формуле сочетаний.

$$ C(n, r) = frac{n!}{(n-r)! r!} rightarrow C(7, 2) = frac{7!}{(7-2)! 2!} = 21 $$

где n — количество наблюдений, а r равно двум, потому что мы ищем сочетания пар элементов. Можно воспользоваться и упрощенной формулой.

$$ C(r) = frac{(n cdot (n-1))}{2} rightarrow C(7) = frac{7 cdot (7-1)}{2} = 21 $$

# найдем количество парных сочетаний с помощью Питона

n = 7

pairs = (7 * (7 1)) // 2

pairs

Так вот, коэффициент корреляции Кендалла показывает соотношение конкордантных и дискордантных пар по следующей формуле.

$$ tau = frac{text{concordant pairs}-text{discordant pairs}}{text{total pairs}}$$

Применим ее к нашему датасету.

concordant = 16

discordant = pairs concordant

np.round((concordant discordant) / pairs, 2)

Точно такого же результата можно добиться с помощью метода .corr() библиотеки Pandas.

treatment.corr(method = ‘kendall’).iloc[0, 1].round(2)

Смысл этого коэффициента в следующем.

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

Коэффициент неопределенности

Определение и понятие симметричности теста

Коэффициент неопределенности (uncertainty coefficient) или U Тиля (Theil’s U) позволяет оценить взаимосвязь между двумя категориальными признаками, например, X и Y. Формально он определяется как значение X при условии данного Y.

$$U(x|y)$$

Более того, в отличие от некоторых других тестов, он несимметричен (asymmetric), что позволяет узнать зависит ли Y от X, так же как X от Y.

$$U(y|x) neq U(x|y)$$

Понятие симметричности теста легко представить на следующем простом примере.

симметричность статистического теста

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

Используем этот несложный датасет для дальнейших расчетов.

# возьмем две категориальные переменные со следующими значениями

x = np.array([‘q’, ‘t’, ‘q’, ‘n’, ‘n’, ‘c’])

y = np.array([‘A’, ‘A’, ‘A’, ‘B’, ‘B’, ‘B’])

Как рассчитывается

Условная энтропия

U Тиля основывается на понятии условной энтропии (condition entropy), которая позволяет измерить объем информации, необходимый для описания значений переменной X с помощью переменной Y.

$$ S(X|Y) = -sum p(x,y) logfrac{p(x,y)}{p(y)} $$

Теоретическое обоснование формул условной энтропии и энтропии выходит за рамки сегодняшнего занятия. Мы сосредоточимся на расчете и практическом применении каждой из них.

Рассчитаем условную энтропию с помощью Питона. Вначале нам необходимо рассчитать частоту классов категориальных переменных. Для этого прекрасно подойдет класс Counter модуля collections.

# импортируем класс Counter модуля collections

from collections import Counter

Посмотрим, сколько раз встречаются классы переменной Y.

# найдем частоту классов переменной y

y_counts = Counter(y)

y_counts

Counter({‘A’: 3, ‘B’: 3})

Далее возьмем каждую пару значений X и Y и рассчитаем, сколько раз встречается каждая из них.

# возьмем каждую пару значений X и Y с помощью функций zip() и list()

list(zip(x, y))

[(‘q’, ‘A’), (‘t’, ‘A’), (‘q’, ‘A’), (‘n’, ‘B’), (‘n’, ‘B’), (‘c’, ‘B’)]

# рассчитаем их частоту

xy_counts = Counter(list(zip(x, y)))

xy_counts

Counter({(‘A’, ‘q’): 2, (‘A’, ‘t’): 1, (‘B’, ‘n’): 2, (‘B’, ‘c’): 1})

Теперь найдем общее количество значений.

total_counts = len(x)

total_counts

В соответствии с формулой выше нам нужно найти вероятность Y ($p(y)$) и вероятность X при условии Y ($p(x,y)$). Для расчета $p(y)$ мы пройдемся по ключам словаря xy_counts и посмотрим в словаре y_counts сколько раз встречается второй элемент каждого ключа.

# пройдемся по ключам xy_counts

for xy in xy_counts.keys():

  # (выведем ключ для наглядности)

  print(xy)

  # и посмотрим в y_counts сколько раз встречается второй элемент каждого кортежа

  print(y_counts[xy[1]])

(‘q’, ‘A’)

3

(‘t’, ‘A’)

3

(‘n’, ‘B’)

3

(‘c’, ‘B’)

3

Мы видим, что категория A и категория B в нашем случае встречаются по три раза. Остается разделить частоту каждой категории на общее количество элементов.

# найдем p(y) разделив каждую частоту на общее количество элементов

for xy in xy_counts.keys():

  print(y_counts[xy[1]] / total_counts)

Выполним похожее упражнение для того, чтобы найти $p(x,y)$.

# снова пройдемся по парам значений

for xy in xy_counts.keys():

  # (выведем эти пары для наглядности)

  print(xy)

  # выведем частоту каждой пары (на этот раз именно пары, а нее ее второго элемента)

  print(xy_counts[xy])

  # и рассчитаем вероятность

  print(xy_counts[xy] / total_counts)

(‘q’, ‘A’)

2

0.3333333333333333

(‘t’, ‘A’)

1

0.16666666666666666

(‘n’, ‘B’)

2

0.3333333333333333

(‘c’, ‘B’)

1

0.16666666666666666

# для дальнейшей работы нам понадобится модуль math

import math

Теперь остается подставить $p(y)$ и $p(x,y)$ в формулу.

# объявим переменную для условной энтропии

cond_entropy = 0.0

# в цикле снова пройдемся по парам значений

for xy in xy_counts.keys():

  # найдем p(y)

  p_y = y_counts[xy[1]] / total_counts

  # и p(x,y)

  p_xy = xy_counts[xy] / total_counts

  # подставим их в формулу и просуммируем результат

  # (мы использовали логарифм с основанием два, но можно использовать, например, и натуральный логарифм)

  cond_entropy += p_xy * math.log(p_y / p_xy, 2)

cond_entropy

Поместим этот код в функцию.

# поместим код в функцию

def conditional_entropy(x, y, log_base: float = 2):

  y_counts = Counter(y)

  xy_counts = Counter(list(zip(x, y)))

  total_counts = len(x)

  cond_entropy = 0.0

  for xy in xy_counts.keys():

      p_xy = xy_counts[xy] / total_counts

      p_y = y_counts[xy[1]] / total_counts

      cond_entropy += p_xy * math.log(p_y / p_xy, log_base)

  return cond_entropy

# вновь рассчитаем условную энтропию

conditional_entropy(x, y)

Убедимся в несимметричности объема информации, содержащегося в X относительно Y и в Y относительно X, поменяв переменные местами.

conditional_entropy(y, x)

Здесь становится очевидным важный факт.

Если условная энтропия равна нулю, это значит, что с помощью переменной Y мы можем полностью описать переменную X (в нашем примере наоборот). При этом, чем выше условная энтропия, тем меньше информации об X содержится в переменной Y.

Теперь рассмотрим второй компонент формулы коэффициента неопределенности.

Энтропия

Энтропия (entropy) случайной величины рассчитывается по следующей формуле.

$$ S(X) = -sum p(x)log{p(x)} $$

Это значение тем выше, чем менее вероятным является каждый из исходов испытания. Например, энтропия бросания игральной кости будет выше, чем подбрасывания монеты. В первом случае вероятность каждого исхода равна 1/6, во втором 1/2.

Убедимся в этом с помощью функции entropy() модуля stats библиотеки scipy.

# импортируем модуль stats библиотеки scipy

import scipy.stats as st

# рассчитаем энтропию бросания кости и подбрасывания монеты

st.entropy([1/6, 1/6, 1/6, 1/6, 1/6, 1/6], base = 2), st.entropy([1/2, 1/2], base = 2)

Выполним расчет вручную. Вначале найдем вероятность каждого из значений случайной величины $p(x)$.

# найдем частоту каждого элемента в X

x_counts = Counter(x)

# их общее количество

total_counts = len(x)

# разделим каждую частоту на общее количество элементов

p_x = list(map(lambda n: n / total_counts, x_counts.values()))

# выведем результат

print(p_x)

[0.3333333333333333, 0.16666666666666666, 0.3333333333333333, 0.16666666666666666]

Теперь подставим это значение в формулу и найдем энтропию.

# объявим переменную для условной энтропии

entropy = 0.0

# подставим каждую вероятность в формулу и просуммируем

for p in p_x:

  entropy += p * math.log(p, 2)

# выведем результат

entropy

Проверим правильность результата с помощью функции библиотеки scipy().

st.entropy(p_x, base = 2)

Также объявим соответствующую функцию.

# объявим функцию

def entropy(x, log_base: float = 2):

  x_counts = Counter(x)

  total_counts = len(x)

  p_x = list(map(lambda n: n / total_counts, x_counts.values()))

  entropy = 0.0

  for p in p_x:

    entropy += p * math.log(p, 2)

  return entropy

# проверим результат

entropy(x)

Замечу, что условная энтропия S(X|Y) равна энтропии случайной величины S(X), если величины X и Y независимы.

$$ S(X|Y) = S (X) iff X ⫫ Y $$

Из этого следует, что самое большее условная энтропия может быть равна энтропии этой переменной (в случае, если Y никак не объясняет X).

$$ S(X) leq S(X|Y) $$

Все это важно для расчета коэффициента неопределенности.

U Тиля

Приведем и обсудим формулу.

$$ U(X|Y) = frac{S(X)-S(X|Y)}{S(X)} $$

Зачем рассчитывать не только условную энтропию, но и энтропию случайной величины? Дело в том, что так мы можем не просто измерять «объяснимость» переменной X с помощью Y, но и сравнивать между собой условную энтропию любых категориальных переменных.

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

Таким образом, U Тиля всегда находится в диапазоне от 0 до 1. При этом, ноль означает, что переменная Y не несет никакой информации относительно переменной X, единица — что переменная Y содержит всю необходимую информацию.

Рассчитаем U Тиля с помощью Питона.

# сразу объявим функцию

def ucoef(x, y, log_base = 2):

  # найдем условную энтропию S(X,Y)

  s_xy = conditional_entropy(x, y, log_base)

  # энтропию S(X)

  s_x = entropy(x, log_base)

  # подставим эти значения в формулу

  u = (s_x s_xy) / s_x

  # выведем результат

  return u

Найдем коэффициент неопределенности для X и Y.

Кроме того, убедимся, что X полностью объясняет Y.

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

Точечно-бисериальная корреляция

Точечно-бисериальная корреляция (point-biserial correlation) позволяет оценить взаимосвязь между количественной переменной и дихотомической (выраженной двумя значениями) качественной переменной. Например, нам может быть важно оценить связь возраста (X) и выживаемости пассажиров «Титаника» (Y, классы 0 и 1). Приведем формулу.

Формула

$$ r_{pb} = frac{M_1-M_0}{s_n} sqrt{frac{n_1 n_0}{n^2}} $$

В данном случае мы делим наблюдения на две группы, в первую группу попадут наблюдения, относящиеся к классу 0, во вторую — к классу 1. Для каждой группы мы считаем средние значения ($M_0$ и $M_1$) и делим их разность на среднее квадратическое отклонение всех значений в переменной X ($s_n$).

Под корнем находится произведение относительного размера двух групп ($n_0$ и $n_1$ — это размеры групп, $n$ — общее число наблюдений).

Коэффициент точечно-бисериальной корреляции находится в диапазоне от $-1$ до $1$ и интерпретируется так же, как и коэффициент корреляции Пирсона.

Выше приведена формула для генеральной совокупности. Если нам доступна лишь выборка, формула выглядит следующим образом.

$$ r_{pb} = frac{M_1-M_0}{s_{n-1}} sqrt{frac{n_1 n_0}{n(n-1)}} $$

СКО ($s_{n-1}$) в этом случае также рассчитывается по формуле для выборки. Приведем пример.

Пример расчета на Питоне

Подгрузим датасет о вине из библиотеки sklearn. На основе свойств вин нам предлагается спрогнозировать один из трех классов вина (классы 0, 1 и 2). Так как нам нужна дихотомическая переменная, удалим наблюдения, относящиеся к классу 2.

# из модуля datasets библиотеки sklearn импортируем датасет о вине

from sklearn import datasets

data = datasets.load_wine()

# превратим его в датафрейм

wine = pd.DataFrame(data.data, columns = data.feature_names)

# добавим целевую переменную

wine[‘target’] = data.target

# оставим только классы 0 и 1

wine = wine[wine.target != 2]

# убедимся, что в целевой переменной осталось только два класса

np.unique(wine.target)

Найдем корреляцию между целевой переменной и содержанием пролина (proline).

# оставим только интересующие нас столбцы

wine = wine[[‘proline’, ‘target’]]

wine.head(3)

точечно-бисериальная корреляция

Теперь напишем функцию для расчета точечно-бисериальной корреляции (будем использовать формулу для выборки).

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

# объявим функцию для расчета точечно-бисериальной корреляции

# функция будет принимать два параметра: количественную и качественную переменные

def pbc(continuous, binary):

  # преобразуем количественную переменную в массив Numpy

  continuous_values = np.array(continuous)

  # классы качественной переменной превратим в нули и единицы

  binary_values = np.unique(binary, return_inverse = True)[1]

  # создадим две подгруппы количественных наблюдений

  # в зависимости от класса дихотомической переменной

  group0 = continuous_values[np.argwhere(binary_values == 0).flatten()]

  group1 = continuous_values[np.argwhere(binary_values == 1).flatten()]

  # найдем средние групп,

  mean0, mean1 = np.mean(group0), np.mean(group1)

  # а также длины групп и всего датасета

  n0, n1, n = len(group0), len(group1), len(continuous_values)

  # рассчитаем СКО количественной переменной

  std = continuous_values.std()

  # подставим значения в формулу

  return (mean1 mean0) / std * np.sqrt( (n1 * n0) / (n * (n1)) )

Применим эту функцию для нахождения корреляции между пролином и классом вина.

pbc(wine[‘proline’], wine[‘target’])

Для расчета корреляции мы также можем воспользоваться функцией из библиотеки Scipy.

# импортируем модуль stats из библиотеки scipy

from scipy import stats

# передадим данные в функцию и выведем первый результат[0]

stats.pointbiserialr(wine[‘proline’], wine[‘target’])[0]

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

Что интересно, математически коэффициент точечно-бисериальной корреляции дает тот же результат, что и коэффициент корреляции Пирсона.

# сравним в корреляцией Пирсона

wine.corr().iloc[0,1]

Пояснения к коду

Сделаем пояснения к приведенному коду. Упростим пример и предположим, что нам нужно рассчитать, есть ли зависимость между количеством сна и результатом экзамена.

# количество сна в часах поместим в массив Numpy

sleep = np.array([6, 8, 9, 7])

# результат будет записан с помощью двух категорий pass и fail

exam = [‘pass’, ‘fail’, ‘pass’, ‘fail’]

Для расчета точечно-бисериальной корреляции нам нужно разделить данные о сне в зависимости от результата экзамена на две группы. В первую очередь, преобразуем строковые значения переменной exam в числа. Для этого, в частности, мы можем использовать функцию np.unique() с параметром return_inverse = True.

exam_encoded = np.unique(exam, return_inverse = True)

exam_encoded

(array([‘fail’, ‘pass’], dtype='<U4′), array([1, 0, 1, 0]))

Вторым результатом [1] будут числовые значения категорий. Теперь используем функцию np.argwhere(), чтобы найти индексы тех, кто сдал экзамены и тех, кто не сдал.

# функция выводит индексы элементов, соответствующих заданному условию

fail_index = np.argwhere(exam_encoded[1] == 0)

pass_index = np.argwhere(exam_encoded[1] == 1)

# студенты, провалившие тест, должны быть на втором и четвертом местах

fail_index

# сдавшие — на первом и третьем

pass_index

Остается убрать второе измерение массивов.

fail_index, pass_index = fail_index.flatten(), pass_index.flatten()

(array([1, 3]), array([0, 2]))

Теперь используем индексы для группировки часов сна в зависимости от результатов экзамена.

sleep[fail_index], sleep[pass_index]

(array([8, 7]), array([6, 9]))

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

Корреляционное отношение

Корреляционное отношение (correlation ratio) выявляет взаимосвязь между количественной переменной и категориальной переменной с любым количеством категорий. Смысл этой метрики лучше всего понять на простом примере из Википедии⧉.

Простой пример

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

  • алгебра: 45, 70, 29, 15, 21 (5 оценок)
  • геометрия: 40, 20, 30, 42 (4 оценки)
  • статистика: 65, 95, 80, 70, 85, 73 (6 оценок)

Шаг 1. Найдем средние значения внутри каждой группы и общее среднее всех наблюдений.

  • алгебра: 36
  • геометрия: 33
  • статистика: 78
  • общее среднее: 52

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

$$ (36-45)^2+(36-70)^2+(36-29)^2+(36-15)^2+(36-21)^2 = 1959 $$

Для геометрии — 308, для статистики — 600. Сложим внутригрупповые отклонения от среднего и получим $1959+308+600=2860$

Сумма квадратов отклонений всех наблюдений от общего среднего составит 9640.

Шаг 3. Теперь выясним, какую долю в общей дисперсии составляет внутригрупповая дисперсия. Для этого разделим 2860 на 9640.

$$ frac{2860}{9640} approx 0,29668 $$

Соответственно доля не объясненных внутригрупповой дисперсией отклонений (ее принято обозначать греческой буквой $eta$, «эта») составляет

$$ eta^2 = 1-frac{2860}{9640} approx 0,70332 $$

Логично предположить, что чем выше доля не объясненных внутригрупповыми отклонениями дисперсии (чем выше $eta^2$), тем большую важность имеет дисперсия между группами. Другими словами, тем важнее отклонения между предметами, а не между оценками внутри каждого предмета.

Значит, чем выше $eta^2$, тем теснее связь между категориями и количественными оценками.

Шаг 4. Извлечем корень из получившегося значения для того, чтобы вернуться к исходным единицам измерения.

$$ eta = sqrt{0,70332} approx 0,83864 $$

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

Можно также сказать, что если $eta$ равна нулю, то внутригрупповые средние одинаковы, если $eta$ равна единице, все значения в каждой из категорий должны быть одинаковы (например, все студенты по алгебре должны получить одинаковую оценку и т.д.).

Еще один способ расчета

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

$$ 5(36-52)^2+4(33-52)^2+6(78-52)^2 = 6780 $$

Обратите внимание, это то же самое, что и $9640-2860=6780$, то есть сумма отклонений, не объясняемых внутригрупповой дисперсией. Таким образом,

$$ eta^2 = frac{6780}{9640} approx 0,70332 $$

$$ eta = sqrt{0,70332} approx 0,83864 $$

Остается написать функцию для расчета корреляционного отношения на Питоне.

Код на Питоне

Используем те же данные, что и в примере выше.

# создадим датафрейм с результатами экзаменов по трем предметам

test = pd.DataFrame({

    # используем список с названиями предметов

    ‘subject’ : [‘algebra’] * 5 + [‘geometry’] * 4 + [‘stats’] * 6,

    # и соответствующими оценками

    ‘score’ : [45, 70, 29, 15, 21, 40, 20, 30, 42, 65, 95, 80, 70, 85, 73 ]

})

Вначале возьмем значения оценок, рассчитаем сумму квадратов отклонений от среднего значения, а также закодируем категориальные переменные числами. Для этого как и ранее в случае точечно-бисериальной корреляцией используем функцию np.unique() с параметров return_inverse = True.

# возьмем значения оценок

values = np.array(test.score)

# и рассчитаем сумму квадратов отклонений от среднего значения

ss_total = np.sum((values.mean() values) ** 2)

# закодируем категории предметов числами

cats = np.unique(test.subject, return_inverse = True)[1]

cats

array([0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2])

Теперь применим первый вариант расчета корреляционного отношения.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

# объявим переменную для внутригрупповой дисперсии

ss_ingroups = 0

# в цикле, состоящем из количества категорий

for c in np.unique(cats):

  # вычленим группу оценок по каждому предмету

  group = values[np.argwhere(cats == c).flatten()]

  # найдем суммы квадратов отклонений значений от групповых средних

  # и сложим эти результаты для каждой группы

  ss_ingroups += np.sum((group.mean() group) ** 2)

# найдем долю внутригрупповой дисперсии и вычтем ее из единицы

eta_squared = 1 ss_ingroups/ss_total

# найдем корень из предыщущего значения

eta = np.sqrt(eta_squared)

# это и будет корреляционное отношение

eta

Напомню, что использование функции np.argwhere() мы уже рассмотрели ранее на этом занятии. Рассчитаем по второму варианту.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

# объявим переменную для межгрупповой дисперсии

ss_betweengroups = 0

# в цикле, состоящем из количества категорий,

for c in np.unique(cats):

  # вычленим группу оценок по каждому предмету

  group = values[np.argwhere(cats == c).flatten()]

  # для каждой группы

  # найдем взвешенный по количеству элементов в группе

  # квадрат отклонения группового среднего от общего среднего

  # и сложим результаты

  ss_betweengroups += len(group) * (group.mean() values.mean()) ** 2

# найдем долю межгрупповой дисперсии

eta_squared = ss_betweengroups/ss_total

# найдем корень из предыщущего значения

eta = np.sqrt(eta_squared)

# это и будет корреляционное отношение

eta

Мы готовы написать функции.

# вариант 1

def correlation_ratio1(numerical, categorical):

  values = np.array(numerical)

  ss_total = np.sum((values.mean() values) ** 2)

  cats = np.unique(categorical, return_inverse = True)[1]

  ss_ingroups = 0

  for c in np.unique(cats):

    group = values[np.argwhere(cats == c).flatten()]

    ss_ingroups += np.sum((group.mean() group) ** 2)

  return np.sqrt(1 ss_ingroups/ss_total)

# проверим результат

correlation_ratio1(test.score, test.subject)

# вариант 2

def correlation_ratio2(numerical, categorical):

  values = np.array(numerical)

  ss_total = np.sum((values.mean() values) ** 2)

  cats = np.unique(categorical, return_inverse = True)[1]

  ss_betweengroups = 0

  for c in np.unique(cats):

    group = values[np.argwhere(cats == c).flatten()]

    ss_betweengroups += len(group) * (group.mean() values.mean()) ** 2

  return np.sqrt(ss_betweengroups/ss_total)

# проверим результат

correlation_ratio2(test.score, test.subject)

Подведем итог

Для удобства, давайте обобщим, какие методы и когда можно использовать.

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

Вопросы для закрепления

Вопрос. Чем параметрические тесты отличаются от непараметрических?

Посмотреть правильный ответ

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

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

Вопрос. При расчете коэффициента корреляции Пирсона, что дает деление ковариации на произведение СКО двух переменных $s_x s_y$?

Посмотреть правильный ответ

Ответ: таким образом мы выражаем любую ковариацию как долю от произведения двух СКО и, как следствие, можем измерять силу взаимосвязи двух переменных и сравнивать коэффициенты корреляции между собой.

Вопрос. Что такое симметричность и несимметричность корреляционного метода?

Посмотреть правильный ответ

Ответ: симметричный метод покажет одинаковую силу взаимосвязи переменной X с переменной Y, и переменной Y с переменной X даже если в действительности взаимосвязь не одинаковая; несимметричный метод покажет разную корреляцию X с Y и Y с X, если такое различие действительно существует.

Полезные ссылки

  • Библиотека dython⧉. Прямые ссылки на документацию⧉ и исходный код⧉ функций.

Корреляция показывает степень совместного изменения двух признаков. При этом, как уже было сказано, в корреляционном анализе нет зависимых и независимых переменных. Они эквивалентны.

Количественным предсказанием одной переменной (зависимой) на основании другой (независимой) занимается регрессионный анализ.

$begingroup$

So I’ve been given the following exercise:

Let $X$ and $Y$ be two random variables.

Let $Var(X) = 2$ and $Cov(X, Y) = 1$. Compute $Cov(5X, 2X + 3Y)$.

How do I do this when I don’t have the second variance and no expectation values?

  • expected-value
  • variance
  • covariance

StubbornAtom's user avatar

StubbornAtom

16.3k4 gold badges31 silver badges83 bronze badges

asked Jun 3, 2020 at 17:39

Maschs's user avatar

$endgroup$

3

  • $begingroup$
    Are you familiar with some of the basic identities related to Covariance: en.wikipedia.org/wiki/…? You can decompose your problem into a set of simpler problems involving covariance and variance.
    $endgroup$

    Jun 3, 2020 at 17:48

  • $begingroup$
    Yes I know them kinda, but the problem is I only have info about one of the random variables. So I cant use that to get the other one.
    $endgroup$

    Jun 3, 2020 at 18:00

  • $begingroup$
    You have enough information to answer the question. Why not just go back to definitions?
    $endgroup$

    Jun 3, 2020 at 19:17

You must log in to answer this question.

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

Расчет и интерпретация ожидаемой доходности и дисперсии доходности портфеля являются фундаментальными навыками финансового аналитика. В этом разделе мы рассмотрим концепции ожидаемой доходности портфеля и дисперсии доходности.

Хотя в этом разделе мы коснемся ряда основных понятий, мы не будем разбирать портфельную теорию как таковую. Портфельная теория Марковица (англ. ‘mean-variance analysis’) будет рассматриваться в следующих чтениях.

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


Рассмотрим пример портфеля,

  • 50% которого инвестируются в фонд индекса S&P 500,
  • 25% — в фонд долгосрочных корпоративных облигаций США, и
  • 25% — в фонд индекса MSCI EAFE (представляющий рынки акций в Европе, Австралии и на Дальнем Востоке).

Таблица 5 показывает это распределение.

Таблица 5. Портфельные веса.

Класс актива

Вес

S&P 500

0.50

Долгосрочные корпоративные облигации США

0.25

MSCI EAFE

0.25

Сначала рассмотрим расчет ожидаемой доходности портфеля. В предыдущем разделе мы определили ожидаемое значение случайной величины как средневзвешенную вероятность возможных результатов случайной величины.

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

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

Свойства ожидаемого значения.

Пусть ( w_i ) — любая постоянная величина (константа), а ( R_i ) — случайная величина.

1. Ожидаемое значение постоянной величины, умноженной на случайную величину, равно постоянной, умноженной на ожидаемое значение случайной величины.

( large E(w_iR_i) = w_i(R_i) )

2. Ожидаемое значение взвешенной суммы случайных величин равно взвешенной сумме ожидаемых значений с использованием тех же весов.

( large begin{aligned}
& E (w_1R_1 + w_2R_2 + ldots + w_nR_n) \
& w_1E (R_1) + w_2E(R_2) + … + w_nE(R_n)
end{aligned} )
(Формула 13)

Предположим, у нас есть случайная величина с заданным ожидаемым значением. Например, если мы умножим каждый результат на 2, ожидаемое значение случайной величины умножится также на 2. В этом смысл части 1.

Второе утверждение — это правило, которое напрямую приводит к выражению ожидаемой доходности портфеля.

Портфель с n ценными бумагами определяется весами его портфеля, ( w_1, w_2, ldots, w_n ), которые в сумме составляют 1. Таким образом, доходность портфеля, ( R_p ), равна ( R_p = w_1R_1 + w_2R_2 + ldots + w_nR_n ).

Теперь мы можем сформулировать следующий принцип:

Расчет ожидаемой доходности портфеля.

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

( large begin{aligned}
E(R_p) &= E(w_1R_1 + w_2R_2 + ldots + w_nR_n) \
&= w_1E(R_1) + w_2E(R_2) + ldots + w_nE (R_n)
end{aligned} )

Предположим, мы оценили ожидаемую доходность активов в портфеле, как показано в Таблице 6.

Таблица 6. Веса и ожидаемая доходность активов в портфеле.

Класс актива

Вес

Ожидаемая
доходность (%)

S&P 500

0.50

13

Долгосрочные корпоративные облигации США

0.25

6

MSCI EAFE

0.25

15

Мы рассчитываем ожидаемую доходность портфеля как 11.75%:

( begin{aligned}
E(R_p) &= w_1E(R_1) + w_2E(R_2) + w_3E (R_3) \
&= 0.50(13%) + 0.25(6%) + 0.25(15%) = 11.75%
end{aligned} )

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

Если ( R_p ) обозначает доходность портфеля, то дисперсия доходности портфеля составляет ( sigma^2(R_p) = E Big{ big[R_p — E(R_p)big]^2 Big} ) в соответствии с Формулой 8.

Как можно использовать это определение на практике?

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

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

Чтобы избежать беспорядка в обозначениях, мы пишем ( ER_p ) вместо (E(R_p)). Нам нужна концепция ковариации.

Определение ковариации.

Для двух случайных величин (R_i) и (R_j) ковариация между (R_i) и (R_j) равна

( large
newcommand{Cov}{operatorname{Cov}}
Cov bigl(R_i, R_jbigr) = E big[(R_i — ER_i) (R_j — ER_j)big] )
(Формула 14)

Альтернативными обозначениями являются (sigma(R_i,R_j)) и (sigma_{ij}).

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

Используя определением дисперсии, мы находим:

( small begin{aligned}
sigma^2(R_p) &= E Big[(R_p — ER_p)^2Big]  \
&= E Big{ big[w_1R_1 + w_2R_2 + w_3R_3 — E(w_1R_1 + w_2R_2 + w_3R_3) big]^2 Big} \
&= E Big{ big[w_1R_1 + w_2R_2 + w_3R_3 — w_1ER_1 — w_2ER_2 — w_3ER_3 big]^2 Big}  \
& text{(используя Формулу 13)} \ \

&= E Big{ big[w_1(R_1 — ER_1) + w_2(R_2 — ER_2) + w_3(R_3 — ER_3) big]^2 Big} \
& text{(преобразование)} \ \

&= E Big{ big[w_1(R_1 — ER_1) + w_2(R_2 — ER_2) + w_3(R_3 — ER_3) big] \
&times big[w_1(R_1 — ER_1) + w_2(R_2 — ER_2) + w_3(R_3 — ER_3) big] Big} \
& text{(что значит квадрат)} \ \

&= E big[w_1w_1(R_1 — ER_1)(R_1 — ER_1) + w_1w_2(R_1 — ER_1)(R_2 — ER_2) \
&+ w_1w_3(R_1 — ER_1)(R_3 — ER_3) + w_2w_1(R_2 — ER_2)(R_1 — ER_1) \
&+ w_2w_2(R_2 — ER_2)(R_2 — ER_2) + w_2w_3(R_2 — ER_2)(R_3 — ER_3) \
&+ w_3w_1(R_3 — ER_3)(R_1 — ER_1) + w_3w_2(R_3 — ER_3)(R_2 — ER_2) \
&+ w_3w_3(R_3 — ER_3)(R_3 — ER_3) big] \
& text{(выполняем умножение)} \ \

&= w^1_2E big[(R_1 — ER_1)^2 big] + w_1w_2E big[(R_1 — ER_1) (R_2 — ER_2) big] \
&+ w_1w_3E big[(R_1 — ER_1) (R_3 — ER_3) big] + w_2w_1E big[(R_2 — ER_2) (R_1 — ER_1) big] \
&+ w^2_2E big[(R_2 — ER_2)^2 big] + w_2w_3E big[(R_2 — ER_2) (R_3 — ER_3) big] \
&+ w_3w_1E big[(R_3 — ER_3) (R_1 — ER_1) big] + w_3w_2E big[(R_3 — ER_3) (R_2 — ER_2) big] \
&+ w^2_3E big[(R_3 — ER_3)^2 big] \
& text{(напомим, что $w_i$ являются постоянными величинами)}
end{aligned} )

(Формула 15)

( begin{aligned}
sigma^2(R_p) &= w^2_1 sigma^2 (R_1) + w_1w_2 Cov(R_1, R_2) + w_1w_3 Cov(R_1, R_3) \
&+ w_1w_2 Cov(R_1, R_2) + w^2_2 sigma^2 (R_2) + w_2w_3 Cov(R_2, R_3) \
&+ w_1w_3 Cov(R_1, R_3) + w_2w_3 Cov(R_2, R_3) +  w^2_3 sigma^2 (R_3)
end{aligned} )

Итоговая формула следует из определений дисперсии и ковариации.


Полезные факты о дисперсии и ковариации включают в себя следующее:

  1. Дисперсия постоянной величины (константы) умноженная на случайную величину равна квадрату константы умноженной на дисперсию случайной величины, или ( sigma^2(wR) = w^2sigma^2(R) );
  2. Дисперсия константы плюс случайная величина равна дисперсии случайной величины, или ( sigma^2(w + R) = sigma 2(R)), поскольку константа имеет нулевую дисперсию;
  3. Ковариация между константой и случайной величиной равна нулю.

Для выделенных курсивом ковариационных членов в Формуле 15 мы использовали тот факт, что порядок переменных в ковариации не имеет значения: например, (Cov(R_2,R_1) = Cov(R_1,R_2) ).

Как мы покажем далее, диагональные дисперсионные члены (sigma^2(R_1)), (sigma^2(R2)) и (sigma^2(R_3)) могут быть выражены как (Cov(R_1,R_1)), (Cov(R_2,R_2)) и (Cov(R_3,R_3)), соответственно.

Опираясь на этот факт, можно вывести наиболее компактный вид Формулы 15:

(sigma^2(R_p) = dsum_{i=1}^{3} dsum_{j=1}^{3}w_i w_j Cov(R_i,R_j) )

Знаки суммирования говорят: «Установите i = 1, и пусть j меняется от 1 до 3; затем установите i = 2 и пусть j меняется от 1 до 3; затем установите i = 3 и пусть j меняется от 1 до 3; наконец, добавьте девять членов».

Эту формулу можно использовать для портфеля любого размера n:

(large sigma^2(R_p) = dsum_{i=1}^{3} dsum_{j=1}^{3}w_i w_j Cov(R_i,R_j) ) (Формула 16)

Из Формулы 15 видно, что отдельные отклонения доходности составляют часть, но не все отклонения портфеля. Три отклонения фактически превосходят по численности шесть ковариационных членов вне диагонали. Для трех активов это соотношение составляет 1 к 2 или 50 процентов.

Если имеется 20 активов, то есть 20 дисперсионных слагаемых и 20(20) — 20 = 380 недиагональных ковариационных слагаемых. Отношение слагаемых дисперсии к недиагональным слагаемым ковариации составляет менее 6 к 100, или 6%. Таким образом, первое наблюдение заключается в том, что с увеличением числа активов портфеля ковариация становится все более важной, в остальном все не меняется.

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

Как именно влияет ковариация на дисперсию доходности портфеля?

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

Например, рассмотрим две акции: одна имеет тенденцию к высокой доходности (относительно ее ожидаемой доходности), а другая имеет низкую доходность (относительно ее ожидаемой доходности).

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

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


1. Мы можем интерпретировать ковариацию следующим образом:

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

2. Ковариация случайной величины с самой собой (собственная ковариация) — это ее собственная дисперсия:

( begin{aligned}
Cov(R, R) &= E Big{ big[R — E (R) big] big[R — E (R) big] Big } \
&= E Big { big[R — E(R) big]^2 Big} = sigma^2(R)
end{aligned})

Полный список ковариаций составляет все статистические данные, необходимые для расчета дисперсии доходности портфеля. Ковариации часто представлены в табличном формате, который называется ковариационной матрицей (англ. ‘covariance matrix’).

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

Таблица 7. Ожидаемая доходность и дисперсия портфеля — значения матрицы:

Актив

A

B

C

E(RA

E(RB

E(RC)

Актив

A

B

C

A

(mathbf{Cov(R_A,R_A)})

(Cov(R_A,R_B))

(Cov(R_A,R_C))

B

(Cov(R_B,R_A))

(mathbf{Cov(R_B,R_B)})

(Cov(R_B,R_C))

C

(Cov(R_C,R_A))

(Cov(R_C,R_B))

(mathbf{Cov(R_C,R_C)})

Для трех активов ковариационная матрица имеет (3^2 = 3 times 3 = 9 ) ячеек, но значения ячеек по диагонали (дисперсия) обычно рассчитываются отдельно от недиагональных ячеек. Эти диагональные значения выделены жирным шрифтом в Таблице 7.

Это различие естественно, так как дисперсия акций — это концепция с одной переменной. Таким образом, есть 9 — 3 = 6 ковариаций, исключая дисперсии.

Но

( Cov(R_B,R_A) = Cov(R_А,R_В)), ( Cov(R_С,R_A) = Cov(R_B,R_A) )

и

( Cov(R_С,R_B) = Cov(R_B,R_C) )

Ковариационная матрица под диагональю является зеркальным отображением ковариационной матрицы над диагональю. В результате, есть только 6/2 = 3 различных ковариационных члена для оценки. В целом, для n ценных бумаг существует ( n(n — 1)/2 ) различных ковариаций для оценки и n дисперсий для оценки.


Предположим, у нас есть ковариационная матрица, показанная в Таблице 8.

Мы будем работать с доходностью, указанной в процентах, а записи в таблице будут выражены в процентах в квадрате (%2). Члены 38%2 и 400%2 равны 0.0038 и 0.0400 соответственно в десятичном виде; правильная работа в процентах и ​​десятичных дробях приводит к одинаковым ответам.

Таблица 8. Ковариационная матрица.

S&P 500

Долгосрочные корпоративные облигации США

MSCI EAFE

S&P 500

400

45

189

Долгосрочные корпоративные облигации США

45

81

38

MSCI EAFE

189

38

441

Если взять Формулу 15 и сгруппировать дисперсионные члены, мы получим следующее:

(Формула 17)

( large begin{aligned}
sigma^2(R_p) &= w_1^2 sigma^2(R_2) + w_2^2 sigma^2(R_2) \
&+ w_3^2 sigma^2(R_3) \
&+ 2w_1w_2 Cov(R_1,R_2) \
&+ 2w_1w_3 Cov(R_1,R_3) \
&+ 2w_2w_3 Cov(R_2,R_3)
end{aligned} )

(
small
begin{aligned}
sigma^2(R_p) &= (0.50)^2(400) + (0.25)^2(81) + (0.25)^2(441) \
&+ 2(0.50)(0.25)(45) + 2(0.50)(0.25)(189) \
&+ 2(0.25)(0.25)(38) \
&= 100 + 5.0625 + 27.5625 + 11.25 + 47.25 + 4.75 = 195.875
end{aligned} )

Разница составляет 195.875. Стандартное отклонение доходности составляет 195.8751/2 = 14%. В итоге, ожидаемая годовая доходность портфеля составляет 11.75%, а стандартное отклонение доходности — 14%.

Давайте посмотрим на первые три члена в приведенном выше расчете. Их сумма, 100 + 5.0625 + 27.5625 = 132.625, является вкладом отдельных дисперсий активов в общую дисперсию портфеля. Если бы доходность по трем активам была независимой, ковариации были бы равны 0, а стандартное отклонение доходности портфеля составило бы 132.6251/2 = 11.52% по сравнению с 14% ранее.

Портфель будет иметь меньший риск. Предположим, что члены ковариации были отрицательными. Тогда к 132.625 будет добавлено отрицательное число, поэтому дисперсия портфеля и риск будут еще меньше.

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

Преимущество диверсификации увеличивается с уменьшением ковариации.

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

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

Определение корреляции.

Корреляция (англ. ‘correlation’) между двумя случайными величинами, (R_i) и (R_j), определяется как:

( large dst
rho(R_i,R_j) = {Cov(R_i, R_j) over sigma(R_i)sigma(R_j)} )

Альтернативными обозначениями корреляции являются (mathrm{Corr}(R_i,R_j) ) и ( rho_{ij}).

Ковариация часто представляется с использованием выражения:

( large Cov(R_i, R_j) = rho(R_i,R_j) sigma(R_i)sigma(R_j) )

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

Используя приведенное выше определение, мы можем сформулировать корреляционную матрицу только на основе данных из ковариационной матрицы. В Таблице 9 показана матрица корреляции.

Таблица 9. Корреляционная матрица доходности.

S&P 500

Долгосрочные корпоративные облигации США

MSCI EAFE

S&P 500

1.00

0.25

0.45

Долгосрочные корпоративные облигации США

0.25

1.00

0.20

MSCI EAFE

0.45

0.20

1.00

Например, ковариация между долгосрочными облигациями и MSCI EAFE составляет 38, как указано в Таблице 8. Стандартное отклонение доходности долгосрочных облигаций составляет 811/2 = 9%, а доходности MSCI EAFE — 4411/2 = 21% (см. диагональные члены в Таблице 8).

Корреляция (rho)(Доходность долгосрочных облигаций, Доходность EAFE) составляет 38 / (9%) (21%) = 0.201, округленное до 0.20.

Корреляция доходности S&P 500 с самой собой равно 1: расчет представляет собой собственную ковариацию, деленную на квадрат стандартного отклонения.

Свойства корреляции.

1. Корреляция — это число от -1 до +1 для двух случайных величин, (X) и (Y):

( -1 leq rho(X,Y) leq + 1 )

2. Корреляция 0 (некоррелированные переменные) указывает на отсутствие какой-либо линейной (прямой) взаимосвязи между переменными.

Если корреляция равна 0, (R_1 = a + bR_2) + ошибка, при (b = 0).

  • Растущая положительная корреляция указывает на все более сильную положительную линейную зависимость (до 1, что указывает на идеальную линейную зависимость).
  • Растущая отрицательная корреляция указывает на все более сильную отрицательную (обратную) линейную зависимость (до -1, что указывает на идеальную обратную линейную зависимость).
  • Если корреляция положительна, (R_1 = a + bR_2) + ошибка, при b > 0. Если корреляция отрицательна, b < 0.

Пример (12) расчета ожидаемой доходности и дисперсии доходности портфеля.

У вас есть портфель из двух взаимных инвестиционных фондов, A и B. 75% портфеля вложено в A, как показано в Таблице 10.

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

Фонд

A

B

E(RA) = 20% E(RB) = 12%

Ковариационная матрица

Фонд

A

B

A

625

120

B

120

196

  1. Рассчитайте ожидаемую доходность портфеля.
  2. Рассчитайте матрицу корреляции для этой задачи. Рассчитайте значения матрицы до двух десятичных знаков.
  3. Рассчитайте стандартное отклонение доходности портфеля.

Решение для части 1:

( E(R_p) = w_AE(R_A) + (1 — w_A)E(R_B) )
= 0.75(20%) + 0.25(12%) = 18%.

Веса портфеля должны составлять в сумме 1: (W_B = 1 — W_A ).

 

Решение для части 2:

(sigma(R_A) = 625^{1/2} = 25%), (sigma(R_B) = 196^{1/2} = 14%).

Существует одна четкая ковариация и, следовательно, одна четкая корреляция:

( begin{aligned}
 rho(R_A,R_B) &= dst {Cov(R_A, R_B) over sigma(R_A)sigma(R_B)} \[1ex]
&= 120 / [25(14)] = 0.342857 text{  или  } 0.34
end{aligned} )

В Таблице 11 показана корреляционная матрица.

Таблица 11. Матрица корреляции.

A

B

A

1.00

0.34

B

0.34

1.00

В корреляционной матрице диагональные члены всегда равны 1.


Решение для части 3:

( begin{aligned}
sigma^2(R_p) &= w_A^2 sigma^2(R_A) + w_B^2 sigma^2(R_B) + 2w_Aw_B Cov(R_A,R_B) \
&= (0.75)^2 (625) + (0.25)^2 (196) + 2(0.75)(0.25)(120) \
&= 351.5625 + 12.25 + 45 = 408.8125
end{aligned} )

( sigma(R_p) = 408.8125^{1/2} = 20.22% )

Как оценивать ковариацию и корреляцию доходности?

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

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

Функция совместной вероятности (англ. ‘joint probability function’) двух случайных величин (X) и (Y), обозначенная как (P(X, Y)), дает вероятность совместного появления значений (X) и (Y). Например, (P(3,2)) — это вероятность того, что (X) равен 3 и (Y) равен 2.

Предположим, что функция совместной вероятности доходности акций BankCorp(RA) и доходностей акций NewBank(RB) имеет простую структуру, приведенную в Таблице 12.

Таблица 12. Функция совместной вероятности доходности BankCorp и NewBank (записи в ячейках — совместные вероятности).

RB = 20%

RB = 16%

RB = 10%

RA = 25%

0.20

0

0

RA = 12%

0

0.50

0

RA = 10%

0

0

0.30

Ожидаемая доходность акций BankCorp составляет:

0.20(25%) + 0.50(12%) + 0.30(10%) = 14%

Ожидаемая доходность акций NewBank составляет:

0.20(20%) + 0.50(16%) + 0.30(10%) = 15%

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

В Таблице 13 представлен расчет ковариации.

Таблица 13. Расчеты ковариации.

Состояние банковской индустрии

Отклоне-
ния доход-
ности BankCorp

Отклоне-
ния доход-
ности NewBank

Произ-
ведение откло-
нений

Вероят-
ность состояния

Произ-
ведение, взве-
шенное по вероят-
ности

Хорошее

25-14

20-15

55

0.20

11

Среднее

12-14

16-15

-2

0.50

-1

Плохое

10-14

10-15

20

0.30

6

Cov(RA,RB) = 16

Примечание. Ожидаемая доходность для BankCorp составляет 14%, а для NewBank — 15%.

Первый и второй столбцы чисел показывают, соответственно, отклонения доходности BankCorp и NewBank от их среднего или ожидаемого значения.

В следующем столбце показано произведение отклонений. Например, для хорошего состояния отрасли (25–14)(20–15) = 11(5) = 55.

Затем 55 умножается на 0.20 или взвешивается на вероятность того, что условия банковской отрасли являются хорошими: 55(0.20) = 11.

Расчеты для средних и плохих банковских условий выполняются по той же схеме. Суммируя эти взвешенные по вероятности произведения, получим, что (Cov(R_A,R_B) ) = 16.


Формула для вычисления ковариации между случайными переменными (R_A) и (R_B) имеет вид:

(Формула 18)

( Cov(R_A,R_B) = dsum_{i} dsum_{j} P(R_{A,j},R_{B,j})(R_{A,j} — ER_A)(R_{B,j} — ER_B) )

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

В этом примере, как показано в Таблице 12, только три совместные вероятности отличны от нуля. Следовательно, при вычислении ковариации доходности в этом случае нам нужно учитывать только три перекрестных произведения:

(
small
begin{aligned}
Cov(R_A,R_B) &= P(25,20) big[(25-14) (20-15)big] \
&+ P(12,16) big[(12-14)(16-15) big] \ &+ P(10,10) big[(10-14)(10-15)big] \
&= 0,20(11)(5) + 0,50(-2)(1) + 0,30(-4)(- 5) \
&= 11 — 1 + 6 = 16
end{aligned} )

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

Определение независимости для случайных величин.

Две случайные величины (X) и (Y) независимы тогда и только тогда, когда:

( P(X,Y) = P(X)P(Y) )

Например, учитывая независимость:

(P(3,2) = P(3)P(2))

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

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

Правило умножения для ожидаемого значения произведения некоррелированных случайных величин.

Ожидаемое значение произведения некоррелированных случайных величин является произведением их ожидаемых значений.

( large E(XY) = E(X) E(Y) )

если (X) и (Y) не коррелированны.

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

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

( E(XY) = E (X) E(Y|X) )

Понравилась статья? Поделить с друзьями:
  • Как найти аквапарк москве
  • Если потерял пульт от телевизора как найти
  • Как найти точку росы водяного пара
  • Закон меченого как найти скромного
  • Как найти человека по его email