Ishodi učenja:

  • Definirati i razlikovati čvorove, veze te komponente grafova.

  • Prevesti realni problem u mrežni model (čvorovi, veze, granice mreže).

  • Konstruirati mrežu iz edge liste/matrice susjedstva u R-u.

  • Interpretirati razliku ego-mreže i whole-network pristupa.

Uvod u teoriju grafova i mreže

Kompleksna mreža je velika zbirka međusobno povezanih čvorova (van Steen, 2010). Kako bi se te strukture precizno proučavale, koristi se okvir teorije grafova, gdje se mreže formaliziraju kao matematički objekti nazvani grafovi.

Osnovni elementi grafa i osnovni pojmovi u SNA

Prema Van Steenu (2010), graf se sastoji od sljedećih temeljnih komponenti:

  • Graf (\(G\)): Definira se kao par \(G = (V, E)\), gdje je \(V\) skup vrhova (čvorova), a \(E\) skup bridova (veza).

  • Vrhovi (Vertices/Nodes): Predstavljaju entitete u mreži, kao što su ljudi, računala ili biološke stanice.

  • Bridovi/Lukovi (Edges/Links/Arcs): Spajaju točno dva vrha, koji se nazivaju krajnjim točkama te relacije. Može se raditi o cestama, interakcijama, transakcijama i drugim oblicima povezanosti između čvorova.

  • Ako brid spaja vrhove \(u\) i \(v\), piše se \(e = \langle u, v \rangle\).

  • Vrhovi \(u\) i \(v\) su tada susjedni (adjacent), a brid \(e\) je incidentan s tim vrhovima.

  • Neusmjereni graf ima bridove: Veza je dvosmjerna (npr. prijateljstvo na Facebooku).

  • Usmjereni graf ima lukove: Veza ima smjer (npr. jednosmjerna ulica, praćenje na Twitteru). Logistički problemi su gotovo uvijek usmjereni – roba ide od tvornice do skladišta, a ne obrnuto.

  • Kad ističemo smjer, reći ćemo luk; za neusmjerene veze – brid.

  • Ako u mreži postoji \(n\) čvorova, tada mreža može imati i do \(\frac{n(n-1)}{2}\) brida ili \(n(n−1)\) lukova.

  • Ako su svi čvorovi međusobno povezani, tada je riječ o potpunom grafu.

  • Ukoliko u mreži, tj. grafu postoje nepovezane skupine čvorova, kaže se da se sastoji od komponenti. S obzirom na specifičan oblik, neki česti podgrafovi nazvani su npr. zvijezda ili klika.

Vizualni primjer mreže

Evo kako bismo vizualizirali jednostavnu mrežu koristeći DiagrammeR. Ovo je opći primjer grafa s 4 čvora (A, B, C, D) i usmjerenim, ponderiranim (težinskim) vezama.

Graf koji smo upravo nacrtali (simple_network) pomaže nam definirati još nekoliko ključnih pojmova.

Ovaj usmjereni, težinski graf \(G\) možemo formalno definirati kao par \(G = (V, E)\).

\[ V = \{A, B, C, D\} \]

Skup lukova su veze među tim čvorovima:

\[ E = \{(A, B), (A, C), (B, C), (B, D), (C,D)\} \]

što možemo zapisati i kao:

\[ E = \{x_{AB}, x_{AC}, x_{BC}, x_{BD}, x_{CD}\} \]

Ovdje je brid označen s \(x\), jer ćemo ga mi tako zapisivati u nastavku, iako se uobičajeno u zapisu koristi i \(e\) (pa bi tada to bilo: \(E = \{e_{AB}, e_{AC}, e_{BC}, e_{BD}, e_{CD}\}\)).

  • Matrica susjedstva je najprecizniji način da se opišu veze (bridovi, lukovi). Matrica susjedstva (engl. adjacency matrix), \(A\), opisuje topologiju (strukturu) grafa. Element \(A_{ij}\) je 1 ako postoji luk koji ide iz čvora \(i\) u čvor \(j\), a 0 ako ne postoji.

\(A_{ij} = \begin{cases} 1, & \text{ako postoji luk } (i, j) \in E \\ 0, & \text{inače} \end{cases}\)

\(A_{ij}\) A B C D
A 0 1 1 0
B 0 0 1 1
C 0 0 0 1
D 0 0 0 0

Čitamo:

  • \(A_{AC} = 1\): Postoji veza iz A u C.
  • \(A_{CA} = 0\): Ne postoji veza iz C u A.


  • Susjedi (engl. neighbors): Dva čvora su susjedi ako su izravno povezani bridom/lukom. Ovdje moramo biti precizni, jer je naš graf usmjeren:

    • Izlazni susjedi (engl. out-neighbors): Čvor \(A\) ima dva izlazna susjeda: \(B\) i \(C\). To su čvorovi do kojih \(A\) može izravno doći.
    • Ulazni susjedi (engl. in-neighbors): Čvor \(D\) ima dva ulazna susjeda: \(B\) i \(C\). To su čvorovi koji mogu izravno doći do \(D\).
    • U neusmjerenom grafu (bez strelica), susjedstvo je simetrično: ako je \(A\) susjed \(B\), onda je i \(B\) susjed \(A\).


  • Susjedstvo (engl. neighborhood): Skup svih susjeda jednog čvora.

    • Izlazno susjedstvo čvora \(A\) je skup \(\{B, C\}\).
    • Ulazno susjedstvo čvora \(D\) je skup \(\{B, C\}\).
    • Zašto je ovo važno? Mnogi mrežni algoritmi (npr. pretraživanje, traženje puta, analiza toka) u suštini se oslanjaju na sustavno pretraživanje susjedstva čvorova kako bi donijeli odluku o sljedećem koraku.


  • Matrica težina (ili troškova), \(C\), definira “cijenu” putovanja po lukovima definiranim u matrici \(A\).

Ako ne postoji luk (gdje je \(A_{ij} = 0\)), trošak putovanja tim putem smatramo beskonačnim (\(\infty\)), jer je put nemoguć.

\(C_{ij} = \begin{cases} \text{težina luka}(i, j), & \text{ako } A_{ij} = 1 \\ \infty, & \text{ako } A_{ij} = 0 \text{ i } i \neq j \\ 0, & \text{ako } i = j \end{cases}\)

\(C_{ij}\) A B C D
A 0 5 3 \(\infty\)
B \(\infty\) 0 2 8
C \(\infty\) \(\infty\) 0 4
D \(\infty\) \(\infty\) \(\infty\) 0

Napomena: U praksi solveri umjesto \(\infty\) koriste veliki broj (Big-M, npr. \(10^6\) ili veći od svake realne rute) kako bi nedopuštene veze bile “ekonomski nemoguće”, ali numerički konačne.


Iako su matrica susjedstva (\(A\)) i matrica težina (\(C\)) teorijski precizan način definiranja grafa, u računarskoj praksi one često nisu najučinkovitiji format za pohranu, posebno kod velikih mreža (Cormen et al., 2009). Alternativni i često preferirani pristup je eksplicitno navođenje samo onih lukova koji postoje putem liste lukova (engl. edge list). Lista lukova je tablična struktura, tipično s tri stupca: (izvor, odredište, težina).

Za naš primjer, lista lukova \(E\) je:

\[ E = \{ (A, B, 5), (A, C, 3), (B, C, 2), (B, D, 8), (C, D, 4) \} \]

Ili, u obliku data.frame (kako bi to R paketi očekivali):

from to weight
A B 5
A C 3
B C 2
B D 8
C D 4


  • Put (engl. path):

    • Što je to? Niz povezanih lukova koji vode od jednog čvora do drugog, poštujući smjer lukova. Put \(A \to D\) u našem gornjem primjeru može biti \(A \to C \to D\).
    • Zašto je bitno? Pojam puta je fundamentalan. Algoritmi poput Dijkstrinog ili Bellman-Fordovog traže put s najmanjom ukupnom težinom (tzv. najkraći put). Analiza dosežnosti (može li se uopće doći od A do B?) ovisi o samom postojanju puta.


  • Ciklus (engl. cycle):

    • Što je to? Put koji počinje i završava u istom čvoru. Na primjer, kad bi u našem grafu postojao luk \(D \to A\), imali bismo ciklus \(A \to C \to D \to A\).

    • Zašto je bitno? Ciklusi su izuzetno važni.

      • U problemima najkraćeg puta, ciklusi s negativnim zbrojem težina (npr. put \(B \to C \to B\) s ukupnim troškom -5) mogu stvoriti paradoks “beskonačno jeftinog” puta i algoritam se neće moći izvršiti (npr. Bellman-Ford detektira takve cikluse).
      • U projektnom planiranju (PERT/CPM), ciklus bi značio nemoguću situaciju logičke ovisnosti (npr. “Zadatak A mora biti gotov prije Zadatka B, a Zadatak B prije Zadatka A”).


  • Izvor (engl. source) i Ponor (engl. sink):

    • Što je to? Ovo su formalni nazivi za početne i završne točke u mnogim mrežnim problemima.
    • Izvor (source): Čvor koji nema ulaznih lukova (njegov “ulazni stupanj” ili in-degree je 0). Sve “teče” iz njega.
    • Ponor/ odredište (sink): Čvor koji nema izlaznih lukova (njegov “izlazni stupanj” ili out-degree je 0). Sve “teče” u njega.
    • Zašto je bitno? Ovi su pojmovi temelj za probleme toka (engl. flow problems). U problemu maksimalnog toka, cilj je poslati što više “materijala” (npr. podataka, vode, prometa) od jednog ili više izvora do jednog ili više ponora, poštujući kapacitete lukova.


  • Stupanj vrha (\(\delta(v)\)): Broj bridova incidentnih s vrhom \(v\). Kod usmjerenih grafova razlikuju se ulazni stupanj (indegree) i izlazni stupanj (outdegree).


  • Povezanost (engl. connectedness):

    • Što je to? Opisuje je li graf “u jednom komadu”. Usmjereni graf je jako povezan (strongly connected) ako iz svakog čvora možete doći do svakog drugog. Slabo je povezan (weakly connected) ako je povezan, ali samo ako ignorirate smjerove lukova (tretirate ga kao neusmjerenog).
    • Dosežnost kaže da je čvor \(v\) dosežan iz \(u\) ako postoji put od \(u\) do \(v\). Skup svih čvorova dosežnih iz \(u\) čini komponentu dosežnosti čvora \(u\) (u usmjerenom grafu razlikujemo “prema naprijed” i “prema natrag”).
    • Zašto je bitno? Povezanost je osnovna provjera “zdravlja” mreže. Prije pokretanja algoritma za traženje puta od A do B, moramo znati je li B uopće dosežan iz A. Analiza povezanosti može identificirati izolirane dijelove mreže (komponente) koji se moraju promatrati zasebno.

Ovi osnovni pojmovi čine “abecedu” kojom ćemo opisivati i rješavati sve složenije mrežne modele, počevši od transportnog problema. Neki od osnovnih mrežnih modela koje susrećemo u praksi su:


  • Komponente grafa

Komponenta: Maksimalni povezani podgraf.

Dijada je najmanja moguća mrežna jedinica: dva čvora i veza (ili izostanak veze) između njih. Primjer dijade je (6, 10): ona može biti povezana (6 - 10) ili nepovezana (nema veze).

Trijada je skup od tri čvora (7, 8, 9) sa svim vezama među njima. Trijade su važne jer omogućuju opis stabilnih obrazaca poput zatvaranja (svi su povezani) ili posredovanja (jedan čvor povezuje dva koja nisu izravno povezana).

Analiza društvenih mreža koristi više razina analize:

  • mikro (čvor) – npr. stupanj čvora ili njegova lokalna okolina;
  • mezo (grupe) – npr. zajednice/klasteri i obrasci unutar timova;
  • makro (cijela mreža) – npr. gustoća, komponente i opća povezanost sustava.

Osnovne metrike

  • Stupanj čvora

Stupanj čvora (degree) je broj veza koje su incidentne s promatranim čvorom. U neusmjerenoj mreži to je jednostavno broj susjeda čvora.

