百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

R数据分析:网络分析的做法,原理和复现方法

bigegpt 2024-09-17 12:38 7 浏览

对于复杂问题和现象行为的研究,尤其是他们之间还有复杂的交互影响(complex interplay)的时候,网络分析(备用名:psychological networks, network analysis or network psychometrics)是个备选的好方法,这个方法火了也没几年,感兴趣的同学可以去学学,而且,如果你再能把网络图做的美点,应该各个审稿人都愿意看的。今天尝试给大家做个网络分析的简单介绍。

举个例子,像physiological, psychological, social and environmental factors等等如何影响肥胖,很复杂,做个多元回归?做个结构方程模型?这些都缺乏系统性的视角,从整体上把握肥胖的影响因素之间的关系,找最重要的干预靶点推荐用网络分析。

像健康,行为,心理,认知功能等等,反正就是复杂系统的分析,想不到课题了,就可以考虑在方法上上网络分析

From a network perspective, health behaviours and outcomes can be conceptualised as emergent phenomena from a system of reciprocal interactions: network analysis offers a powerful methodological approach to investigate the complex patterns of such relationships.

比如一个文章,研究自杀的,原文贴在下面:

Bloch-Elkouby, S., Gorman, B., Schuck, A., Barzilay, S., Calati, R., Cohen, L. J., Begum, F., & Galynker, I. (2020). The suicide crisis syndrome: A network analysis. Journal of Counseling Psychology, 67(5), 595–607.

通过网络分析作者就回答了三个问题:一是自杀崩溃综合征中不同症状的关系是什么?二是这些症状有没有哪几个格外重要?三是这些症状有没有一些聚集性?三个问题每一个都很有价值,一个网络分析全给你解决了,感兴趣的同学下载去读读。

还有一个点很重要,网络分析可以帮助你识别复杂系统的干预点,这个其实是很有临床价值的

network analyses allow for the computation of centrality indices that provide information about the symptoms that are the most connected to the other symptoms included in the network and whose potential causal contribution to the other symptoms may thus deserve further investigation

如果你是搞人文社科的,由于其是一个针对复杂人文系统的作用关系,网络分析也是最容易帮助你提出原创理论假设的一项重要技术支撑。总体的意思就是想推动0到1的科研,这个方法必须要学。

网络分析基础

一个最简单的网络,像这样

有好些点叫做node,这些点被线连起来的,线叫做edge。

在网络图中点表示的是变量,线表示的是变量关系,注意这个线是没有箭头的(一般是偏相关系数),正向系数是绿线,负值系数是红线,线的粗细反应关系的强度,越粗越强。通过这么一个网络图,对于多变量间的复杂关系就可以有一个一目了然的呈现。

Psychological networks consist of nodes representing observed variables, connected by edges representing statistical relationships. This methodology has gained substantial footing and has been used in various different fields of psychology, such as clinical psychology, psychiatry, personality research, social psychology , and quality of life research

成图的基本步骤如下

首先得有数据间的统计模型,模型系数作为edge的权重,然后成图,然后评估模型。

具体来讲可以选择的统计模型多了: correlations, covariances, partial correlations, regression coefficients, odds ratios, factor loadings,一般我们都是选用偏相关系数作为边的权重。节点固定的情况下,网络可以画的很密的,为了增加interpretability and generalizability和网络的稳定性,需要用一些正则通常是LASSO来简化网络,就是把哪些意义不大的边搞掉,使得网络图更加的简洁好解释。成图之后就是评估模型了,主要的分析有两个edge stability analysis和centrality indices,以下简单介绍:

edge stability analysis

本身来讲网络分析就是比较复杂的,网络的随机性相对于别的分析就要大一些,而且本身来讲我们的科研逻辑就是用样本反映总体,如果你做出来的网络不稳定你能说你发现的比如肥胖比如自杀的网络是可信的?所以做完网络分析之后我们对于网络的稳健性我们是一定要报告的,逻辑就是进行反复的bootstrap抽样,反复的重新估计模型,反复的重新计算confidence intervals (e.g. 95% CI) for their edge estimates看看这些模型的差异从而评估模型的稳健性,通过edge stability analysis我们可以得到网络各个边的权重的置信区间,区间越窄,说明网络越稳定。做edge stability analysis的示例代码如下:

