0

我目前有一个 4024 x 10 数组 - 其中第 0 列代表股票 1 的 4024 个不同回报,第 1 列代表股票 2 的 4024 个回报等等 - 用于我的主人的作业,我被要求计算熵和联合不同随机变量的熵(每个随机变量显然是股票收益)。但是,这些熵计算都需要计算 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忽略代码的整个熵部分

如您所见,我只是简单地完成了 1d 直方图,然后将每个计数除以直方图结果的总和,以找到各个概率。但是,我真的很想知道如何计算 P(x,y) 使用

np.histogram2d()

现在,显然 P(x,y)=P(x)*P(y) 如果随机变量是独立的,但在我的情况下它们不是,因为这些股票属于同一个指数,因此具有一些正相关,即它们是依赖的,所以取两个个体概率的乘积不成立。我试过听从教授的建议,他说:

“我们已经讨论过如何获得单变量分布的经验 pdf:定义箱,然后简单地计算相应箱中的观察数(相对于观察总数)。对于双变量分布,您可以这样做,但现在你进行二维分箱(例如检查 matlab 中的 histogram2 命令)”

如您所见,他指的是 MATLAB 的 2d histogram 函数,但我决定在 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 x 4025 数组以及两个单独的 bin,所以我不知道我可以做些什么来为我的两个因随机变量计算 P(x,y)。

我已经尝试了几个小时来解决这个问题,但没有任何运气或成功,所以任何形式的帮助都将不胜感激!非常感谢您!

4

1 回答 1

0

看起来您手头上有一个明确的条件贝叶斯概率案例。例如,您可以在此处查找它,http://www.mathgoodies.com/lessons/vol6/dependent_events.html,它给出了两个事件发生的概率为 P(x,y) = P(x) · P(x|y),其中 P(x|y) 是“给定 y 的事件 x 的概率”。这应该适用于您的情况,因为如果两只股票来自同一个指数,那么如果没有另一只股票,一个价格就不可能发生。就像你为一个做的那样建立两个单独的箱子,然后像上面一样计算概率。

于 2017-03-14T16:54:04.403 回答