Za čvor \(v\) u neusmjerenom grafu:

\[δ(v)=∣{u∈V:(v,u)∈E}∣\]

U usmjerenom grafu razlikujemo:

  • ulazni stupanj (in-degree): broj veza koje dolaze u čvor,

  • izlazni stupanj (out-degree): broj veza koje izlaze iz čvora.

Interpretacija: stupanj opisuje koliko je čvor “lokalno povezan”, ali ne govori ništa o tome koga povezuje (npr. je li povezan unutar jednog kruga ili povezuje različite grupe).

  • Gustoća mreže

Gustoća mreže (density) mjeri koliko je mreža povezana u odnosu na maksimalno mogući broj veza.

Za neusmjereni graf s \(n\) čvorova maksimalno je moguće \(\frac{n(n−1)}{2}\) veza, pa je gustoća:

\[D(G)=\frac{∣E|} {\big( \array{n\\ 2}\big) })= \frac{2∣E∣}{n(n−1)}\]

Za usmjereni graf bez petlji maksimum je

\[D(G)= \frac{∣E∣}{n(n−1)}\]

Interpretacija: gustoća je “makro” pokazatelj. Dvije mreže mogu imati iste “hubove”, ali potpuno različitu gustoću (npr. tim koji komunicira svi-sa-svima vs tim s malo međusobnih veza).

Udaljenost u mreži (Van Steen, 2010):

  • Geodetska udaljenost (\(d(u, v)\)): Duljina najkraćeg puta između vrhova \(u\) i \(v\).

Geodetska udaljenost između vrhova \(u\) i \(v\) je duljina najkraćeg puta:

\[ d(u,v) = \min_{p \in \mathcal{P}(u,v)} |p| \]

gdje je \(\mathcal{P}(u,v)\) skup svih puteva od \(u\) do \(v\), a \(|p|\) broj bridova na putu \(p\).

  • Ekscentričnost (\(\epsilon(u)\)): Maksimalna udaljenost od vrha \(u\) do bilo kojeg drugog vrha u grafu.

Ekscentričnost vrha \(u\):

\[ \epsilon(u) = \max_{v \in V} d(u,v) \]

  • Dijametar grafa: Maksimalna geodetska udaljenost između bilo koja dva vrha.

Dijametar grafa:

\[ \mathrm{diam}(G) = \max_{u,v \in V} d(u,v) = \max_{u \in V} \epsilon(u) \]




U nastavku radimo na jednom malom, povezanom grafu s 12 čvorova i 30 veza. Cilj je vizualno objasniti ove pojmove.

Struktura

U najširem smislu riječi, struktura je takva organizacija jedinica u kojoj se očituje obrazac.

Teorija nije tek završni dodatak empirijskom istraživanju, nego je prisutna u svim fazama istraživačkog procesa. Već sam čin opažanja društvenih fenomena odvija se kroz prizmu postojećih istraživačkih tradicija i znanstvenih paradigmi. Svaka takva tradicija podrazumijeva specifičan pojmovni aparat, implicitnu ontologiju (odnosno pretpostavke o tome što uopće postoji i što je relevantno proučavati), kao i vlastitu epistemologiju – načine na koje se znanje o društvenoj stvarnosti stvara, provjerava i tumači. Teorije tako djeluju kao interpretativni okviri: one ne govore samo što promatrati, nego i kako određene pojave razumjeti, dok druge aspekte istog fenomena često ostavljaju u drugom planu ili ih uopće ne prepoznaju kao relevantne.

Važno je naglasiti da čak ni istraživanja koja se deklariraju kao induktivna nisu teorijski neutralna. Takva istraživanja gotovo uvijek počivaju na okvirnim, teorijski utemeljenim idejama koje istraživaču pomažu prepoznati što bi moglo biti značajno u empirijskom materijalu. Primjerice, istraživač koji promatra online interakcije neće „neutralno“ bilježiti sve moguće oblike ponašanja, već će – svjesno ili nesvjesno – obraćati pažnju na obrasce poput reciprociteta, hijerarhije, isključenosti ili moći, upravo zato što su ti pojmovi već teorijski artikulirani.

U tom smislu, podaci nisu izravni odraz društvene stvarnosti, već njezini tragovi i reprezentacije, oblikovani teorijskim pretpostavkama. I sam proces pretvaranja podataka u informacije, a informacija u znanje, nužno je vođen teorijom. U socijalnoj psihologiji, primjerice, pretvaranje samoprocjena emocija ili stavova u mjeru samopoštovanja pretpostavlja postojanje teorije samopoštovanja, kao i ideju latentnog psihološkog mehanizma koji omogućuje da se različiti iskazi i osjećaji povežu u jedinstveni konstrukt. Bez takve teorijske pretpostavke, pojedinačne izjave ostale bi tek nepovezani odgovori u upitniku, bez jasnog značenja.

Slično vrijedi i za teoriju društvenih mreža. Ona istraživače najprije senzibilizira da društvenu stvarnost ne promatraju isključivo kroz obilježja pojedinaca, već kroz odnose između njih. Time se mijenja i način prikupljanja podataka: umjesto izoliranih atributa, prikupljaju se informacije o vezama, interakcijama i tokovima. U sljedećem koraku, teorijski okvir društvenih mreža omogućuje identificiranje procesa i obrazaca unutar tih odnosa – primjerice, centralnosti, klasterizacije, mostova ili strukturnih rupa. Ti obrasci tada postaju informacije višeg reda, koje se mogu povezati u šira i holistička objašnjenja društvenih struktura, poput nejednakosti u pristupu resursima, širenja informacija ili otpornosti sustava na poremećaje.

Pojam strukture pojavljuje se u različitim znanstvenim disciplinama, ali uvijek označava uređeni obrazac odnosa između elemenata sustava. Bez obzira govorimo li o pojedincima u društvu, organizacijama u gospodarstvu, digitalnim platformama, biološkim sustavima ili tehničkoj infrastrukturi, struktura se ne odnosi samo na same elemente, već ponajprije na način na koji su ti elementi međusobno povezani.

