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.
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.
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}\}\)).
\(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:
Susjedi (engl. neighbors): Dva čvora su susjedi ako su izravno povezani bridom/lukom. Ovdje moramo biti precizni, jer je naš graf usmjeren:
Susjedstvo (engl. neighborhood): Skup svih susjeda jednog čvora.
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):
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.
Izvor (engl. source) i Ponor (engl. sink):
Povezanost (engl. connectedness):
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:
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:
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 (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 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 vrha \(u\):
\[ \epsilon(u) = \max_{v \in V} d(u,v) \]
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.
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.
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()
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.
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).
igraphPaket 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 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)$degreeas_edgelist(g)Isprobajmo ih na ovom grafu.
V() i
E())U igraph-u:
V(g) označava skup čvorovaE(g) označava skup vezaPrimjer:
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:
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
tidygraph objektPaket 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:
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"
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:
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
ggraphPaket 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:
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()
U ovom kratkom primjeru smo:
igraph)tidygraph radi lakše manipulacijeggraphOvaj 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.
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.
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).