网络模型已经成为抽象复杂系统,是深入了解许多科学领域中观测变量之间的关系模式的流行方法。这些应用程序大多数集中于分析网络的结构。但是,如果不是直接观察网络,而是根据数据进行估算(如:吸烟与癌症之间存在关联),则除了网络结构外,我们还可以分析网络中节点的可预测性。也就是说:网络中的所有其余节点如何预测网络中的给定节点?
可预测性有趣,有几个原因:
- 它给我们提供了一个关于边的实用性的想法:如果节点A连接到许多其他节点,但是这些仅说明(假设)其方差的1%,那么边的连接会是怎样的?
- 它告诉我们网络的不同部分在多大程度上是由网络中的其他因素决定的
在此博文中,我们使用R-估计网络模型并计算地震灾民数据集上的创伤后应激障碍(PTSD)症状。我们对网络模型和可预测性进行可视化,并讨论如何将网络模型和节点的可预测性相结合来设计症状网络的有效干预措施。
载入资料
我们加载提供的数据:
data <- as.matrix(data) p <- ncol(data) dim(data)## [1] 312 17
数据集包含对344人的17种PTSD症状的完整反应。症状强度的答案类别范围从1“没有”到5“非常强”。
估计网络模型
我们估计了混合图形模型,其中我们将所有变量都视为连续高斯变量。因此,我们将所有变量的类型设置为,type = 'g'
并将每个变量的类别数设置为1:
fit_obj <- (data = data, type = rep('g', p), level = rep(1, p), lambdaSel = 'CV', ruleReg = 'OR', pbar = FALSE)
计算节点的可预测性
估计网络模型后,我们准备计算每个节点的可预测性。由于可以通过依次获取每个节点并对其上的所有其他节点进行回归来估计该图,因此可以轻松地计算节点的可预测性)。作为可预测性的度量,我们选择解释的方差的比例:0表示当前节点根本没有被节点中的其他节点解释,1表示完美的预测。我们在估算之前将所有变量中心化,以消除截距的影响。
有关如何计算预测和选择可预测性度量的详细说明,请查看本文。如果网络中还有其他变量类型(例如分类),我们可以为这些变量选择适当的度量。
pred_obj <- predict(object = fit_obj, data = data pred_obj$error ## Variable R2 ## 1 intrusion 0.639 ## 2 dreams 0.661 ## 3 flash 0.601 ## 4 upset 0.636 ## 5 physior 0.627 ## 6 avoidth 0.686 ## 7 avoidact 0.681 ## 8 amnesia 0.410 ## 9 lossint 0.520 ## 10 distant 0.498 ## 11 numb 0.451 ## 12 future 0.540 ## 13 sleep 0.565 ## 14 anger 0.562 ## 15 concen 0.638 ## 16 hyper 0.676 ## 17 startle 0.626
我们计算了网络中每个节点的解释方差(R2)的百分比。接下来,我们将估计的网络可视化,并讨论与解释方差有关的结构。
可视化网络和可预测性
我们根据估计的加权邻接矩阵和节点的可预测性度量作为参数,进行网络可视化:
graph(fit_obj$pairwise$wadj, # 加权邻接矩阵作为输入 layout = 'spring', pie = pred_obj$error[,2], # 误差作为饼图的输入