Na najosnovnijoj razini analize, polazi se od pojedinaca koji međusobno komuniciraju i stupaju u odnose. Na najnižoj razini analize nalaze se pojedinci koji stupaju u interakcije: komuniciraju, razmjenjuju informacije, surađuju ili ulaze u sukobe. Te interakcije nisu nasumične. S vremenom se među pojedincima stabiliziraju obrasci odnosa – tko s kim češće komunicira, tko ima pristup kome, tko zauzima središnje, a tko periferne pozicije. Upravo ti obrasci čine društvenu strukturu, koja nadilazi pojedinačne odluke, ali istodobno oblikuje mogućnosti djelovanja svakog aktera. Neke istraživače pritom zanima kako se iz mikro-razine interakcija licem u lice, ili iz trenutka u trenutak, može rekonstruirati šira struktura odnosa. Druge pak zanima kako su akteri svjesno ili nesvjesno motivirani da tu strukturu koriste kao resurs (društveni kapital) – primjerice, kako pojedinci koriste svoje pozicije u mreži za ostvarivanje profesionalnih ciljeva, pristup informacijama ili povećanje vlastitog utjecaja. U tom smislu, struktura nije samo rezultat interakcija, nego i aktivni element koji oblikuje mogućnosti i ograničenja djelovanja.

Kada se takvi obrasci odnosa formaliziraju i analiziraju kao društvene mreže, struktura postaje vidljiva i mjerljiva. Društvene mreže omogućuju da se mikro-razina interakcija poveže s mezo- i makro-razinama, poput grupa, zajednica ili cijelih organizacija. Na toj razini struktura može objašnjavati pojave poput širenja informacija, stvaranja neformalnih hijerarhija, nastanka povjerenja ili pojave izolacije i isključenosti.

Slični strukturni principi pojavljuju se i u poslovnim mrežama i platformama. Poduzeća, dobavljači, kupci i digitalni posrednici povezani su u složene mreže odnosa razmjene, suradnje i konkurencije. Ovdje struktura utječe na pristup resursima, pregovaračku moć, inovacijski potencijal i otpornost sustava. Primjerice, platforme poput digitalnih tržišta ili društvenih medija ne stvaraju vrijednost samo kroz pojedinačne korisnike, već kroz strukturu njihove međusobne povezanosti, gdje određeni čvorovi (npr. ključni posrednici ili algoritamski centri) imaju disproporcionalan utjecaj.

Koncept strukture nije ograničen na društvene i poslovne sustave. U biološkim mrežama, poput neuronskih, metaboličkih ili ekoloških mreža, struktura odnosa između elemenata određuje funkcionalnost cijelog sustava – primjerice, kako se signali prenose u mozgu ili kako ekosustav reagira na poremećaje. U tehničkim mrežama, kao što su elektroenergetske mreže, prometni sustavi ili računalne mreže, struktura povezanosti izravno utječe na učinkovitost, sigurnost i otpornost na kvarove.

Zajedničko svim tim primjerima jest da se struktura ne može svesti na zbroj pojedinačnih elemenata. Ona predstavlja emergentno svojstvo sustava, koje nastaje iz odnosa, ali istodobno povratno djeluje na ponašanje pojedinih dijelova. Upravo zbog toga analiza strukture – osobito kroz mrežne modele – omogućuje povezivanje različitih razina analize i različitih domena primjene, od društvenih znanosti do biologije i inženjerstva.




Kreiranje mreže

U ovom dijelu, koristit će se R paketi:

  • igraph: graph_from_data_frame(), V(), E(), is_directed(), edge_density(), distances(), eccentricity(), diameter()

  • tidygraph: as_tbl_graph(), activate(nodes/edges), mutate()

  • ggraph: ggraph(), geom_edge_link(), geom_node_point()

Kreiranje mreže: od tablice do vizualizacije

U analizi društvenih mreža (SNA) polazimo od relacijskih podataka – podataka koji opisuju tko je povezan s kim. Najčešći oblik takvih podataka je tablica s dva stupca: izvor i odredište veze.

1. Primjer podataka: tko je povezan s kim

Za početak ćemo sami definirati mali skup podataka s 12 čvorova i 30 veza. U praksi je jako važno odrediti granice mreže: tko i koje veze ulaze u analizu. Granice se mogu definirati po organizaciji (npr. samo zaposlenici jedne firme), po platformi (npr. samo interakcije unutar jednog Discord servera), po vremenu (npr. poruke u zadnjih 30 dana) ili po vrsti relacije (npr. samo suradnje, ne i novčane transakcije). Različite granice mogu proizvesti različite zaključke, pa ih treba jasno dokumentirati.

library(igraph)
library(tidygraph)
library(ggraph)
library(dplyr)

edges <- tibble(
  from = c("A","A","A","B","B","C","C","D","D","E","F","F",
           "G","G","H","H","I","I","J","K","L","L",
           "C","E","G","H","I","J","K","D"),
  to   = c("B","C","D","C","E","D","F","E","G","F","G","H",
           "H","I","I","J","J","K","K","L","A","F",
           "I","H","L","K","L","A","B","I")
)

edges
## # A tibble: 30 × 2
##    from  to   
##    <chr> <chr>
##  1 A     B    
##  2 A     C    
##  3 A     D    
##  4 B     C    
##  5 B     E    
##  6 C     D    
##  7 C     F    
##  8 D     E    
##  9 D     G    
## 10 E     F    
## # ℹ 20 more rows

Svaki redak predstavlja jednu vezu između dva čvora. U ovom primjeru veze su neusmjerene (odnos je uzajaman).




2. Kreiranje mreže pomoću paketa igraph

Paket igraph je temeljni alat za rad s mrežama u R-u.

g <- graph_from_data_frame(
  d = edges,
  directed = FALSE
)

Provjerimo osnovne karakteristike mreže:

is_directed(g)
## [1] FALSE
vcount(g)   # broj čvorova
## [1] 12
ecount(g)   # broj veza
## [1] 30

Provjerimo o kakvom se tipu podataka radi.

typeof(g)
## [1] "list"

