R語言社區發現算法檢測心理學複雜網絡:spinglass、探索性圖分析|附代碼數據

2023-07-24     tecdat拓端

原標題:R語言社區發現算法檢測心理學複雜網絡:spinglass、探索性圖分析|附代碼數據

原文連結:http://tecdat.cn/?p=24613

最近我們被客戶要求撰寫關於社區發現算法的研究報告,包括一些圖形和統計輸出。

我們在心理學網絡論文中看到的一個問題是,作者有時會對其數據的可視化進行過度解釋。這尤其涉及到圖形的布局和節點的位置,例如:網絡中的節點是否聚集在某些社區 點擊文末「閱讀原文」獲取完整代碼數據******** )。

下面我將詳細討論這個問題,並提供一個關於如何識別網絡中項目社群的基本R教程。非常歡迎在下面的評論部分提出反饋。

節點部署和 Fruchterman-Reingold 算法

我們創建一個例子。首先,我們拿一些數據,估計一個正則化的偏相關網絡,其中節點之間的邊類似於偏相關,並使用'spring'命令繪製網絡。這是心理學網絡文獻中默認的,使用Fruchterman-Reingold算法為圖中的節點創建一個布局:具有最多連接/最高連接數的節點被放在圖的中心。

cort<- cor(data)

graph(cort,layout="spring")

matrix 是這 20 個項目的相關矩陣, Size 命令告訴我們有多少人。

這是結果圖:

然而,這裡的節點部署只是許多同樣 "正確 "的節點部署方式中的一種。當網絡中只有1-3個節點時,算法將總是以同樣的方式部署它們(其中節點之間的邊的長度代表它們之間的關係有多強),算法唯一的自由度是圖形的旋轉。但是,特別是在有許多節點的圖中,部署方式只告訴我們一個非常粗略的結果,不應該被過度解釋。

點擊標題查閱往期內容

R語言複雜網絡分析:聚類(社區檢測)和可視化

左右滑動查看更多

01

02

03

04

以下是繪製我們上述網絡的另外兩種方法,它們同樣 "正確"。

nNd <- 20

set.seed(1)

grh2<-grph

set.seed(2)

gr3<-grph

雖然項目之間的邊顯然是相同的,但節點的位置卻有很大的不同。

歐洲神經精神藥理學例子

《歐洲神經精神藥理學》(European Neuropsychopharmacology)上Madhoo & Levine的一篇新論文為這個問題提供了一個很好的例子。他們在兩個時間點(相隔12周)調查了約2500名被診斷為重度抑鬱症的精神科門診病人的14種抑鬱症狀的網絡結構。這篇論文的一個非常不錯的貢獻是,他們研究了網絡結構隨時間的變化,其方式與我們以前在同一數據集中的研究有些不同。

與上面的網絡例子類似,他們使用正則化的偏相關網絡來估計兩個時間點的橫截面網絡模型,並使用Fruchterman-Reingold算法繪製網絡。他們通過目測得出結論,有4個症狀群存在,而且這些症狀群沒有隨時間變化。

"在基線時,網絡由四個症狀群組成(圖1a),即:睡眠障礙(項目1-5),認知和物理動機缺損(項目6-9),情感(項目10-12)和食慾(項目(13-14)。

[...]終點症狀分組(圖1b)與基線時相似"。

但這些發現和結論僅僅是基於對結果圖的視覺檢查--而我們在上面已經了解到,對這些圖的解釋應該非常謹慎。值得注意的是,這種視覺上的過度解讀在心理學網絡文獻中相當常見。

讓人眼前一亮的另一個原因是,我們在最近的一篇論文中分析了同一數據集的社群結構,發現社群的數量隨時間而變化--這與作者對圖表的視覺解釋相衝突。

R中的數據驅動的社群聚類

那麼,如何在R中做到這一點?有許多可能性,我介紹三種:一種來自潛變量建模領域的非常成熟的方法(特徵值分解);一種來自網絡科學的成熟算法(spinglass算法);以及一種正在開發中的非常新的工具(使用walktrap算法的探索性圖分析)。

特徵值分解

傳統上,我們想用潛變量框架來描述上述20個項目,問題是:我們需要多少個潛變量來解釋這20個項目之間的協方差?一個非常簡單的方法是查看數據中各成分的特徵值。

plot(eigen)

abline(h=1)

這向我們顯示了Y軸上每個成分的每個特徵值;X軸顯示了不同的成分。一個高的特徵值意味著它能解釋項目之間的大量協方差。紅線描述了所謂的標準:一個簡單的規則,決定我們需要多少個成分來充分描述項目之間的協方差(每個成分的特徵值>1)。無論如何,根據我們現在使用的規則,我們可能會決定提取2-5個成分。我們還不知道哪個項目屬於哪個成分--為此,我們需要運行,例如,探索性因子分析(EFA),看看因子載荷。

為什麼這與網絡有關呢?許多論文現在已經表明,潛變量模型和網絡模型在數學上是等價的,這意味著在大多數情況下,支撐數據的因素的數量將轉化為你在網絡中可以找到的社區的數量。

Spinglass算法

第二種方法是所謂的spinglass算法,該算法在網絡科學中已經非常成熟。為此,我們將上面估計的網絡輸入到R中。最相關的部分是最後一行membership。

spinglascmy(g)

mershp

在我們的例子中,spinglass算法檢測到了5個社區,這個向量代表了這20個節點屬於哪個社區(例如,節點1-7屬於社區5)。然後,我們可以很容易地在qgraph中繪製這些社區,例如,對節點進行相應的著色。請注意,iqgraph是一個非常通用的軟體包,除了spinglass算法之外,它還有許多其他檢測社區的可能性,比如walktrap算法。(感謝Alex Millner對igraph的投入;當然,這裡所有的錯誤都是我的錯誤)。

