拓端tecdat|R語言社區(qū)發(fā)現(xiàn)算法檢測心理學(xué)復(fù)雜網(wǎng)絡(luò):spinglass、探索性圖分析walktrap
原文鏈接:http://tecdat.cn/?p=24613
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
我們?cè)谛睦韺W(xué)網(wǎng)絡(luò)論文中看到的一個(gè)問題是,作者有時(shí)會(huì)對(duì)其數(shù)據(jù)的可視化進(jìn)行過度解釋。這尤其涉及到圖形的布局和節(jié)點(diǎn)的位置,例如:網(wǎng)絡(luò)中的節(jié)點(diǎn)是否聚集在某些社區(qū)。
下面我將詳細(xì)討論這個(gè)問題,并提供一個(gè)關(guān)于如何識(shí)別網(wǎng)絡(luò)中項(xiàng)目社群的基本R教程。非常歡迎在下面的評(píng)論部分提出反饋。
節(jié)點(diǎn)部署和 Fruchterman-Reingold 算法
我們創(chuàng)建一個(gè)例子。首先,我們拿一些數(shù)據(jù),估計(jì)一個(gè)正則化的偏相關(guān)網(wǎng)絡(luò),其中節(jié)點(diǎn)之間的邊類似于偏相關(guān),并使用'spring'命令繪制網(wǎng)絡(luò)。這是心理學(xué)網(wǎng)絡(luò)文獻(xiàn)中默認(rèn)的,使用Fruchterman-Reingold算法為圖中的節(jié)點(diǎn)創(chuàng)建一個(gè)布局:具有最多連接/最高連接數(shù)的節(jié)點(diǎn)被放在圖的中心。
cort<- cor(data)
graph(cort,layout="spring")
matrix
?是這 20 個(gè)項(xiàng)目的相關(guān)矩陣,?Size
?命令告訴我們有多少人。
這是結(jié)果圖:

然而,這里的節(jié)點(diǎn)部署只是許多同樣 "正確 "的節(jié)點(diǎn)部署方式中的一種。當(dāng)網(wǎng)絡(luò)中只有1-3個(gè)節(jié)點(diǎn)時(shí),算法將總是以同樣的方式部署它們(其中節(jié)點(diǎn)之間的邊的長度代表它們之間的關(guān)系有多強(qiáng)),算法唯一的自由度是圖形的旋轉(zhuǎn)。但是,特別是在有許多節(jié)點(diǎn)的圖中,部署方式只告訴我們一個(gè)非常粗略的結(jié)果,不應(yīng)該被過度解釋。
以下是繪制我們上述網(wǎng)絡(luò)的另外兩種方法,它們同樣 "正確"。
nNd <- 20
set.seed(1)
grh2<-grph
set.seed(2)
gr3<-grph

雖然項(xiàng)目之間的邊顯然是相同的,但節(jié)點(diǎn)的位置卻有很大的不同。
歐洲神經(jīng)精神藥理學(xué)例子
《歐洲神經(jīng)精神藥理學(xué)》(European Neuropsychopharmacology)上Madhoo & Levine的一篇新論文為這個(gè)問題提供了一個(gè)很好的例子。他們?cè)趦蓚€(gè)時(shí)間點(diǎn)(相隔12周)調(diào)查了約2500名被診斷為重度抑郁癥的精神科門診病人的14種抑郁癥狀的網(wǎng)絡(luò)結(jié)構(gòu)。這篇論文的一個(gè)非常不錯(cuò)的貢獻(xiàn)是,他們研究了網(wǎng)絡(luò)結(jié)構(gòu)隨時(shí)間的變化,其方式與我們以前在同一數(shù)據(jù)集中的研究有些不同。
與上面的網(wǎng)絡(luò)例子類似,他們使用正則化的偏相關(guān)網(wǎng)絡(luò)來估計(jì)兩個(gè)時(shí)間點(diǎn)的橫截面網(wǎng)絡(luò)模型,并使用Fruchterman-Reingold算法繪制網(wǎng)絡(luò)。他們通過目測得出結(jié)論,有4個(gè)癥狀群存在,而且這些癥狀群沒有隨時(shí)間變化。
"在基線時(shí),網(wǎng)絡(luò)由四個(gè)癥狀群組成(圖1a),即:。睡眠障礙(項(xiàng)目1-5),認(rèn)知和物理動(dòng)機(jī)缺損(項(xiàng)目6-9),情感(項(xiàng)目10-12)和食欲(項(xiàng)目(13-14)。
[...]終點(diǎn)癥狀分組(圖1b)與基線時(shí)相似"。