Dakle objekt grafa ili mreže je lista. Preciznije, objekt g je klase igraph i iznutra je skrivena lista s 10 elemenata. Pogledajmo što sve sadrži i kako je taj sadržaj organiziran.

str(g)
## Class 'igraph'  hidden list of 10
##  $ : num 12
##  $ : logi FALSE
##  $ : num [1:30] 1 2 3 2 4 3 5 4 6 5 ...
##  $ : num [1:30] 0 0 0 1 1 2 2 3 3 4 ...
##  $ : NULL
##  $ : NULL
##  $ : NULL
##  $ : NULL
##  $ :List of 4
##   ..$ : num [1:3] 1 0 1
##   ..$ : Named list()
##   ..$ :List of 1
##   .. ..$ name: chr [1:12] "A" "B" "C" "D" ...
##   ..$ : Named list()
##  $ :<environment: 0x000001c31b7bd3c0>
  • igraph mreža = kompleksna struktura podataka, optimizirana za brzinu i memoriju, a ne za čitljivost.

igraph graf se iznutra sastoji od 4 ključne stvari:

  • Koliko ima čvorova

  • Je li graf usmjeren

  • Kako su čvorovi povezani (edge lista u numeričkom obliku)

  • Atributi čvorova i veza

Sve ostalo je tehnička infrastruktura.

S obzirom da ovaj oblik pohrane podataka nije primjeren za izravno čitanje, koristimo drugi način za pristup podacima. Ovo su naredbe koje će se najčešće ponavljati:

  • vcount(g)
  • ecount(g)
  • is_directed(g)
  • V(g)
  • E(g)
  • V(g)$degree
  • as_edgelist(g)

Isprobajmo ih na ovom grafu.




3. Rad s čvorovima i vezama (V() i E())

U igraph-u:

  • V(g) označava skup čvorova
  • E(g) označava skup veza

Primjer:

V(g)
## + 12/12 vertices, named, from a85b7b9:
##  [1] A B C D E F G H I J K L
E(g)
## + 30/30 edges from a85b7b9 (vertex names):
##  [1] A--B A--C A--D B--C B--E C--D C--F D--E D--G E--F F--G F--H G--H G--I H--I
## [16] H--J I--J I--K J--K K--L A--L F--L C--I E--H G--L H--K I--L A--J B--K D--I

Možemo dodavati atribute čvorovima, npr. stupanj čvora (broj veza):

V(g)$degree <- degree(g)
V(g)
## + 12/12 vertices, named, from a85b7b9:
##  [1] A B C D E F G H I J K L
V(g)$degree
##  [1] 5 4 5 5 4 5 5 6 7 4 5 5

Ovdje smo zapravo izračunali stupanj ili degree čvora koristeći degree(g), gdje je g objekt u kojem je definirana mreža. Podsjetimo se, stupanj čvora nam govori s koliko je drugih čvorova promatrani čvor povezan. Npr., čvor A je povezan s 5 čvorova, a čvor B sa 4 druga čvora…

summary(V(g)$degree)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    4.00    4.75    5.00    5.00    5.00    7.00

Prosječni stupanj čvora je prosječan broj veza s kojima je čvor povezan u mreži. Čvorovi u ovoj mreži prosječno imaju po 5 susjednih čvorova.

U usmjerenoj mreži, razlikuje se:

Average in-degree je prosječan broj dolaznih veza u čvor.

Average out-degree je prosječan broj veza koje počinju u tom čvoru.




Vezano uz povezanost čvorova, ovdje možemo ispitati gustoću mreže, naredbom edge_density( ) iz paketa igraph.

edge_density(g)
## [1] 0.4545455

S obzirom da se gustoća kreće u intervalu od \([0, 1]\), možemo zaključiti da se radi o umjerenoj gustoći. Na primjer, za usporedbu:

  • svjetska turistička mreža u 2018. godini imala je gustoću 0.292 (Kostelić i Turk, 2021)
  • u obrazovnoj mreži razmjene studenata među državama gustoća je 2011. bila 0,1235 (Barret i sur., 2016)
  • u migracijskoj mreži gustoća je iznosila 0,47 za 2000. godinu (Fagiolo i Mastrorillo, 2013)
  • u financijskoj mreži gustoća varira između 0,2 i 0,6 (Chinazzi i sur., 2013)
  • u međunarodnoj trgovinskoj mreži gustoća doseže nevjerojatnih 0,98 (Schiavo i sur., 2010). Međunarodna trgovina ima najviše ostvarenih veza, što znači da gotovo svaka zemlja trguje sa svakom drugom zemljom.

Ovdje možemo odmah primijeniti i ostale metrike koje smo spomenuli u tekstu.

# Udaljenosti (geodetske)
distances(g)
##   A B C D E F G H I J K L
## A 0 1 1 1 2 2 2 2 2 1 2 1
## B 1 0 1 2 1 2 3 2 2 2 1 2
## C 1 1 0 1 2 1 2 2 1 2 2 2
## D 1 2 1 0 1 2 1 2 1 2 2 2
## E 2 1 2 1 0 1 2 1 2 2 2 2
## F 2 2 1 2 1 0 1 1 2 2 2 1
## G 2 3 2 1 2 1 0 1 1 2 2 1
## H 2 2 2 2 1 1 1 0 1 1 1 2
## I 2 2 1 1 2 2 1 1 0 1 1 1
## J 1 2 2 2 2 2 2 1 1 0 1 2
## K 2 1 2 2 2 2 2 1 1 1 0 1
## L 1 2 2 2 2 1 1 2 1 2 1 0

distances(g) računa geodetske udaljenosti između svih parova čvorova u mreži, tj. duljinu najkraćeg puta između svakog para čvorova.

Kakav je output?

Rezultat je matrica udaljenosti dimenzija \(n×n\), gdje je \(n\) broj čvorova u mreži.

  • redak = polazni čvor

  • stupac = odredišni čvor

  • vrijednost u ćeliji \((i,j) = d(i,j)\), broj bridova na najkraćem putu od čvora \(i\) do čvora \(j\).

  • na dijagonali su uvijek nule, \(d(i,i)=0\)

  • ako između dva čvora ne postoji put, udaljenost je Inf (beskonačno).