resboot1 <- bootnet(Data, default = c("EBICglasso"), tuning=.5,corMethod="cor_auto",
 nBoots = 1000, nCores = 8, type = c("nonparametric")) 

通常这一部分论文中也会以图的形式报告出来。

centrality indices

在网络分析中每个节点的重要性是不一样的,是不是存在某些节点相对于另外的节点更重要?对节点重要性的评估的指标就是centrality indices,这个指标又包含3个指数strength, closeness, and betweenness,三个指标的意思见下面:

strength, which shows how well a node is directly connected to other nodes, closeness, which shows how well a node is indirectly connected to other nodes, and betweenness, which quantifies the number of times a node acts as a bridge along the shortest path between two other nodes

简单的逻辑就是如果图中的一个点和另外的点连线多越强,那么这个点就重要,这个点也越应该放在图的中心;如果一个点和其他点的间接距离越近那么这个点越容易受到网络变动的影响;如果一个点平均来看总是在两两关系中起桥接作用,那么这个点对整个网络的构成就意义极大。

通常只报告strength就可以,因为其他两个指数都不太稳定。

实例操练

我们今天依照一篇2022年发表在American Journal of Public Health Research上的研究为参照进行做法复现,文章的名字叫Partial Relationships between Health and Fitness Measures in Adults: A Network Analysis

结果中作者报告了变量的两两相关的相关系数矩阵还有模型的network edge weights,见下表:

作者报告了网络图还有模型的centrality indices,都是以图的形式呈现的,见下图:

还有Bootstrapped edge weight estimates,也是一个图:

那么我们今天就来看下,这个论文的图如何用自己的数据复现出来。

比如我现在有数据如下,有2800个观测,26个变量,最后一个变量是性别,其余的25个变量是5个5条目的量表

首先我要做的是拟合网络模型,拟合网络模型用到的核心函数是estimateNetwork,通常我们只用设置data和default参数便可以运行,我们要通过lasso来简化网络的话就设置default = "EBICglasso",将拟合好的网络模型对象喂给plot即可以出网络图。

比如我要对男性观测拟合网络模型,可以写出代码如下:

network_male <- estimateNetwork(df %>% 
                                  filter(gender == "Male") %>% 
                                  select(-gender),
                                default = "EBICglasso",
                                corMethod = "spearman")

运行完毕后,直接将模型对象喂给plot即可出图:

到这儿就基本算是完成了,但是要发表的话还是有点粗糙的,其实我们的数据中不同的字母(变量名)代表的是不同的量表,其实更好的方法是将各个量表的条目放一起,并且给出图例,使得其一目了然,所以接下来我们得对图形做一些调整。

比如我要对节点的整体布局做一个调整并且加上每个量表的图例,我就可以在代码中加上group参数,指明每个节点都是来自哪个量表的:

这样其实就好看多了,当然如果需要更细的图例,比如我想知道每个节点到底啥意思,我还可以用nodeNames参数加上节点的图例:

这样就更好了,赞。

但是我们注意American Journal of Public Health Research上的这篇研究是给边加了标签的,我们要出这样的效果的话只需要设定edge.labels为真就可以了,因为节点比较多,加上标签其实效果就不太好了:

我们接着再看作者的另外的两个图的做法,一个是centrality indices的图,我们只需要将模型对象喂给centralityPlot即可出图:

另一个是边的权重估计的图,只需要将模型对象喂给bootnet,并且plot就可出来:

可以看到我们的图的效果其实是比原文好的。

到这儿,原文中所有的结果都给大家复现完了。

网络分析的协变量控制

本身来讲网络分析的输入数据其实是相关矩阵,这个时候我们想控制协变量比如年龄、性别、民族等等,可行的方法就是做回归取残差,以残差的相关矩阵作为模型的输入,同样的思想可以在结构方程中使用,比如你做个交叉滞后想控制协变量就可以用这个方法哈,中英文的发表文献引用证据都各给大家贴一个,做法上也都很好实现的:

