QAP检验:计算两个网络的关联

less than 1 minute read

QAP检验:两个网络之间的关联

通常一组个体具有多种类型的关系,例如友谊关系和经济往来关系。我们通常会对这两种网络关系在多大程度上相互关联感兴趣。当我们知道一组个体之间的两种关系网络,我们就可以计算这个两个关系网络之间的相关程度。在统计学当中,皮尔森相关系数是用来反映两个变量线性相关程度的统计量。与之类似,对于由一组个体所组成的两个网络,也可以计算其相应的相关皮尔逊相关系数。当然,还可以计算其他你感兴趣的统计量,如协相关系数。

我们使用sna这个R软件包来计算网络相关系数(并调用qaptest命令)。通过安装和使用statnet这个R软件包,就会自动加载sna等子软件包。另外,statnet当中还集成了其他的几个相关的R软件包,包括进行动态网络建模的tergm子软件包。

# R程序11-8:计算网络的皮尔逊相关系数
install.packages("statnet")
library(statnet)  
# 首先随机生成3个由10个节点构成的有向网络
g=array(dim=c(3,10,10))
g[1,,] = rgraph(10)
g[2,,] = rgraph(10,tprob=g[1,,]*0.8) # 设置g1和g2两个网络强相关
g[3,,] = 1; g[3,1,2] = 0 # g3接近于一个派系(clique)
# 绘制这3个网络
par(mfrow=c(1,3))
for(i in 1:3) {
	gplot(g[i,,],usecurv=TRUE, mode = "fruchtermanreingold",
      	  vertex.sides=3:8)}
#计算网络的相关矩阵
gcor(g)

在通常使用皮尔逊相关系数的时候,可以用t统计量对总体相关系数为0的原假设进行检验。但在计算网络的相关系数(graph correlations)时,经典的零假设检验方法往往会带来偏差,因而并不适用。通常使用非参数检验的方法,比如QAP(Quadratic Assignment Procedure)检验。

矩阵的随机排列(Random matrix permutations)是QAP检验的关键部分,在子软件包sna中主要通过rmperm来进行。通过矩阵的随机排列,可以对网络中的节点编号(而不是链接!!)进行随机置换(relabelling)或重新“洗牌”(reshuffling),并得到一组(比如1000个)重连后的网络。因为只是置换节点,这种操作只是重新标记节点的编号(relabelling)。

# R程序11-9:矩阵的随机置换方法
j = rgraph(5) # 随机生成一个网络
j  #看一下这个网络的矩阵形式
rmperm(j) #随机置换后的网络的矩阵形式

对这一组重构的网络可以计算其网络级别的参数(如两个网络的相关参数,协相关参数),并因此得到一个参数分布。QAP检验的零假设是实际观测到的网络参数(如)来自于这一个参数分布。也就是说,原假设认为这种观测到的相关关系是由随机因素带来的,因而这种网络相关并不显著。拒绝原假设,就从统计的角度证明了观测到的网络相关系数是显著的。

# R程序11-10:QAP检验
q.12 = qaptest(g, gcor, g1 = 1, g2 = 2)
q.13 = qaptest(g, gcor, g1 = 1, g2 = 3)   
# 看一下QAP输出的结果
par(mfrow=c(1,2))
summary(q.12)
plot(q.12)
# 拒绝原假设,图1和图2显著相关
summary(q.13)
plot(q.13)
# 接受原假设,图1和图3不相关

在检验这个关于两个网络是否存在相关的零假设的时候,我们计算置换后的参数分布中大于这个实际观测到的参数的比例,以及小于这个实际观测到的参数的比例。QAP检验返回实际数据中观测到的参数f(d)、通过置换所得到的参数f(perm)的数学分布、以及单尾的P值。其中单尾的p值包括两种情况:p(f(perm) >= f(d))和p(f(perm) <= f(d))。

其中P(f(perm) >= f(d))表示随机置换矩阵的相关系数的大于与等于观测值的p值,也就是本研究的检验显著性。一般而言,当p(f(perm) >= f(d))小于p(f(perm) <= f(d))时,拒绝原假设。

Updated: