MIC

我在论文使用MIC来衡量两个基因之间的关联程度,线性或非线性关系,相较于Mutual Information(MI)互信息而言有更高的准确度巴拉巴拉的,按作者的话说总之比其他的方式好。

原文参照: 
Detecting Novel Associations in Large Data Sets

相关东西自己看看人家原文,一直觉得人家歪果仁写东西很认真,基础提到,实验充足…英文可以的话,尽量多读读歪果仁写的东西,提升很大…

直接进入主题


MIC概念解释

在了解MIC概念之前,你需要知道MI的概念、如何计算,一句话概括:衡量两信息的相似程度,相似程度越高,值越大;反之亦然!至于MI的计算,网上一搜一大堆,自己研究去吧…

这里写图片描述

先来看看MIC的定义: 
 
一大串公式代表什么意思?有一篇文章介绍这个,忘了出处了!这里借用一下 
MIC计算分为三个步骤:

  1. 给定i、j,对XY构成的散点图进行i列j行网格化,并求出最大的互信息值
  2. 对最大的互信息值进行归一化
  3. 选择不同尺度下互信息的最大值作为MIC值

(1) 给定i、j,对XY构成的散点图进行i列j行网格化,并求出最大的互信息值

值得注意的是,给定i和j后,可以得出多种不同的网格化方案。我们需要从这些不同的网格化方案中找到使互信息最大的网格化方案。举个例子,假设i=2,j=2。则可能有以下红、黄、绿三种网格化方案(其实更多,这里只是随便挑三种方案作说明),分别计算每个网格化方案对应的互信息值,找出使互信息值最大的网格化方案。
这里写图片描述
这里写图片描述

 
那么,给定了某个网格化方案后,如何计算其对应的互信息值呢?这里以上图中红色的网格化方案为例进行说明。红色网格化方案将所有数据点分为四个区域:左上,右上,左下,右下。每个区域对应的数据点数量为1,4,4,1。将数据点数归一化得到四个区域的数据点频率,分别为0.1,0.4,0.4,0.1。也就是说,此时,X有两种取值:左和右,Y有两种取值:上和下。P(X=左,Y=上)=0.1,P(X=右,Y=上)=0.4,P(X=左,Y=下)=0.4,P(X=右,Y=下)=0.1。并且,P(X=左)=0.5,P(X=右)=0.5,P(Y=上)=0.5,P(Y=下)=0.5。根据前面介绍的互信息计算公式,得到X和Y在这种分区下的互信息为: 

以此类推,算出哪种方案得到的互信息值最大,最大的互信息值是多少。为了方便讨论,这里得到最大互信息值表示为,D表示数据点集。

(2)对最大的互信息值进行归一化

将得到的最大互信息除以log(min(X,Y)),即为归一化!概念我也不是很理解,有理解的同学可以交流一下呗…

(3)选择不同尺度下互信息的最大值作为MIC值

上面讲述了给定i和j的情况下M(X,Y,D,i,j)的计算方法。这一步就是给定很多(i,j)值,计算每一种情况下M(X,Y,D,i,j)的值,将所有M(X,Y,D,i,j)中的最大那个值作为MIC值。注意的是,这里的(i,j)是有条件的,要满足,n表示数据集D的数据量。当然,B(n)这个值可以自己定,这里是别人做实验认为效果最好的值。

MIC计算

MIC的计算使用的是Minepy-master,搜这些东西嘛,度娘就不要用了,Google还是棒棒的,有同学肯定说我不会翻墙,这里推荐大家搜一下Latern,翻墙利器,其他你懂得…

这里写图片描述

使用Minepy的MATLAB代码实现时,mine_mex使用c来实现的,MATLAB需要配置mex环境,这个还是你来做,编译C时需要在后面加上lib,不然会提示mine_mic为外部引用,错误,错误,错误,下面官网给出的解决方式: 

发表评论