我目前有一个4024乘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
P.S。忽略代码的整个熵部分
正如您所看到的,我只是简单地完成了1d直方图,然后将每个计数除以直方图结果的总和,以便找到个体概率。但是,我真的在努力学习如何使用
来计算P(x,y)np.histogram2d()
现在,显然P(x,y)= P(x)* P(y)如果随机变量是独立的,但在我的情况下它们不是,因为这些股票属于同一个指数,因此拥有一些正相关,即它们是依赖的,因此取两个个体概率的乘积并不成立。我试着听从我教授的建议,他说:
“我们已经讨论了如何获得单变量分布的经验pdf:一个定义了分类,然后简单地计算了各个分区中有多少个观测值(相对于观察总数)。对于双变量分布您可以这样做,但现在您进行二维分级(例如,检查matlab中的histogram2命令)“
你可以看到他指的是MATLAB的2d直方图函数,但是我决定在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)。
我试图在没有任何运气或成功的情况下计算好几个小时,所以任何形式的帮助都将受到高度赞赏!非常感谢你提前!
答案 0 :(得分:0)
看起来您手上有明显的条件或贝叶斯概率。您可以查找它,例如,http://www.mathgoodies.com/lessons/vol6/dependent_events.html,它给出了两个事件发生的概率为P(x,y)= P(x)·P(x | y),其中P(x | y) y)是“给定y的事件x的概率”。这应该适用于您的情况,因为如果两只股票来自同一指数,那么没有另一只股票就不会有一个价格。只需构建两个独立的箱子就像你为一个箱子做的那样,并按上述方法计算概率。