Kako to interpretirati?

Svaki redak opisuje koliko je jedan čvor udaljen od svih ostalih.

Ova matrica je temelj za izračun gotovo svih mjera koje se temelje na udaljenosti (ekscentričnost, dijametar, closeness centralnost).

# Ekscentričnost (maks. udaljenost po čvoru)
eccentricity(g)
## A B C D E F G H I J K L 
## 2 3 2 2 2 2 3 2 2 2 2 2

eccentricity(g) računa ekscentričnost svakog čvora, tj. njegovu maksimalnu geodetsku udaljenost do bilo kojeg drugog čvora u mreži.

Rezultat je numerički vektor duljine \(n\):

  • svaka vrijednost odgovara jednom čvoru

  • redoslijed vrijednosti prati redoslijed čvorova u objektu g

  • ako je \(ϵ(A)=3\) znači da je najudaljeniji čvor od A na udaljenosti 3 brida

Kako to interpretirati?

  • Ekscentričnost govori koliko je čvor “daleko od ruba” mreže.

  • Manja ekscentričnost → čvor je centralnije pozicioniran

  • Veća ekscentričnost → čvor je periferniji

Važna veza s praksom:

  • U organizacijskim mrežama: čvor s malom ekscentričnošću brzo dolazi do svih drugih.

  • U infrastrukturnim mrežama: čvor s velikom ekscentričnošću je “na rubu sustava”.

# Dijametar grafa
diameter(g)
## [1] 3

diameter(g) računa dijametar grafa, tj. najveću geodetsku udaljenost između bilo koja dva čvora u mreži.

Rezultat je jedan jedini broj. To je zapravo najveći element u matrici distances(g), a odgovara i najvećoj vrijednosti ekscentričnosti.

Dijametar opisuje “prostornu širinu” mreže.

Govori koliko je najudaljeniji par čvorova u smislu broja koraka.

Primjeri interpretacije:

  • mali dijametar → mreža je “kompaktna”

  • veliki dijametar → mreža je “razvučena”, informacije putuju sporije

Provjera konzistentnosti:

D <- distances(g)
max(D[is.finite(D)])         # najveći element u matrici distances(g)
## [1] 3
max(eccentricity(g))         # najveća vrijednost ekscentričnosti
## [1] 3



4. Pretvaranje mreže u tidygraph objekt

Paket tidygraph omogućuje rad s mrežama pomoću tidy sintakse (dplyr-stil).

tg <- as_tbl_graph(g)

Mreža sada ima dva „aktivna“ dijela:

  • nodes (čvorovi)
  • edges (veze)
typeof(tg)
## [1] "list"
str(tg)
## Classes 'tbl_graph', 'igraph'  hidden list of 10
##  $ : num 12
##  $ : logi FALSE
##  $ : num [1:30] 1 2 3 2 4 3 5 4 6 5 ...
##  $ : num [1:30] 0 0 0 1 1 2 2 3 3 4 ...
##  $ : NULL
##  $ : NULL
##  $ : NULL
##  $ : NULL
##  $ :List of 4
##   ..$ : num [1:3] 1 0 1
##   ..$ : Named list()
##   ..$ :List of 2
##   .. ..$ name  : chr [1:12] "A" "B" "C" "D" ...
##   .. ..$ degree: num [1:12] 5 4 5 5 4 5 5 6 7 4 ...
##   ..$ : Named list()
##  $ :<environment: 0x000001c31b7bd3c0> 
##  - attr(*, "active")= chr "nodes"



5. Rad s čvorovima pomoću activate() i mutate()

Dodajmo čvorovima informaciju o tome jesu li „važniji“ (npr. imaju veći stupanj):

tg <- tg %>%
  activate(nodes) %>%
  mutate(
    degree = centrality_degree(),
    important = degree >= median(degree) 
  )

U tidygraph-u mreža je jedan objekt, ali ima dva skupa elemenata:

  • čvorove (nodes)

  • veze (edges)

Zato tidygraph uvijek mora znati:

  • Nad kojim dijelom mreže se sada primjenjuju dplyr-operacije?

  • activate(nodes) govori da radimo nad čvorovima

U mrežama uvijek moramo navesti radimo li s čvorovima ili vezama.

Sve što sljedeće pišemo (mutate(), filter(), select(), …) odnosi se na čvorove, a ne na veze.

To je analogno ovome:

  • kod data.frame-a: radimo nad redovima

  • kod mreže: biramo radimo li nad čvorovima ili nad vezama

Stupanj čvora (degree) = koliko veza ima neki čvor. centrality_degree() je tidygraph-ova “čista” verzija degree(g). Razlika je kontekst:

  • degree(g) → radi na cijelom grafu

  • centrality_degree() → radi unutar mutate() nad čvorovima

  • centrality_degree() računa stupanj čvora

To znači da je za svaki čvor u mreži, izračunato koliko veza ima i spremljeno u varijablu deg.

Rezultat: svaki čvor sada ima atribut deg koji možemo koristiti za boju, veličinu, filtriranje…

Napomena:

  • centralnost nije vizualna osobina

  • ona je strukturno svojstvo

  • izračunava se iz cijele mreže, ne iz lokalnog opisa čvora.

important je logička varijabla. Logička (Boolean) varijabla ima samo dvije vrijednosti:

  • TRUE
  • FALSE

To je odluka, a ne mjera. degree >= median(degree) znači da ako čvor ima stupanj ≥ medijana, označimo ga kao važnog.

Rezultat:

  • čvorovi s puno veza → important = TRUE

  • ostali → important = FALSE

Zašto je ovo korisno u SNA-u?

Zato što u mrežama često:

  • ne tražimo točne vrijednosti

  • nego razlikujemo uloge

Primjeri:

  • hub / nije hub

  • broker / nije broker

  • kritična točka / običan čvor

Logičke varijable omogućuju:

  • isticanje čvorova u grafu

  • fokus na “ključne pozicije”

  • jednostavne interpretacije




6. Osnovna vizualizacija mreže s ggraph

Paket ggraph koristi ggplot2 logiku za crtanje mreža.

