seminar1_NEW - Daria-Maltseva/pajek GitHub Wiki

Семинар 1

Задание 1 / Семинар 1

Для сети ниже создайте файл формата net, откройте его в Pajek и визуализируйте.
Для отображения размера узлов и цвета разделения на группы используйте файлы форматов vec и clu.
sem11

Сеть:

% HSE seminar 1; 2022
*Vertices 6
1 "a" 
2 "b" 
3 "c" 
4 "d" 
5 "e" 
6 "f" 
*Arcs
1 2
2 1
1 4
1 6
2 6
3 3
5 3
5 6
*Edges
2 5
3 4

Файл net

Вектор:

*Vertices 6
1
2
3
2
1
3

Файл vec
Обратите внимание, что центральность по degree для узла С = 3, т.к. у него имеется петля (поэтому он больше структурно похожего на него узла D).

Кластеринг / разделение на группы:

*Vertices 6
1
2
1
2
1
2

Файл clu

Визуализация
Посмотрите, что меняется при изображении разных компонентов и их комбинаций:

Draw -- Network
Draw -- Network + First Partition
Draw -- Network + First Partition + First Vector 

В окошке Draw зайдите в меню Options и поменяйте цвета и размеры узлов, связей и лейблов.

Options -- Size -- of Vertices / Lines / Arrows etc. 
Options -- Colors -- Edges / Arcs / Vertcies -- Select [выбираем цвет в палитре] 

После применения кластеринга цвет узлов определяется через

Partition Colors -- for Vertices

Нужно открыть палитру и выбрать цвет для кластеров 1 и 2 (в файле их 2).
Чтобы отображались различные цвета линий, проверьте, отжата ли галочка в пункте:

Lines - Grey Scale

(в обратном случае это хорошая опция для визуализации больших сетей, которая показывает силу связи градиентом серого).
Сохраните картинку:

Export -- 2D -- JPEG -- RUN [картинка будет максимально приближена к тому, что вы видите на экране] 
Export -- 2D -- SVG -- General [картинка будет отличаться от изображения на экране и будет опосредована параметрами в:] 
Export -- Options

Задание 2 / Семинар 2

Используйте сети:
Мировая торговля различными изделиями из металла, 1994
Неформальное общение на лесопилке во время забастовки

Откройте сети net и связанные файлы (vec, clu), либо файл paj, и попробуйте сделать следующие шаги. Внимательно прочтите описание сетей, обратите внимание на их характеристики и подумайте, что из предложенного вы можете сделать, а что нет.

  • выведите основную информацию по сети
Network - Info - General 

(или используем кнопку I рядом с окошком Networks)

  • посчитайте для узлов различные виды центральностей, выведите топ значений
Network - Create vector - Centrality - Degree - Input \ Output \ All 
  • сделайте line cut для сети, удалите узлы-изолянты (node cut)