小结

今天给大家写了网络分析的做法,其实还有一块就是网络分析的对比,解决的问题是几个网络是不是不一样,或者同一个网络的某两个边是不是不一样,这个以后有机会给大家写。

感谢大家耐心看完,自己的文章都写的很细,重要代码都在原文中,希望大家都可以自己做一做,请转发本文到朋友圈后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先记得收藏,再点赞分享。

也欢迎大家的意见和建议,大家想了解什么统计方法都可以在文章下留言,说不定我看见了就会给你写教程哦,有疑问欢迎私信,有合作意向请直接滴滴我。

如果你是一个大学本科生或研究生,如果你正在因为你的统计作业、数据分析、模型构建,科研统计设计等发愁,如果你在使用SPSS, R,Mplus中遇到任何问题,都可以联系我。因为我可以给您提供最好的,最详细和耐心的数据分析服务。

如果你对Z检验,t检验,方差分析,多元方差分析,回归,卡方检验,相关,多水平模型,结构方程模型,中介调节,量表信效度等等统计技巧有任何问题,请私信我,获取详细和耐心的指导。

如果你或你的团队需要专业的科研数据清洗,建模服务,教学培训需求等等。请联系我。

If you are a student and you are worried about you statistical #Assignments, #Data #Analysis, #Thesis, #Reports, #Composing, #Quizzes, Exams.. And if you are facing problem in #SPSS, #R-Programming, #Excel, Mplus, then contact me. Because I could provide you the best services for your Data Analysis.

Are you confused with statistical Techniques like z-test, t-test, ANOVA, MANOVA, Regression, Logistic Regression, Chi-Square, Correlation, Association, SEM, multilevel model, mediation and moderation etc. for your Data Analysis...??

Then Contact Me. I will solve your Problem...

If You or Your Research Team Need Professional Scientific Data Cleaning, Model Building Services or Statistical Consulting... Please Contact Me.

往期精彩

R数据分析:用R建立预测模型

R数据分析:再写stargazer包,如何输出漂亮的表格

R数据分析:贝叶斯定理的R语言模拟

R数据分析:ROC曲线与模型评价实例

R数据分析:用R语言做潜类别分析LCA

R数据分析:什么是人群归因分数Population Attributable Fraction

R数据分析:样本量计算的底层逻辑与实操,pwr包

R数据分析:临床预测模型的样本量探讨及R实现

R数据分析:如何用R做验证性因子分析及画图,实例操练

R数据分析:有调节的中介

R文本挖掘:中文文本聚类

R文本挖掘:中文词云生成,以2021新年贺词为例

R数据分析:多分类逻辑回归

R数据分析:如何做数据的非线性关系,多项式回归的做法和解释

R数据分析:跟随top期刊手把手教你做一个临床预测模型

R数据分析:二分类因变量的混合效应,多水平logistics模型介绍

R机器学习:分类算法之logistics回归分类器的原理和实现

R数据分析:变量间的非线性关系,多项式,样条回归和可加模型

R数据分析:PLS结构方程模型介绍,论文报告方法和实际操作

R数据分析:如何给结构方程画路径图,tidySEM包详解

R数据分析:纵向数据如何做中介,交叉滞后中介模型介绍

R数据分析:临床预测模型实操,校准曲线和DCA曲线做法示例

R数据分析:结合APA格式作图大法讲讲ggplot2和ggsci,请收藏

R数据分析:嵌套数据分析为什么要用加随机效应?终于解释清楚了

R数据分析:Lasso回归筛选变量构建Cox模型并绘制列线图

相关推荐

方差分析简介(方差分析通俗理解)

介绍方差分析(ANOVA,AnalysisofVariance)是一种广泛使用的统计方法,用于比较两个或多个组之间的均值。单因素方差分析是方差分析的一种变体,旨在检测三个或更多分类组的均值是否存在...

正如404页面所预示,猴子正成为断网元凶--吧嗒吧嗒真好吃

