基于R语言的量表网络分析笔记

基础知识点

 网络分析常用指标结果图和相关分析解释可参考如下链接文章

https://doi.org/10.1016/j.jad.2022.05.061

 网络分析完整代码

#加载网络分析所需要的工具包
library(qgraph)
library(networktools)
library(ggplot2)
library(bootnet)  

#读入数据(每行代表一个人,每列代表一个量表数据)并查看数据情况
mydata=read.csv("E:/NA/data.csv")  
summary(mydata)

#根据自己的数据给每列值赋予名称
myname<-c("LT","LE","ST","SE","PMS1","PMS2","PMS3","SIS1","SIS2","SIS3","PPC1",
"PPC2","PPC3","PPC4","PSSS1","PSSS2","PSSS3","CPSS1","CPSS2")
colnames(mydata)<-myname
mydata.frame<-myname

#根据每列量表属性进行分组,比如1-4列属于Dpress(这个名字随意)
feature_group<-list(Dpress=c(1:4),PHQ=c(5:7),GAD=c(8:10),ISI=c(11:14),g4=c(15:17),g5=c(18:19))

#使用Lasso算法对相关矩阵进行稀疏化,调优参数设置为0.5
#网络的可视化采用Fruchterman-Reingold算法,连接强且数量多的节点出现在网络的中心附近,连接弱且数量少的节点行走在网络的外围
# qgraph()中使用Fruchterman-Reingold算法,布局参数需要设置为“spring”。
# R-package mgm计算predictability


# Compute node predictability  体现在网络图中每个节点外的小圆圈
library(mgm) 
p <- ncol(mydata)
fit_obj <- mgm(data = mydata,
               type = rep('g', p),
               level = rep(1, p),
               lambdaSel = 'CV',
               ruleReg = 'OR',
               pbar = FALSE)

pred_obj <- predict(fit_obj, mydata)

# Compute graph with tuning = 0.5 (EBIC) 
# 即构建网络并使用Lasso算法对相关矩阵进行稀疏化,调优参数设置为0.5

CorMat <- cor_auto(mydata)
EBICgraph <- qgraph(CorMat, graph = "glasso", sampleSize = nrow(mydata),groups=feature_group, nodeNames=myname,
                    tuning = 0.5, layout = "spring", details = TRUE, pie = pred_obj$error[,2])


#该方法与上同,基本关系不变 #partial correlation计算抑郁量表相关性,但因后边需用到mynetwork,所以这步必须运行
mynetwork <- estimateNetwork(mydata, default = "EBICglasso", tuning = 0.5,corMethod="cor",corArgs=list(method="spearman",use="pairwise.complete.obs")) 
plot(mynetwork,layout = "spring",nodeNames=myname,groups=feature_group,pie = pred_obj$error[,2])


#将网络图保存成pdf,EBICgraph默认跑出来的图更好看
setwd("E:/NA")
pdf("Mynetwork1.pdf")
myplot<-plot(EBICgraph,layout = "spring",nodeNames=myname,pie = pred_obj$error[,2])   
dev.off()   

# R-package qgraph计算expected influence
dev.new()
myplot<-plot(mynetwork,layout = "spring",nodeNames=myname,groups=feature_group)
pdf("expected influence",width=4)
c1<-centralityPlot(myplot,include = "ExpectedInfluence")
dev.off()

# R-package bootnet 检验网络的鲁棒性

b1<-bootnet(mynetwork,boots=1000,nCores=4,statistics=c("strength","expectedInfluence","edge"))
b2<-bootnet(mynetwork,boots=1000,nCores=4,type="case",statistics=c("strength","expectedInfluence","edge"))

#save bootstrapped files 保存的意义是免得下次要看结果的时候再跑,也可以选择不保存
setwd("E:/NA")
save(b1,file = "b1.Rdata")
save(b2,file = "b2.Rdata")

#下面几个就是bootstrap后的检验的一些指标,可按需
#save expectedInfluence diff test
pdf("EIDifference.pdf")
plot(b1,"expectedInfluence",order="sample",labels = TRUE)

#save edge stability graph
pdf("EdgeStability.pdf")
plot(b2,"expectedInfluence")

#Edge weights diff test
pdf("EdgeDifftest.pdf")
plot(b1,"edge",plot="difference",onlyNonZero = TRUE,order="sample")

#网络分析中第2个重要指标bridge expected influence
# R-package networktools计算bridge expected influence 
library(networktools)

#constructing a partial correlation matrix
myedges<-getWmat(mynetwork)
write.csv(myedges,"MyNetcorkEdgess.csv")

#estimate bridge values for each node
#这里1代表量表组1,4个1也就是你的数据前4列是一个group
mybridge<-bridge(myplot,communities = c('1','1','1','1','2','2','2','3','3','3','4','4','4','4','5','5','5','6','6'),useCommunities="all", directed=NULL,nodes=NULL)

