如何在R中用pcalg、igraph、gRim包为DAG边添加偏相关系数
给PC算法生成的图添加偏相关系数边标签
完全可以给DAG/CPDAG的边加上偏相关系数,下面基于你的示例代码一步步实现:
1. 计算精度矩阵(用来推导偏相关)
因为用的是高斯数据,偏相关系数可以通过**精度矩阵(协方差矩阵的逆)**直接计算。在标准化数据下,精度矩阵的元素和偏相关有直接对应关系:
# 计算相关矩阵的逆(也就是标准化后的精度矩阵) prec_mat <- solve(cor(gmG8$x))
2. 给每条边计算偏相关并添加属性
把PC算法得到的图转成igraph对象后,遍历每条边,算出对应节点对的偏相关,存成边的属性:
gr <- as(pc.fit@graph, "igraph") # 遍历每条边计算偏相关 E(gr)$pcor <- sapply(E(gr), function(e) { u <- as.character(vertex(gr, e[1])) v <- as.character(vertex(gr, e[2])) # 偏相关的计算公式 -prec_mat[u, v] / sqrt(prec_mat[u, u] * prec_mat[v, v]) }) # 把数值保留两位小数,方便绘图显示 E(gr)$pcor_label <- round(E(gr)$pcor, 2)
3. 绘图时显示偏相关标签
修改原来的绘图代码,加上边标签参数就能显示偏相关值了:
plot.igraph(gr, layout=layout_in_circle, vertex.color='grey', vertex.shape='circle', vertex.size=25, vertex.label.cex=0.6, vertex.label.color='blue', edge.arrow.size=0.5, edge.label=E(gr)$pcor_label, # 显示偏相关数值 edge.label.cex=0.5, # 调整标签大小 edge.label.color='red') # 设置标签颜色
额外说明
这里计算的偏相关是控制所有其他变量后的结果,正好对应高斯图模型里直接边的含义——两个节点在排除其他所有节点的影响后,仍然存在相关性。如果要针对特定子集计算偏相关,可以用gaussCItest函数反向推导,但上面的方法更直接高效。
内容的提问来源于stack exchange,提问作者striatum
相关产品推荐
相关产品推荐