ggraph(tg, layout = "fr") + # Inicijalizira mrežnu vizualizaciju koristeći objekt mreže tg, 
                            # pri čemu se položaj čvorova određuje Fruchterman–Reingold algoritmom, 
                            # koji raspoređuje čvorove u prostoru na temelju njihove međusobne povezanosti.
  geom_edge_link(alpha = 0.5) +   # Dodaje grafički prikaz veza između čvorova, 
                                  # pri čemu je prozirnost veza smanjena (alfa) kako bi se 
                                  # smanjila vizualna zasićenost i olakšala čitljivost strukture mreže.
  geom_node_point(          # Definira način prikaza čvorova mreže pomoću točaka u dvodimenzionalnom prostoru.
    aes(size = degree, color = important),  # Mapira stupanj čvora na veličinu točke, 
                                            # ime se vizualno naglašavaju čvorovi s većim brojem veza, 
                                            # dok se boja čvora koristi za razlikovanje čvorova prema 
                                            # logičkoj varijabli important.
    alpha = 0.9             # Postavlja visoku, ali ne potpunu neprozirnost čvorova kako bi se 
                            # omogućilo preklapanje bez potpunog gubitka vidljivosti.
  ) +
  scale_size(range = c(3, 9)) +   # Definira raspon veličina čvorova kako bi se 
                                  #  osigurala jasna vizualna razlika između čvorova 
                                  # s niskim i visokim stupnjem povezanosti.
  labs(                     # Dodaje opisne elemente vizualizaciji, uključujući naslov i podnaslov.
    title = "Primjer jednostavne mreze",
    subtitle = "Veličina čvora = stupanj; boja = iznad/ispod medijalne"
  ) +                          # Primjenjuje minimalističku temu bez osi, 
                               # mreža i pozadinskih elemenata kako bi se pažnja usmjerila
  theme_void()                 # isključivo na strukturu mreže.

Kako čitati graf:

  • čvorovi predstavljaju aktere
  • veze predstavljaju odnose
  • veći čvorovi imaju više veza
  • obojeni čvorovi su „strukturno istaknutiji“



Ego-mreža je podmreža oko odabranog čvora (ego) i njegovih neposrednih susjeda (alteri) te veza među njima. Ego-mreže se koriste kada nas zanima “lokalno okruženje” aktera (npr. s kim je zaposlenik najviše povezan), dok whole-network pristup analizira strukturu cijele mreže.

# Ego-mreža: 1-korak oko čvora A (ego) i njegovi alteri
ego_A <- igraph::make_ego_graph(g, order = 1, nodes = "A")[[1]]

ggraph(as_tbl_graph(ego_A), layout = "fr") +
  geom_edge_link(alpha = 0.5) +
  geom_node_point(size = 5) +
  geom_node_text(aes(label = name), vjust = -1) +
  labs(title = "Ego-mreza čvora A", subtitle = "Ego = A; alteri = susjedi čvora A") +
  theme_void()

7. Što smo zapravo napravili?

U ovom kratkom primjeru smo:

  1. krenuli od obične tablice odnosa
  2. pretvorili je u mrežni objekt (igraph)
  3. dodali osnovne mrežne mjere
  4. prešli na tidygraph radi lakše manipulacije
  5. vizualizirali mrežnu strukturu pomoću ggraph

Ovaj postupak predstavlja temeljni workflow u analizi društvenih mreža, koji se kasnije može proširivati složenijim mjerama, filtriranjem, temporalnim mrežama i modelima širenja.




Memento:

Društvena mreža: Skup aktera i veza koje opisuju odnose/interakcije.

Čvor (node/vertex): Element mreže (osoba, organizacija, pojam).

Veza (edge/tie): Relacija između dva čvora (npr. komunikacija).

Akteri (actors): Entiteti koji sudjeluju u mreži (čvorovi).

Relacije: Tipovi odnosa (prijateljstvo, suradnja, transakcija).

Struktura mreže: Ukupni obrazac povezanosti između čvorova.

Dijada: Par čvorova i veza(e) između njih.

Trijada: Skup od tri čvora i svih veza među njima.

Graf: Matematički model mreže (čvorovi + veze).

Usmjereni graf: Veze imaju smjer (A → B).

Neusmjereni graf: Veze su simetrične (A — B).

Težinski graf: Veze imaju jačinu/intenzitet (težinu).

Matrica susjedstva: Matrica gdje element (i,j) označuje vezu i–j.

Lista veza (edge list): Tablica svih veza (izvor, odredište, težina), može biti data.frame ili tibble.

Ego-mreža: Podmreža oko jednog čvora (ego) i njegovih alter-a.

Alteri: Čvorovi koji su povezani s egom u ego-mreži.

Granice mreže: Pravila što ulazi/izlazi iz promatrane mreže.

Razina analize: Mikro (čvor), mezo (grupe), makro (cijela mreža).

Topologija mreže: Oblik i svojstva povezivanja (uzorci veza).

Gustoća (koncept): Koliko je mreža “povezana” u odnosu na maksimum.

Društveni kapital: Resursi dostupni kroz mrežne odnose.

Strukturni odnosi: Odnosi definirani pozicijom u strukturi mreže.




Pitanja za ponavljanje:

  1. pitanje

Koja tvrdnja je točna?

  1. Graf ima 8 čvorova i 10 veza.
  2. Graf ima 10 čvorova i 12 veza.
  3. Graf ima 8 čvorova i 12 veza.
  4. Graf ima 12 čvorova i 8 veza.
  1. pitanje

Što je najispravnije reći za veze u ovom grafu?

  1. Veze su bridovi (simetrične).
  2. Veze su lukovi (imaju smjer).
  3. Veze su uvijek težinske.
  4. Veze su petlje.
  1. pitanje

Koliko komponenti ima graf?

  1. 2
  2. 1
  3. 3
  4. 4
  1. pitanje

Koji čvor ima najveći stupanj?

  1. A
  2. B
  3. D
  4. C
  1. pitanje