但這些發(fā)現(xiàn)和結(jié)論僅僅是基于對(duì)結(jié)果圖的視覺檢查--而我們?cè)谏厦嬉呀?jīng)了解到,對(duì)這些圖的解釋應(yīng)該非常謹(jǐn)慎。值得注意的是,這種視覺上的過度解讀在心理學(xué)網(wǎng)絡(luò)文獻(xiàn)中相當(dāng)常見。
讓人眼前一亮的另一個(gè)原因是,我們?cè)谧罱囊黄撐闹蟹治隽送粩?shù)據(jù)集的社群結(jié)構(gòu),發(fā)現(xiàn)社群的數(shù)量隨時(shí)間而變化--這與作者對(duì)圖表的視覺解釋相沖突。
R中的數(shù)據(jù)驅(qū)動(dòng)的社群聚類
那么,如何在R中做到這一點(diǎn)?有許多可能性,我介紹三種:一種來自潛變量建模領(lǐng)域的非常成熟的方法(特征值分解);一種來自網(wǎng)絡(luò)科學(xué)的成熟算法(spinglass算法);以及一種正在開發(fā)中的非常新的工具(使用walktrap算法的探索性圖分析)。
特征值分解
傳統(tǒng)上,我們想用潛變量框架來描述上述20個(gè)項(xiàng)目,問題是:我們需要多少個(gè)潛變量來解釋這20個(gè)項(xiàng)目之間的協(xié)方差?一個(gè)非常簡單的方法是查看數(shù)據(jù)中各成分的特征值。
plot(eigen)
abline(h=1)

這向我們顯示了Y軸上每個(gè)成分的每個(gè)特征值;X軸顯示了不同的成分。一個(gè)高的特征值意味著它能解釋項(xiàng)目之間的大量協(xié)方差。紅線描述了所謂的標(biāo)準(zhǔn):一個(gè)簡單的規(guī)則,決定我們需要多少個(gè)成分來充分描述項(xiàng)目之間的協(xié)方差(每個(gè)成分的特征值>1)。無論如何,根據(jù)我們現(xiàn)在使用的規(guī)則,我們可能會(huì)決定提取2-5個(gè)成分。我們還不知道哪個(gè)項(xiàng)目屬于哪個(gè)成分--為此,我們需要運(yùn)行,例如,探索性因子分析(EFA),看看因子載荷。
為什么這與網(wǎng)絡(luò)有關(guān)呢?許多論文現(xiàn)在已經(jīng)表明,潛變量模型和網(wǎng)絡(luò)模型在數(shù)學(xué)上是等價(jià)的,這意味著在大多數(shù)情況下,支撐數(shù)據(jù)的因素的數(shù)量將轉(zhuǎn)化為你在網(wǎng)絡(luò)中可以找到的社區(qū)的數(shù)量。
Spinglass算法
第二種方法是所謂的spinglass算法,該算法在網(wǎng)絡(luò)科學(xué)中已經(jīng)非常成熟。為此,我們將上面估計(jì)的網(wǎng)絡(luò)輸入到R中。最相關(guān)的部分是最后一行membership。
spinglascmy(g)
mershp
在我們的例子中,spinglass算法檢測到了5個(gè)社區(qū),這個(gè)向量代表了這20個(gè)節(jié)點(diǎn)屬于哪個(gè)社區(qū)(例如,節(jié)點(diǎn)1-7屬于社區(qū)5)。然后,我們可以很容易地在qgraph中繪制這些社區(qū),例如,對(duì)節(jié)點(diǎn)進(jìn)行相應(yīng)的著色。請(qǐng)注意,iqgraph是一個(gè)非常通用的軟件包,除了spinglass算法之外,它還有許多其他檢測社區(qū)的可能性,比如walktrap算法。(感謝Alex Millner對(duì)igraph的投入;當(dāng)然,這里所有的錯(cuò)誤都是我的錯(cuò)誤)。
值得注意的是,spinglass算法每次運(yùn)行都會(huì)導(dǎo)致不同的結(jié)果。這意味著你應(yīng)該在運(yùn)行spinglass.community之前通過set.seed()設(shè)置一個(gè)種子,而不是像我上面那樣。我運(yùn)行該算法1000次,看看得到的聚類數(shù)量的中位數(shù),然后找到一個(gè)能重現(xiàn)這個(gè)聚類數(shù)量中位數(shù)的種子。我在一篇論文中使用了這個(gè)解決方案(注意,使用不同的種子,解決方案看起來是不同的)。
同樣關(guān)鍵的是,要知道有許多種不同的方法來做社群檢測。Spinglass有些簡單化,因?yàn)樗辉试S項(xiàng)目成為一個(gè)社區(qū)的一部分--但可能項(xiàng)目被描述為同時(shí)屬于幾個(gè)社區(qū)更好。Barabási的書 "網(wǎng)絡(luò)科學(xué) "中有一個(gè)關(guān)于社區(qū)檢測的廣泛章節(jié)。Spinglass只是眾多機(jī)會(huì)中的一個(gè)。正如我上面提到的:例如walktrap,也是常用的,而且更穩(wěn)定。
探索性圖分析
第三種方法是通過探索性圖表分析。從你的數(shù)據(jù)中重新估計(jì)了一個(gè)正則化的部分相關(guān)網(wǎng)絡(luò),與我們上面所做的類似,然后使用walktrap算法來尋找網(wǎng)絡(luò)中的項(xiàng)目社群。在使用walktrap算法的情況下,這應(yīng)該會(huì)得到與igraph相同的結(jié)果(并且細(xì)節(jié)設(shè)置相同,比如步驟數(shù))。
優(yōu)點(diǎn)是--與特征值分解不同--它直接顯示哪些項(xiàng)目屬于哪些社群。
walktrap(da, plt= TRUE)