#下面就是画图
#create bridge graph
pdf("bridgecentrality.pdf",width=4)
plot(mybridge,include="Bridge Strength")
dev.off()

#create bridge expected influence graph
pdf("bridgeEI.pdf",width=4)
plot(mybridge,include="Bridge Expected Influence (1-step)",width=4)
dev.off()

#bridge symptoms也就是将上面计算得到的mybridge指标的第4组指标(bridge expected influence)进行排序后,取前10%或20%最大的节点,就为bridge symptoms
#sort and find bridge symptoms
a<-sort(mybridge[[4]])

#通过bootstrap来进行检验
#Bridge stability
caseDroppingBoot<-bootnet(mynetwork,boots=1000,type="case",
                          statistics = c("bridgeStrength","bridgeExpectedInfluence"),
                          communities = feature_group)

#get stability coefficients
corStability(caseDroppingBoot)

#plot centrality stability
plot(caseDroppingBoot,statistics="bridgeStrength")
plot(caseDroppingBoot,statistics="bridgeExpectedInfluence")

#Bridge stability;centraity difference
nonParametricBoot<-bootnet(mynetwork,boots=1000,type="nonparametric",
                           statistics = c("bridgeStrength","bridgeExpectedInfluence"),
                           communities = feature_group)

#plot centrality difference
plot(nonParametricBoot,statistics = "bridgeExpectedInfluence",plot="difference")
plot(nonParametricBoot,statistics = "bridgeStrength",plot="difference")


#网络对比分析,一般文章会分为男女两组人,去看网络差异
#Network Comparison test(NCT)
install.packages("NetworkComparisonTest")  #下载安装工具包
library(NetworkComparisonTest) 

#load data
data1<-read.table("E:/NA/gender1data.csv")  
data2<-read.table("E:/NA/gender2data.csv")  

#feature_group也是根据自己数据情况去设定
colnames(mydata)<-myname
mydata.frame<-myname
feature_group<-list(Dpress=c(1:10),PHQ=c(11:19),GAD=c(20:26),ISI=c(27:33))

newdata1<-na.omit(data1)
newdata2<-na.omit(data2)     #NCT不能有缺失数据

#estimate networks
mynetwork1<-estimateNetwork(newdata1,default = "EBICglasso")
mynetwork2<-estimateNetwork(newdata2,default = "EBICglasso")

plot(mynetwork1,layout = "spring",nodeNames=myname,groups=feature_group)
plot(mynetwork2,layout = "spring",nodeNames=myname,groups=feature_group)

#Run NCT
myNCT1<-NCT(mynetwork1,mynetwork2,it=1000,weighted=TRUE,test.edges=FALSE,edges="ALL",  test.centrality=TRUE, 
            centrality=c("strength","expectedInfluence"),nodes="all",)

#Get results
summary(myNCT)


至此,网络分析结束。小编也是初学者小白一个,如有任何不妥之处及任何问题都可以随时提问,欢迎指正,相互学习。这是小编写博客的初衷,利己利人,希望以后也能一如既往。

  • 52
    点赞
  • 142
    收藏
    觉得还不错? 一键收藏
  • 54
    评论
在汇编语言中,中断向量表是一个包含中断处理程序地址的表格。每个中断都有一个唯一的中断向量,用于标识该中断。中断向量表是一个由操作系统或硬件设备维护的数据结构,其作用是将中断向量映射到相应的中断处理程序。 在计算机启动时,中断向量表被加载到内存中的固定位置。通常,中断向量表位于内存地址0处。每个中断向量占用4个字节,其中前2个字节是偏移量,后2个字节是段选择器。偏移量指向中断处理程序的代码段内存地址,段选择器指向代码段所在的段描述符。 计算中断向量表中某一中断的偏移量和段选择器的过程如下: 1. 确定中断号(即中断向量)。 2. 将中断号乘以4,得到中断向量在中断向量表中的偏移量(每个中断向量占用4个字节)。 3. 用偏移量作为索引,从中断向量表中读取4个字节,即中断处理程序的偏移量和段选择器。 4. 将段选择器左移4位,再加上中断处理程序的偏移量,得到中断处理程序的代码段内存地址。 以下是一个示例代码,演示如何计算中断向量表中的中断处理程序地址: ``` ORG 0 ; 中断向量表 DW INT0 ; 中断向量0 DW INT1 ; 中断向量1 DW INT2 ; 中断向量2 DW INT3 ; 中断向量3 ; 中断处理程序 INT0: ; 处理中断0 INT1: ; 处理中断1 INT2: ; 处理中断2 INT3: ; 处理中断3 ; 计算中断处理程序地址 MOV AX, 0 ; AX = 0 MOV SI, 1 ; SI = 中断号 SHL SI, 2 ; 中断号 * 4 ADD AX, [SI] ; AX = 中断处理程序的偏移量 MOV DS, [SI+2] ; DS = 段选择器 SHL DS, 4 ; DS << 4 ADD AX, DS ; AX = 中断处理程序的代码段内存地址 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 54
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值