吧嗒吧嗒,绘图:MakiNaro你可以通过加热、冰冻、水淹、模塑、甚至压溃压力来使网络光缆硬化。但用猴子显然是不行的。光缆那新挤压成型的塑料外皮太尼玛诱人了,无法阻挡一场试吃盛宴的举行。印度政府正...

Python数据可视化:箱线图多种库画法

概念箱线图通过数据的四分位数来展示数据的分布情况。例如:数据的中心位置,数据间的离散程度,是否有异常值等。把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)...

多组独立(完全随机设计)样本秩和检验的SPSS操作教程及结果解读

作者/风仕在上一期,我们已经讲完了两组独立样本秩和检验的SPSS操作教程及结果解读,这期开始讲多组独立样本秩和检验,我们主要从多组独立样本秩和检验介绍、两组独立样本秩和检验使用条件及案例的SPSS操作...

方差分析 in R语言 and Excel(方差分析r语言例题)

今天来写一篇实际中比较实用的分析方法,方差分析。通过方差分析,我们可以确定组别之间的差异是否超出了由于随机因素引起的差异范围。方差分析分为单因素方差分析和多因素方差分析,这一篇先介绍一下单因素方差分析...

可视化:前端数据可视化插件大盘点 图表/图谱/地图/关系图

前端数据可视化插件大盘点图表/图谱/地图/关系图全有在大数据时代,很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,开发人员很多时候需要使用图表来表现一些数据。随着Web技术的...

matplotlib 必知的 15 个图(matplotlib各种图)

施工专题,我已完成20篇,施工系列几乎覆盖Python完整技术栈,目标只总结实践中最实用的东西,直击问题本质,快速帮助读者们入门和进阶:1我的施工计划2数字专题3字符串专题4列表专题5流程控制专题6编...

R ggplot2常用图表绘制指南(ggplot2绘制折线图)

ggplot2是R语言中强大的数据可视化包,基于“图形语法”(GrammarofGraphics),通过分层方式构建图表。以下是常用图表命令的详细指南,涵盖基本语法、常见图表类型及示例,适合...

Python数据可视化:从Pandas基础到Seaborn高级应用

数据可视化是数据分析中不可或缺的一环,它能帮助我们直观理解数据模式和趋势。本文将全面介绍Python中最常用的三种可视化方法。Pandas内置绘图功能Pandas基于Matplotlib提供了简洁的绘...

Python 数据可视化常用命令备忘录

本文提供了一个全面的Python数据可视化备忘单,适用于探索性数据分析(EDA)。该备忘单涵盖了单变量分析、双变量分析、多变量分析、时间序列分析、文本数据分析、可视化定制以及保存与显示等内容。所...

统计图的种类(统计图的种类及特点图片)

统计图是利用几何图形或具体事物的形象和地图等形式来表现社会经济现象数量特征和数量关系的图形。以下是几种常见的统计图类型及其适用场景:1.条形图(BarChart)条形图是用矩形条的高度或长度来表示...

实测,大模型谁更懂数据可视化?(数据可视化和可视化分析的主要模型)

大家好,我是Ai学习的老章看论文时,经常看到漂亮的图表,很多不知道是用什么工具绘制的,或者很想复刻类似图表。实测,大模型LaTeX公式识别,出乎预料前文,我用Kimi、Qwen-3-235B...

通过AI提示词让Deepseek快速生成各种类型的图表制作

在数据分析和可视化领域,图表是传达信息的重要工具。然而,传统图表制作往往需要专业的软件和一定的技术知识。本文将介绍如何通过AI提示词,利用Deepseek快速生成各种类型的图表,包括柱状图、折线图、饼...

数据可视化:解析箱线图(box plot)

箱线图/盒须图(boxplot)是数据分布的图形表示,由五个摘要组成:最小值、第一四分位数(25th百分位数)、中位数、第三四分位数(75th百分位数)和最大值。箱子代表四分位距(IQR)。IQR是...

[seaborn] seaborn学习笔记1-箱形图Boxplot

1箱形图Boxplot(代码下载)Boxplot可能是最常见的图形类型之一。它能够很好表示数据中的分布规律。箱型图方框的末尾显示了上下四分位数。极线显示最高和最低值,不包括异常值。seaborn中...