Проблемы с вычислением совместной функции вероятности с помощью np.histogram2d

В настоящее время у меня есть массив 4024 на 10 - где столбец 0 представляет 4024 различных доходности запаса 1, столбец 1 - 4024 доходности запаса 2 и т. Д. - для задания для моих мастеров, где меня просят вычислить энтропию и объединение энтропия различных случайных величин (каждая случайная переменная, очевидно, является запасом). Однако оба эти вычисления энтропии требуют вычисления P(x) и P(x,y). До сих пор мне удалось успешно вычислить отдельные эмпирические вероятности, используя следующий код:

def entropy(ret,t,T,a,n):

returns=pd.read_excel(ret)
returns_df=returns.iloc[t:T,:]
returns_mat=returns_df.as_matrix()
asset_returns=returns_mat[:,a]
hist,bins=np.histogram(asset_returns,bins=n)
empirical_prob=hist/hist.sum()
entropy_vector=np.empty(len(empirical_prob))

for i in range(len(empirical_prob)):
    if empirical_prob[i]==0:
        entropy_vector[i]=0
    else:
        entropy_vector[i]=-empirical_prob[i]*np.log2(empirical_prob[i])

shannon_entropy=np.sum(entropy_vector)

return shannon_entropy, empirical_prob

PS игнорировать всю энтропийную часть кода

Как вы можете видеть, я просто сделал 1-ю гистограмму, а затем разделил каждое число на общую сумму результатов гистограммы, чтобы найти индивидуальные вероятности. Тем не менее, я действительно борюсь с тем, как идти о вычислении P(x,y), используя

np.histogram2d()

Теперь, очевидно, P(x,y)=P(x)*P(y), если случайные величины независимы, но в моем случае это не так, поскольку эти акции принадлежат одному и тому же индексу, и, следовательно, имеют некоторую положительную корреляцию, то есть они зависимы, поэтому взятие произведения двух отдельных вероятностей не имеет места. Я попытался следовать советам моего профессора, где он сказал:

"Мы обсудили, как получить эмпирический PDF-файл для одномерного распределения: один определяет ячейки, а затем просто подсчитывает, сколько наблюдений находится в соответствующей ячейке (относительно общего числа наблюдений). Для двумерных распределений вы можете сделать то же самое, но теперь вы делаете 2-мерный биннинг (проверьте, например, команду histogram2 в matlab)

Как вы можете видеть, он ссылается на функцию 2D-гистограммы в MATLAB, но я решил выполнить это назначение на Python, и до сих пор я разработал следующий код:

def jointentropy(ret,t,T,a,b,n):

returns=pd.read_excel(ret)
returns_df=returns.iloc[t:T,:]
returns_mat=returns_df.as_matrix()
assetA=returns_mat[:,a]
assetB=returns_mat[:,b]
hist,bins1,bins2=np.histogram2d(assetA,assetB,bins=n)

Но я не знаю, что делать отсюда, потому что

np.histogram2d()

возвращает массив 4025 на 4025, а также два отдельных бина, поэтому я не знаю, что я могу сделать, чтобы вычислить P(x,y) для моих двух зависимых случайных величин.

Я пытался разобраться в этом часами без какой-либо удачи или успеха, поэтому любая помощь будет высоко оценена! Заранее большое спасибо!

1 ответ

Решение

Похоже, у вас на руках явный случай условной или байесовской вероятности. Вы можете посмотреть его, например, здесь, http://www.mathgoodies.com/lessons/vol6/dependent_events.html, который дает вероятность того, что оба события произошли как P(x,y) = P(x) · P(x|y), где P (x | y) - "вероятность события x, заданного y". Это должно применяться в вашей ситуации, потому что, если две акции имеют один и тот же индекс, одна цена не может быть без другой. Просто создайте две отдельные корзины, как вы сделали для одной, и рассчитайте вероятности, как указано выше.

Другие вопросы по тегам