[смотрим на line values]
Network - Info - Line values [write the number of clusters to which you`d like to split the line values]
[выбираем пороговое значение]
Network - Create new network - Transform - Remove - Lines with value - Lower than [treshold]
[чтобы удалить узлы-изолянты]
Network - Create Partition - Centrality - Degree - All [смотрим на partition, видим кластер 0] 
Operations - Network + Partition - Extract - SubNetwork Induced by Union of Selected Clusters [1-*, т.е. не включаем кластер 0] 
получаем подсеть без изолянтов

Для сети strike этот пункт невыполним, т.к. сеть является невзвешенной (сила всех связей = 1, что видно из файла).

  • переведите взаимные связи из направленных в ненаправленные
Network - Create New Network - Transform - Arcs->Edges - Bidirected Only [только взаимно направленные]    

Для сети strike этот пункт невыполним, т.к. сеть является ненаправленной (имеет только edges, видно из файла). С ней можно сделать обратную процедуру:

Network - Create New Network - Transform - Edges->Arcs    
  • визуализируйте получившуюся сеть, поменяйте цвета, сохраните визуализации (используйте код выше, также см. подсказки здесь
Draw -- Network
Draw -- Network + First Partition
Draw -- Network + First Partition + First Vector 

Семинар 3

На прошлых двух семинарах мы уже научились работать в Pajek - загружать и сохранять сетевые данные и атрибуты сети, визуализировать, трансформировать сети, считать некоторые статистики и меры центральности, выделять подгруппы на основе наиболее сильных связей. На этом семинаре мы посмотрим на выполнение других процедур сетевого анализа, которые мы уже знаем по работе в R, таким образом структурируя наши знания по нескольким основным блокам - подсчету сетевой статистики, выделению важных узлов и выделению важных подгрупп в сети.
Для удобства, продолжим работать с уже знакомыми нам сетевыми объектами:
Мировая торговля различными изделиями из металла, 1994
Неформальное общение на лесопилке во время забастовки

Сетевая статистика

Размер сети

Network - Info - General 

(или используем кнопку I рядом с окошком Networks)
(!) Если вы потеряли окошко с отчетом (Report), откройте его через (да, иногда его приходится открывать таким образом):

Info - Child Windows - Report Windows - Show 

Пример информации о сети:

==============================================================================
1. Strike.net (24)
==============================================================================
Number of vertices (n): 24
----------------------------------------------------------
                                       Arcs          Edges
----------------------------------------------------------
Total number of lines                     0             38
----------------------------------------------------------
Number of loops                           0              0
Number of multiple lines                  0              0
----------------------------------------------------------
Density1 [loops allowed]    = 0.13194444
Density2 [no loops allowed] = 0.13768116
Average Degree = 3.16666667

Получаем:

  • размер сети (количество узлов)
  • количество направленных и ненаправленных связей, петлей и множественных связей
  • плотность сети (с петлями и без)
  • среднее значение количества связей (average degree)

Геодезическое расстояние
Расчет кратчайших путей между двумя узлами в сети (дистанции):

Network - Create Vector - Distribution of Distances* [звездочка означает, что выполнение требует вычислительных мощностей и лучше использовать для небольших сетей]

Для сети strike.paj:

Distribution of Distances
==============================================================================
 Number of unreachable pairs: 0
 Average distance among reachable pairs: 2.99275
 The most distant vertices: Frank (1) and Russ (20). Distance is 6.

Для сети trade.paj:

  Distribution of Distances
==============================================================================
 Number of unreachable pairs: 2574
 Average distance among reachable pairs: 2.93833
 The most distant vertices: Turkey (76) and Czech Rep. (17). Distance is 12.

Диады и триады, транзитивность и реципрокность
Напомним, какие типы (диад и) триад существуют (Triadic Census):
image
Посчитать количество диад и триад в сети, определить их реципрокность, найти транзитивные триады:

Network - Info - Triadic Census - [Report with models?] - Yes / No 

Пример выдачи [Yes]:

  Type    Number of triads (ni)            Expected (ei)             (ni-ei)/ei     Model
----------------------------------------------------------------------------------------------------------
   3 - 102                   664                   63.64                    9.43     Balance [реципрокные отношения в диаде] 
  16 - 300                    12                    0.01                  869.41     Balance [реципрокные отношения в триаде] 
----------------------------------------------------------------------------------------------------------
   1 - 003                  1280                  832.18                    0.54     Clusterability
----------------------------------------------------------------------------------------------------------
   4 - 021D                    0                   63.64                   -1.00     Ranked Clusters [ранжированные кластеры]
   5 - 021U                    0                   63.64                   -1.00     Ranked Clusters [ранжированные кластеры]

Пример выдачи [No]:

   Type    Number of triads (ni)            Expected (ei)             (ni-ei)/ei
--------------------------------------------------------------------------------
   1 - 003                  1280                  832.18                    0.54    [пустая триада]  
   2 - 012                     0                  797.22                   -1.00     
   3 - 102                   664                   63.64                    9.43    [реципрокная диада] 
   4 - 021D                    0                   63.64                   -1.00     
   5 - 021U                    0                   63.64                   -1.00     
   6 - 021C                    0                  127.29                   -1.00     
   7 - 111D                    0                   20.32                   -1.00     
   8 - 111U                    0                   20.32                   -1.00     
   9 - 030T                    0                   20.32                   -1.00     
  10 - 030C                    0                    6.77                   -1.00     
  11 - 201                    68                    1.62                   40.91     [запрещенные триады] 
  12 - 120D                    0                    1.62                   -1.00     
  13 - 120U                    0                    1.62                   -1.00     
  14 - 120C                    0                    3.24                   -1.00     
  15 - 210                     0                    0.52                   -1.00     
  16 - 300                    12                    0.01                  869.41     [реципрокная триада] 
--------------------------------------------------------------------------------
 Transitive                   12                   23.58
 Intransitive                 68                  180.09
--------------------------------------------------------------------------------
 Chi-Square: 20167.3828***
 6 cells (37.50%) have expected frequencies less than 5.
 The minimum expected cell frequency is 0.01.

Количество присутствующих триад в сети можно сравнить с расчетом их случайного распределения в данной сети (и увидеть, что какие-то типы триад встречаются в сети чаще, чем ожидается).

Степень узла и ассортативность
Что-то новое :)
Ассортативность по степени (количеству связей, degree) - это феномен в социальных сетях, согласно которому узлы с высокой степенью связей связаны с узлами с высокой степенью связей, тогда как узлы с низкой степенью связаны с узлами с низкой степенью связей (похоже на гомофилию - "Рыбак рыбака видит издалека", но для числовых (не категориальных, как при гомофилии) переменных). Можно сравнивать соответствие значений для "отправителя" и "получателя".

Network - Info - Degree Assortativity - Input/Output-Input/Output [для направленных сетей; для ненаправленных подходит любой вариант]

Возвращает коэффициент ассортативности - корреляцию Пирсона между числовыми значениями узлов (их степенями). Максимальное значение = 1, минимальное = -1 (дисассортативность).

Сила связей
Для сети trade.paj

Network - Info - Line values [выбираем количество кластеров, на которые распределяем веса связей]

Пример выдачи:

2. Imports_manufactures (80)
==============================================================================
Lowest value of line:             144.00000000
Highest value of line:        3059235.00000000

         Line Values                                   Frequency       Freq%      CumFreq  CumFreq%
---------------------------------------------------------------------------------------------------
 (                       ...              144.0000]            1      0.1000            1    0.1000
 (              144.0000 ...          1019841.0000]          991     99.1000          992   99.2000
 (          1019841.0000 ...          2039538.0000]            6      0.6000          998   99.8000
 (          2039538.0000 ...          3059235.0000]            2      0.2000         1000  100.0000
---------------------------------------------------------------------------------------------------
  Total                                                     1000    100.0000
  • Дихотомизация сети по силе связи
    Для дихотомизации сеть должна иметь разную силу связей, поэтому используем сеть trade.paj (в R мы также дихотомизировали сети мировой торговли). Выше мы уже рассмотрели, как можно удалить в сети связи ниже определенного порогового значения (и соответствующие им узлы); в таком случае у нас удаляются связи ниже определенного значения, но у оставшихся связей присутствует вариация в силе связи. При дихотомизации такой вариации нет - связи делятся на две группы - 1 (которые не входят в новую сеть) и 2 (которые входят). Чтобы определить группу 1, нужно задать условие - при каком пороговом значении показатели силы связи делятся на две группы.
Network - Create New Network - Transform - Line values - Recode [в открывающемся окошке указать пороговое значение]
[проверим]
Network - Info - Line Values [видим разделение на 1 и 2] 
[Этого уже может быть достаточно для наших целей, но также можно и сократить сеть.]  
[удалим связи, относящиеся к группе 1]
Network - Create new network - Transform - Remove - Lines with value - Lower than [2] [указываем значение, которое НЕ входит в нужный промежуток]
[удалим узлы, относящиеся к связям, вошедшим в группу 1]
Network - Create Partition - Centrality - Degree - All [смотрим на partition, видим кластер 0] 
Operations - Network + Partition - Extract - SubNetwork Induced by Union of Selected Clusters [1-*, т.е. не включаем кластер 0] 
[получаем подсеть без изолянтов - остались только узлы, связанные силой связи 2; можем перекодировать] 
Network - Create New Network - Transform - Line values - Set all line values to 1

Важные узлы в сети

Степень центральности
В семинаре 2 мы уже рассчитывали центральность. В Pajek есть различные меры центральности:

Network - Create vector - Centrality - Degree - Input \ Output \ All 
Network - Create vector - Centrality - Weighted Degree - Input \ Output \ All [для взвешенных (с разным весом связей) сетей] 
Network - Create vector - Centrality - Closenness
Network - Create vector - Centrality - Betweenness 
...

Подгруппы в сети

Выделение групп по атрибутам
Посмотрим на сеть strike.paj и выделим группу испаноговорящих работников (Strike_groups.clu: classification of the (24) employees according to age and ethnic group: 1 - Spanish-speaking employees, 2 - young (30 or younger) English-speaking employees, 3 - old (over 30) English- speaking employees).

Partition - Info
[получаем] 
1. Strike_groups.clu (24)
==============================================================================
Dimension: 24
The lowest value:  1
The highest value: 3
Frequency distribution of cluster values:
   Cluster      Freq     Freq%   CumFreq  CumFreq% Representative
 ----------------------------------------------------------------
         1         4   16.6667         4   16.6667 Alejandro
         2         9   37.5000        13   54.1667 Frank
         3        11   45.8333        24  100.0000 Norm
 ----------------------------------------------------------------
       Sum        24  100.0000

Выделяем группу 1:

Operations - Network + Partition - Extract - SubNetwork Induced by Union of Selected Clusters [1]     

Spanish2

Выделение групп по сетевым характеристикам

  • Компоненты
Network - Create Partition - Components [Weak/ Strong] 

Вспомните - в чем разница между слабыми и сильными компонентами?

  • k-Core
    k-Ядро - подграф, в котором каждый узел примыкает по крайней мере к минимальному числу k других узлов в подгруппе (in-, out-, all). Если из графа рекурсивно удалить все узлы и связи, инцидентные им, степени меньше чем k, оставшийся граф является k-ядром.
Network - Create Partition - k-Core 

Результат для сети strike.paj:

9. All core partition of N1 (24, core=3)
==============================================================================
Dimension: 24
The lowest value:  1
The highest value: 3
Frequency distribution of cluster values:
   Cluster      Freq     Freq%   CumFreq  CumFreq% Representative
 ----------------------------------------------------------------
         1         1    4.1667         1    4.1667 Frank
         2        19   79.1667        20   83.3333 Gill
         3         4   16.6667        24  100.0000 Alejandro
 ----------------------------------------------------------------
       Sum        24  100.000
  • Подход островов / Islands Approach
Network - Create Partition - Islands - Generate Networks with Islands [нужно нажать эту опцию]
Network - Create Partition - Islands - Line Weights [указать минимальный и максимальный размеры подгрупп; рекомендуется минимальный делать >=2]

Сеть trade.paj - размер [2, 10]

15. Islands [Line Weights] in N2 [2,10] (80, Islands=3)
==============================================================================
Dimension: 80
The lowest value:  0
The highest value: 3
Frequency distribution of cluster values:
   Cluster      Freq     Freq%   CumFreq  CumFreq% Representative
 ----------------------------------------------------------------
         0        65   81.2500        65   81.2500 Algeria
         1         2    2.5000        67   83.7500 Argentina
         2         7    8.7500        74   92.5000 Austria
         3         6    7.5000        80  100.0000 Canada
 ----------------------------------------------------------------
       Sum        80  100.000

Выделяем подгруппы:

Operations - Network + Partition - Extract - SubNetwork Induced by Union of Selected Clusters [1-*]    

Islands

  • Клики и полные подграфы в сети
    Максимально связанная подгруппа в сети, состоящая их 3+ узлов. Клики размера 3 могут быть найдены с помощью процедуры поиска Triadic Census.

  • Выделение сообществ / Community detection

Network - Create Partition - Communities [Louvain Method / VOS Clustering]