Za koji graf očekujete veću gustoću?

  1. Graf A
  2. Graf B
  3. Jednaka gustoća (jer je isti broj čvorova)
  4. Ne može se procijeniti bez matrice susjedstva
  1. pitanje

U kojem grafu očekujete veći dijametar?

  1. U grafu A
  2. U grafu B
  3. Dijametar je uvijek jednak 1
  4. Dijametar se može računati samo za usmjerene grafove
  1. pitanje

Što je ekscentričnost čvora u?

  1. Prosječna udaljenost od u do svih čvorova.
  2. Broj veza incidentnih s u.
  3. Maksimalna geodetska udaljenost od u do bilo kojeg čvora.
  4. Broj komponenti u kojima se nalazi u.
  1. pitanje

Koja je geodetska udaljenost d(1,6)?

  1. 5
  2. 3
  3. 2
  4. 1
  1. pitanje

Koja tvrdnja je točna?

  1. Čvorovi A–B–C čine trijadu s “zatvaranjem” (svi su međusobno povezani).
  2. A–B–C su dijada.
  3. D–E–F čine potpun graf K3.
  4. Trijada uvijek znači “jedan čvor povezuje druga dva bez njihove veze”.
  1. pitanje

Što je 1-korak ego-mreža čvora “C”?

  1. Svi čvorovi u grafu.
  2. Samo čvor “C”.
  3. Čvor “C” i svi čvorovi na udaljenosti 2 od njega.
  4. Čvor “C”, njegovi susjedi (alteri) i veze među tim čvorovima.
  1. pitanje

Što je edge list?

  1. Matrica n×n s nulama i jedinicama.
  2. Vektor koji sadrži stupnjeve čvorova.
  3. Tablica (npr. data.frame) koja navodi postojeće veze (npr. from, to, opcionalno weight).
  4. Popis svih putova u mreži.
  1. pitanje

Zašto je važno definirati granice mreže?

  1. Da bi graf imao točno 12 čvorova.
  2. Jer različite definicije “tko ulazi i koje veze ulaze” mogu promijeniti zaključke analize.
  3. Jer bez granica ne možemo nacrtati graf u R-u.
  4. Jer gustoća uvijek mora biti 0.5.
  1. pitanje

Što je rezultat distances(g) u igraph-u?

  1. Matrica n×n s geodetskim udaljenostima između svih parova čvorova.
  2. Jedan broj: dijametar mreže.
  3. Vektor duljine n: ekscentričnosti čvorova.
  4. Lista svih bridova (edge list).
  1. pitanje

Što je rezultat eccentricity(g)?

  1. Matrica udaljenosti.
  2. Broj komponenti.
  3. Gustoća mreže.
  4. Numerički vektor duljine n: za svaki čvor njegova maksimalna udaljenost do drugih čvorova.
  1. pitanje

Što je rezultat diameter(g)?

  1. Vektor ekscentričnosti.
  2. Jedan broj: najveća geodetska udaljenost između bilo koja dva čvora u grafu.
  3. Broj veza.
  4. Popis najkraćih putova za sve parove.
  1. pitanje

U usmjerenom grafu razlikujemo:

  1. “light-degree” i “dark-degree”
  2. “macro-degree” i “micro-degree”
  3. in-degree i out-degree
  4. degree i density
  1. pitanje

Koja tvrdnja najbolje opisuje gustoću mreže?

  1. Odnos ostvarenog broja veza i maksimalno mogućeg broja veza za dani broj čvorova.
  2. Najveća udaljenost u mreži.
  3. Broj komponenti.
  4. Uvijek je jednaka prosječnom stupnju čvora.
  1. pitanje

Koje tvrdnje su točne?

  1. Dijada je skup od tri čvora.
  2. Dijada uključuje dva čvora i vezu (ili izostanak veze) između njih.
  3. Trijada uvijek mora biti potpuni graf.
  4. Trijada je skup od tri čvora i veza među njima (koje mogu, ali i ne moraju postojati između svih parova).
  1. pitanje

Koja tvrdnja najbolje razlikuje ego-mrežu i whole-network pristup?

  1. Ego-mreža fokusira lokalnu okolinu jednog čvora; whole-network analizira strukturu cijele mreže.
  2. Ego-mreža se može raditi samo u usmjerenim grafovima.
  3. Whole-network pristup ignorira veze.
  4. Ego-mreža je isto što i matrica susjedstva.
  1. pitanje

U igraph-u, koja naredba referencira skup čvorova i omogućuje dodjelu atributa čvorovima?

  1. E(g)
  2. is_directed(g)
  3. V(g)
  4. distances(g)



Korištena literatura:

Barnett, G. A., Lee, M., Jiang, K., & Park, H. W. (2016). The flow of international students from a macro perspective: A network analysis. Compare: A Journal of Comparative and International Education, 46(4), 533-559.

Chinazzi, M., Fagiolo, G., Reyes, J. A., & Schiavo, S. (2013). Post-mortem examination of the international financial network. Journal of Economic Dynamics and Control, 37(8), 1692-1713.

Fagiolo, G., & Mastrorillo, M. (2013). International migration network: Topology and modeling. Physical Review E—Statistical, Nonlinear, and Soft Matter Physics, 88(1), 012812.

Kostelić, K., & Turk, M. (2021). Topology of the World Tourism Web. Applied Sciences, 11(5), 2253.

Lozano, S., & Gutiérrez, E. (2018). A complex network analysis of global tourism flows. International Journal of Tourism Research, 20(5), 588-604.

Rawlings, C. M., Smith, J. A., McFarland, D. A., & Moody, J. (2023). Network analysis: integrating social network theory, method, and application with R (Vol. 52). Cambridge University Press.

Schiavo, S., Reyes, J., & Fagiolo, G. (2010). International trade and financial integration: a weighted network analysis. Quantitative Finance, 10(4), 389-399.

Van Steen, M. (2010). Graph theory and complex networks. An introduction, 144(1).

Ključ odgovora

  1. c
  2. b
  3. a
  4. d
  5. b
  6. a
  7. c
  8. b
  9. a
  10. d
  11. c
  12. b
  13. a
  14. d
  15. b
  16. c
  17. a
  18. b, d
  19. a
  20. c