如果這個(gè)方法被證明是有效的,它非常容易使用,并自動(dòng)顯示你的項(xiàng)目屬于哪個(gè)社區(qū)。
請(qǐng)注意,目前,探索性圖分析采取你的數(shù)據(jù)并自動(dòng)估計(jì)一個(gè)高斯圖形模型(假設(shè)是多變量的正常變量)。
spinglass算法和walktrap算法結(jié)果是一樣的嗎?
現(xiàn)在,我們想檢查一下我們的結(jié)果的穩(wěn)健性:spinglass算法和使用walktrap算法在社區(qū)檢測方面是否一致?
這很容易做到:讓我們把這兩個(gè)網(wǎng)絡(luò)畫在一起,并對(duì)社區(qū)進(jìn)行相應(yīng)的著色。首先,我們根據(jù)結(jié)果來定義社群,然后用上面第一個(gè)網(wǎng)絡(luò)的布局來繪制網(wǎng)絡(luò)。
walktrap(coate tile="walktap")
spinglass(coratix, tite="spinglass")

直覺上--基于視覺檢查--walktrap的解決方案似乎更有意義,其中節(jié)點(diǎn)8屬于藍(lán)色社區(qū)而不是紫色社區(qū)。但是,同樣,這只是復(fù)雜關(guān)系的圖形顯示,我們?cè)谶@里必須謹(jǐn)慎解釋。
因此,讓我們用一個(gè)稍微不同的布局來繪制同一個(gè)網(wǎng)絡(luò)。
walktrap(layou = list(int = atinomNe2,no,2)))
spinglass(cori, ?layo.pr = list(iit=matrxnrm(Nd2)nde2

正如你現(xiàn)在看到的,在這個(gè)可視化中,不清楚節(jié)點(diǎn)8應(yīng)該屬于藍(lán)色還是紅色社區(qū),我們沒有明確的直觀偏好。
結(jié)論
如果你對(duì)網(wǎng)絡(luò)中的項(xiàng)目之間的統(tǒng)計(jì)社區(qū)感興趣,不要只在視覺上檢查你的圖。當(dāng)我為論文做這件事時(shí),我使用上面描述的三種方法,通常它們的結(jié)果相當(dāng)相似。顯然,你也可能對(duì)理論或概念更感興趣。在這種情況下,你可能根本不需要看你的數(shù)據(jù),不需要經(jīng)歷上述所有的麻煩。
請(qǐng)注意,上述spinglass或walktrap等社群檢測方法的最大局限是,項(xiàng)目確定地只屬于一個(gè)社群。對(duì)于心理學(xué)數(shù)據(jù)來說,擬合因子模型經(jīng)常會(huì)發(fā)現(xiàn)有交叉負(fù)荷的項(xiàng)目,這是一個(gè)問題。而你可以通過模擬一個(gè)2因子模型看到,其中1個(gè)項(xiàng)目在兩個(gè)因子上都有同樣的載荷。希望我們很快就能在R中實(shí)現(xiàn)允許項(xiàng)目同時(shí)屬于多個(gè)社區(qū)的算法(Barabási在他的《網(wǎng)絡(luò)科學(xué)》一書第9章中描述了幾個(gè)。

最受歡迎的見解
1.采用spss-modeler的web復(fù)雜網(wǎng)絡(luò)對(duì)所有腧穴進(jìn)行分析
2.用R語言和python進(jìn)行社交網(wǎng)絡(luò)中的社區(qū)檢測
3.R語言文本挖掘NASA數(shù)據(jù)網(wǎng)絡(luò)分析,tf-idf和主題建模
4.在R語言中使用航空公司復(fù)雜網(wǎng)絡(luò)對(duì)疫情進(jìn)行建模
5.python隸屬關(guān)系圖模型 基于模型的網(wǎng)絡(luò)中密集重疊社區(qū)檢測
6.使用Python和SAS Viya分析社交網(wǎng)絡(luò)
7.關(guān)聯(lián)網(wǎng)絡(luò)分析:已遷離北京外來人口的數(shù)據(jù)畫像
8.情感語義網(wǎng)絡(luò):游記數(shù)據(jù)感知旅游目的地形象
9.用關(guān)聯(lián)規(guī)則數(shù)據(jù)挖掘探索藥物配伍中的規(guī)律