2015-06-19 67 views
0

查找社交網絡成分〔Ⅰ複製從單獨交下面的例子的一部分,並改變了它適合我的特定需求]在Stata

pos_1 pos_2 
    2  4 
    2  5 
    1  2 
    3  9 
    4  2 
    9  3 

如PERSON_2連接到person_4上述被讀出,.. 。,person_4連接到person_2,person_9連接到person_3。

我想創建第三個分類[編輯]變量,組件,讓我知道觀察到的鏈接是否是該網絡中連接組件(子網)的一部分。在這種情況下,有在網絡中的兩個相連的部件:

pos_1 pos_2 component 
    2  4  1 
    2  5  1 
    1  2  1 
    3  9  2 
    4  2  1 
    9  3  2 

在部件1中的所有節點都連接到彼此,但不與節點部件2,反之亦然。有沒有辦法在Stata中生成這個組件變量?我知道有其他的程序可以做到這一點,但如果我可以將它集成到Stata中,我的代碼將更加無縫。

+0

爲什麼'component'等於'2'爲'3-9'和'9-3'但不是'2-4'和'4-2'? –

+0

有一條路徑連接2,4,5和1彼此。因此,它們是組成部分之一。例如,1通過與2連接而連接到4,而9和3相互連接,但沒有將9和3連接到任何其他節點的路徑,因此它們是第二個組件。 – vncor

+0

你見過http://stackoverflow.com/questions/26643899/from-edge-or-arc-list-to-clusters-in-stata? (還沒有答案。)這裏有什麼不同?你確定你只有兩個連接的組件? –

回答

2

如果reshape數據以長格式,你可以使用group_id(從SSC)來獲取你想要的東西:

clear 
input pos_1 pos_2 
    2  4 
    2  5 
    1  2 
    3  9 
    4  2 
    9  3 
end 

gen id = _n 
reshape long pos_, i(id) j(n) 

clonevar comp = id 
list, sepby(comp) 

group_id comp, match(pos) 

reshape wide pos_, i(id) j(n) 

egen component = group(comp) 
list 
+0

這非常聰明。謝謝! – vncor