R語(yǔ)言社區(qū)發(fā)現(xiàn)算法檢測(cè)心理學(xué)復(fù)雜網(wǎng)絡(luò):spinglass、探索性圖分析walktrap算法與可視化
原文鏈接:http://tecdat.cn/?p=24613
最近我們被客戶要求撰寫關(guān)于社區(qū)發(fā)現(xiàn)算法的研究報(bào)告,包括一些圖形和統(tǒng)計(jì)輸出。
我們?cè)谛睦韺W(xué)網(wǎng)絡(luò)論文中看到的一個(gè)問題是,作者有時(shí)會(huì)對(duì)其數(shù)據(jù)的可視化進(jìn)行過度解釋。這尤其涉及到圖形的布局和節(jié)點(diǎn)的位置,例如:網(wǎng)絡(luò)中的節(jié)點(diǎn)是否聚集在某些社區(qū)?(?點(diǎn)擊文末“閱讀原文”獲取完整代碼數(shù)據(jù)********?)。
下面我將詳細(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)之間的邊的長(zhǎng)度代表它們之間的關(guān)系有多強(qiáng)),算法唯一的自由度是圖形的旋轉(zhuǎn)。但是,特別是在有許多節(jié)點(diǎn)的圖中,部署方式只告訴我們一個(gè)非常粗略的結(jié)果,不應(yīng)該被過度解釋。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
R語(yǔ)言復(fù)雜網(wǎng)絡(luò)分析:聚類(社區(qū)檢測(cè))和可視化
左右滑動(dòng)查看更多
01
02
03
04
以下是繪制我們上述網(wǎng)絡(luò)的另外兩種方法,它們同樣 "正確"。
nNd?<-?20set.seed(1)grh2<-grphset.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ò)來(lái)估計(jì)兩個(gè)時(shí)間點(diǎn)的橫截面網(wǎng)絡(luò)模型,并使用Fruchterman-Reingold算法繪制網(wǎng)絡(luò)。他們通過目測(cè)得出結(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ái)自潛變量建模領(lǐng)域的非常成熟的方法(特征值分解);一種來(lái)自網(wǎng)絡(luò)科學(xué)的成熟算法(spinglass算法);以及一種正在開發(fā)中的非常新的工具(使用walktrap算法的探索性圖分析)。
特征值分解
傳統(tǒng)上,我們想用潛變量框架來(lái)描述上述20個(gè)項(xiàng)目,問題是:我們需要多少個(gè)潛變量來(lái)解釋這20個(gè)項(xiàng)目之間的協(xié)方差?一個(gè)非常簡(jiǎn)單的方法是查看數(shù)據(jù)中各成分的特征值。
plot(eigen)abline(h=1)
這向我們顯示了Y軸上每個(gè)成分的每個(gè)特征值;X軸顯示了不同的成分。一個(gè)高的特征值意味著它能解釋項(xiàng)目之間的大量協(xié)方差。紅線描述了所謂的標(biāo)準(zhǔn):一個(gè)簡(jiǎn)單的規(guī)則,決定我們需要多少個(gè)成分來(lái)充分描述項(xiàng)目之間的協(xié)方差(每個(gè)成分的特征值>1)。無(wú)論如何,根據(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算法檢測(cè)到了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算法之外,它還有許多其他檢測(cè)社區(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è)解決方案(注意,使用不同的種子,解決方案看起來(lái)是不同的)。
同樣關(guān)鍵的是,要知道有許多種不同的方法來(lái)做社群檢測(cè)。Spinglass有些簡(jiǎn)單化,因?yàn)樗辉试S項(xiàng)目成為一個(gè)社區(qū)的一部分--但可能項(xiàng)目被描述為同時(shí)屬于幾個(gè)社區(qū)更好。Barabási的書 "網(wǎng)絡(luò)科學(xué) "中有一個(gè)關(guān)于社區(qū)檢測(cè)的廣泛章節(jié)。Spinglass只是眾多機(jī)會(huì)中的一個(gè)。正如我上面提到的:例如walktrap,也是常用的,而且更穩(wěn)定。
探索性圖分析
第三種方法是通過探索性圖表分析。從你的數(shù)據(jù)中重新估計(jì)了一個(gè)正則化的部分相關(guān)網(wǎng)絡(luò),與我們上面所做的類似,然后使用walktrap算法來(lái)尋找網(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ū)檢測(cè)方面是否一致?
這很容易做到:讓我們把這兩個(gè)網(wǎng)絡(luò)畫在一起,并對(duì)社區(qū)進(jìn)行相應(yīng)的著色。首先,我們根據(jù)結(jié)果來(lái)定義社群,然后用上面第一個(gè)網(wǎng)絡(luò)的布局來(lái)繪制網(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è)稍微不同的布局來(lái)繪制同一個(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等社群檢測(cè)方法的最大局限是,項(xiàng)目確定地只屬于一個(gè)社群。對(duì)于心理學(xué)數(shù)據(jù)來(lái)說(shuō),擬合因子模型經(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è)。
點(diǎn)擊文末?“閱讀原文”
獲取全文完整資料。
本文選自《R語(yǔ)言社區(qū)發(fā)現(xiàn)算法檢測(cè)心理學(xué)復(fù)雜網(wǎng)絡(luò):spinglass、探索性圖分析walktrap算法與可視化》。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
數(shù)據(jù)分享|Python用Apriori算法關(guān)聯(lián)規(guī)則分析亞馬遜購(gòu)買書籍關(guān)聯(lián)推薦客戶和網(wǎng)絡(luò)圖可視化R語(yǔ)言復(fù)雜網(wǎng)絡(luò)分析:聚類(社區(qū)檢測(cè))和可視化
使用Python和SAS Viya分析社交網(wǎng)絡(luò)
R語(yǔ)言用igraph繪制網(wǎng)絡(luò)圖可視化
在R語(yǔ)言中使用航空公司復(fù)雜網(wǎng)絡(luò)對(duì)疫情進(jìn)行建模
R語(yǔ)言用相關(guān)網(wǎng)絡(luò)圖可視化分析汽車配置和飲酒習(xí)慣
R語(yǔ)言公交地鐵路線進(jìn)出站數(shù)據(jù)挖掘網(wǎng)絡(luò)圖可視化
python對(duì)網(wǎng)絡(luò)圖networkx進(jìn)行社區(qū)檢測(cè)和彩色繪圖R語(yǔ)言推特twitter網(wǎng)絡(luò)轉(zhuǎn)發(fā)可視化分析
R語(yǔ)言復(fù)雜網(wǎng)絡(luò)分析:聚類(社區(qū)檢測(cè))和可視化
R語(yǔ)言混合圖形模型MGM的網(wǎng)絡(luò)可預(yù)測(cè)性分析
R語(yǔ)言使用自組織映射神經(jīng)網(wǎng)絡(luò)(SOM)進(jìn)行客戶細(xì)分
R語(yǔ)言網(wǎng)絡(luò)分析友誼悖論案例
R語(yǔ)言網(wǎng)絡(luò)和網(wǎng)絡(luò)流的可視化實(shí)踐:通勤者流動(dòng)網(wǎng)絡(luò)
R語(yǔ)言最大流最小割定理和最短路徑算法分析交通網(wǎng)絡(luò)流量擁堵問題
R語(yǔ)言公交地鐵路線網(wǎng)絡(luò)圖實(shí)現(xiàn)數(shù)據(jù)挖掘?qū)崙?zhàn)
R軟件SIR模型網(wǎng)絡(luò)結(jié)構(gòu)擴(kuò)散過程模擬
通過SAS網(wǎng)絡(luò)分析對(duì)人口遷移進(jìn)行可視化分析
python隸屬關(guān)系圖模型:基于模型的網(wǎng)絡(luò)中密集重疊社區(qū)檢測(cè)方法
使用Python和SAS Viya分析社交網(wǎng)絡(luò)
用R語(yǔ)言和python進(jìn)行社交網(wǎng)絡(luò)中的社區(qū)檢測(cè)
python圖工具中基于隨機(jī)塊模型動(dòng)態(tài)網(wǎng)絡(luò)社團(tuán)檢測(cè)
在R語(yǔ)言中使用航空公司復(fù)雜網(wǎng)絡(luò)對(duì)疫情進(jìn)行建模
采用SPSS Modeler的Web復(fù)雜網(wǎng)絡(luò)對(duì)所有腧穴進(jìn)行分析