【发布时间】:2016-09-23 12:52:27
【问题描述】:
我有一系列向量,每个向量都被命名为股票,例如 Facebook Inc. 的 FB。所以我在数据帧中有超过 70 个向量系列,例如 GEEK、IPAS、JCON 等。 对于每对股票,例如 GEEK 和 JCON,我必须计算一个度量,称为互信息。我已经编写了一些代码来找到一对股票的衡量标准,就是这样。
找到entropyz(X,Y的熵,说GEEK和JCON的二元熵返回)
denz<-kde2d(x,y, n=512, lims=c(xlim,ylim))
z<-denz$z
cell_sizez<-(diff(xlim)/512) * (diff(ylim)/512)
normz<-sum(z)*cell_sizez
integrandz<-z*log(z)
entropyz<-sum(integrandz)*cell_sizez
entropyz<-entropyz/normz
要找到entropyx(X 的熵,比如说 GEEK 返回)
denx<-kde(x=x,gridsize = 512, xmin=xlim[1], xmax = xlim[2])
zx<-denx$estimate
cell_sizex<-(diff(xlim)/512)
normx<-sum(zx)*cell_sizex
integrandx<-zx*log(zx)
entropyx<-sum(integrandx)*cell_sizex
entropyx<-entropyx/normx
要找到entropyy(Y 的熵,比如 JCON 返回)
deny<-kde(x=y,gridsize = 512, xmin=ylim[1], xmax = ylim[2])
zy<-deny$estimate
cell_sizey<-(diff(ylim)/512)
normy<-sum(zy)*cell_sizey
integrandy<-zy*log(zy)
entropyy<-sum(integrandy)*cell_sizey
entropyy<-entropyy/normy
最后求出GEEK和JCON
的互信息MI <- entropyx+entropyy-entropyz
所以,我找到了 X 和 Y(上面的两只股票)的互信息。但我必须为超过 70 个股票(向量)计算这个度量,其中 70 * 69 / 2 次迭代 = 2415;就像做一个相关矩阵,因为它是两两比较。
问题是是否有人知道一种方法可以让 R 在我的数据集中找到所有对 (x,y) 的互信息。因此,换句话说,为数据帧上的每一对迭代此代码,从而创建一个成对矩阵。
非常感谢!
【问题讨论】:
-
作为起点,获得向量的每个成对组合的一种方法是
combn。 -
我已经更新了我的答案,以使其更好,尽管我对如何计算
xlim和ylim以及它们是否对每对不同感到很感兴趣。跨度> -
@jamieRowen 这些限制只是 x 和 y 的范围,即那些时间序列的最小值和最大值。谢谢你的回答。
-
@jamieRowen,我使用了下面的代码,但它不起作用。我有这样命名的行,a, b, c, d, e, (...) z (...) aa, ab (...) ak;所以我使用这个函数来计算 x 和 y 的互信息。因此,当调用代码的最后一部分(应用组合)时,它返回给我,'kde2d(x, y, n = 8, lims = c(xlim, ylim)) 中的错误:数据向量必须相同长度' ;但我所有的向量都有相同的长度;你知道发生了什么事吗?谢谢!
-
@jamieRowen,你知道“xlim”和“ylim”是如何计算的吗?谢谢。
标签: r function loops matrix financial