值得注意的是,spinglass算法每次運行都會導致不同的結果。這意味著你應該在運行spinglass.community之前通過set.seed()設置一個種子,而不是像我上面那樣。我運行該算法1000次,看看得到的聚類數量的中位數,然後找到一個能重現這個聚類數量中位數的種子。我在一篇論文中使用了這個解決方案(注意,使用不同的種子,解決方案看起來是不同的)。

同樣關鍵的是,要知道有許多種不同的方法來做社群檢測。Spinglass有些簡單化,因為它只允許項目成為一個社區的一部分--但可能項目被描述為同時屬於幾個社區更好。Barabási的書 "網絡科學 "中有一個關於社區檢測的廣泛章節。Spinglass只是眾多機會中的一個。正如我上面提到的:例如walktrap,也是常用的,而且更穩定。

探索性圖分析

第三種方法是通過探索性圖表分析。從你的數據中重新估計了一個正則化的部分相關網絡,與我們上面所做的類似,然後使用walktrap算法來尋找網絡中的項目社群。在使用walktrap算法的情況下,這應該會得到與igraph相同的結果(並且細節設置相同,比如步驟數)。

優點是--與特徵值分解不同--它直接顯示哪些項目屬於哪些社群。

walktrap(da, plt= TRUE)

如果這個方法被證明是有效的,它非常容易使用,並自動顯示你的項目屬於哪個社區。

請注意,目前,探索性圖分析採取你的數據並自動估計一個高斯圖形模型(假設是多變量的正常變量)。

spinglass算法和walktrap算法結果是一樣的嗎?

現在,我們想檢查一下我們的結果的穩健性:spinglass算法和使用walktrap算法在社區檢測方面是否一致?

這很容易做到:讓我們把這兩個網絡畫在一起,並對社區進行相應的著色。首先,我們根據結果來定義社群,然後用上面第一個網絡的布局來繪製網絡。

walktrap(coate tile="walktap")

spinglass(coratix, tite="spinglass")

直覺上--基於視覺檢查--walktrap的解決方案似乎更有意義,其中節點8屬於藍色社區而不是紫色社區。但是,同樣,這只是複雜關係的圖形顯示,我們在這裡必須謹慎解釋。

因此,讓我們用一個稍微不同的布局來繪製同一個網絡。

walktrap(layou = list(int = atinomNe2,no,2)))

spinglass(cori, layo.pr = list(iit=matrxnrm(Nd2)nde2

正如你現在看到的,在這個可視化中,不清楚節點8應該屬於藍色還是紅色社區,我們沒有明確的直觀偏好。

結論

如果你對網絡中的項目之間的統計社區感興趣,不要只在視覺上檢查你的圖。當我為論文做這件事時,我使用上面描述的三種方法,通常它們的結果相當相似。顯然,你也可能對理論或概念更感興趣。在這種情況下,你可能根本不需要看你的數據,不需要經歷上述所有的麻煩。

請注意,上述spinglass或walktrap等社群檢測方法的最大局限是,項目確定地只屬於一個社群。對於心理學數據來說,擬合因子模型經常會發現有交叉負荷的項目,這是一個問題。而你可以通過模擬一個2因子模型看到,其中1個項目在兩個因子上都有同樣的載荷。希望我們很快就能在R中實現允許項目同時屬於多個社區的算法(Barabási在他的《網絡科學》一書第9章中描述了幾個。

點擊文末 「閱讀原文」

獲取全文完整資料。

本文選自《R語言社區發現算法檢測心理學複雜網絡:spinglass、探索性圖分析walktrap算法與可視化》。

點擊標題查閱往期內容

數據分享|Python用Apriori算法關聯規則分析亞馬遜購買書籍關聯推薦客戶和網絡圖可視化R語言複雜網絡分析:聚類(社區檢測)和可視化

使用Python和SAS Viya分析社交網絡

R語言用igraph繪製網絡圖可視化

在R語言中使用航空公司複雜網絡對疫情進行建模

R語言用相關網絡圖可視化分析汽車配置和飲酒習慣

R語言公交地鐵路線進出站數據挖掘網絡圖可視化

python對網絡圖networkx進行社區檢測和彩色繪圖R語言推特twitter網絡轉發可視化分析

R語言複雜網絡分析:聚類(社區檢測)和可視化

R語言混合圖形模型MGM的網絡可預測性分析

R語言使用自組織映射神經網絡(SOM)進行客戶細分

R語言網絡分析友誼悖論案例

R語言網絡和網絡流的可視化實踐:通勤者流動網絡

R語言最大流最小割定理和最短路徑算法分析交通網絡流量擁堵問題

R語言公交地鐵路線網絡圖實現數據挖掘實戰

R軟體SIR模型網絡結構擴散過程模擬

通過SAS網絡分析對人口遷移進行可視化分析

python隸屬關係圖模型:基於模型的網絡中密集重疊社區檢測方法

使用Python和SAS Viya分析社交網絡

用R語言和python進行社交網絡中的社區檢測

python圖工具中基於隨機塊模型動態網絡社團檢測

在R語言中使用航空公司複雜網絡對疫情進行建模

採用SPSS Modeler的Web複雜網絡對所有腧穴進行分析

文章來源: https://twgreatdaily.com/zh-mo/ffb07e9f1a307bcea23e508ad6194073.html