基于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)


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

### 使用R语言进行李克特量表数据分析 #### 数据准备 为了有效地处理和分析李克特量表的数据,在导入数据到R环境之后,通常会先清理并转换这些数据以便于进一步的操作。这可能涉及到将问卷中的文字选项映射成数值型变量。 #### 描述性统计分析 描述性统计对于初步了解收集来的响应情况至关重要。通过计算均值、标准差和其他汇总统计数据来概括样本特征[^1]。 ```r library(likert) data <- read.csv("survey_data.csv") # 假设CSV文件名为'survey_data.csv' items <- data[, c('Q1', 'Q2', 'Q3')] # 提取相关列作为项目列表 item_likert <- likert(items) summary(item_likert) # 显示基本统计信息 plot(item_likert, ordered=FALSE) # 绘制条形图展示各项目的频数分布 ``` #### 可视化表示 利用图形可视化手段可以帮助更直观地解释结果。`likert()` 函数来自同名包 `likert` ,它能够创建专门针对此类评分尺度设计的图表。 #### 探索性因子分析(EFA) 当存在多个相互关联的问题项时,探索性因子分析有助于识别潜在结构或维度。此过程可以揭示哪些题目倾向于一起变动,并据此归纳出几个主要因素。 ```r efa_results <- fa(r = cor(items), nfactors = 3, rotate="varimax") print.psych(efa_results) # 输出旋转后的载荷矩阵 fa.diagram(efa_results) # 展示简化版路径图说明变量间关系 ``` #### 验证性因子分析(CFA) 如果已有理论框架指导,则可通过验证性因子模型检验假设是否成立。这里采用的是 lavaan 软件包来进行 SEM (Structural Equation Modeling) 分析的一部分——CFA。 ```r library(lavaan) model <- ' factor1 =~ Q1 + Q2 + Q3 factor2 =~ Q4 + Q5 + Q6 ' fit <- cfa(model, data=data) summary(fit, fit.measures=TRUE) # 获取拟合优度指数及其他诊断指标 parameterEstimates(fit) # 查看参数估计详情 semPaths(fit, "std", edge.label.cex=.8)# 制作标准化系数路径图 ``` 以上展示了如何运用 R 来执行从基础至高级层面的一系列李克特量表数据分析任务。值得注意的是,具体实现细节可能会依据实际应用场景和个人偏好有所不同。
评论 61
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值