Network analiza (u društvenim znanostima) ima korijene u strukturalističkom pogledu na društvo jer konceptualizira društveni život u terminima strukture i odnosa (za razliku od kategorija) među društvenim akterima. Implicitna pretpostavka network analize je da je društveni život primarno određen relacijama i obrascima odnosa između društvenih aktera. Društvene mreže (u network analizi) su definirane u terminima mrežnih čvorova (članova) i mrežnih poveznica (relacija među članovima). Upravo takva vrsta međuzavisnosti je ključni razlikovni faktor između network i drugih analitičkih pristupa u društvenim istraživanjima. Društvena mreža je skup društveno relevantnih čvorova povezanih jednom ili više vrsta poveznica. Primjeri poveznica su kolaboracije, prijateljstva, trgovinske veze, Web poveznnice, broj citata, tokovi informacija i dr., a u najširim kategorijama se mogu sistematizirati kao sličnosti, odnosi, interakcije ili tokovi.
Terminologija mreža.
Network analiza je mnogo više istraživačka paradigma nego zaokružena teorija ili metoda. Kao istraživačka paradigma se formira u 1950ima u Engleskoj (Uni Manchester). Teme kojima se network analiza (u društvenim znanostima) bavila u početcima su korporativna koncentracija moći, diktature, društvena struktura, političke mreže, društveni pokreti, kriminal, terorizam, akademske mreže, odnosi među tvrtkama i dr. Nakon 1970ih network analiza postaje sve ćešće korišten pristup u društvenim znanostima zbog rastućeg broja fizičara koji koriste tu metodologiju za istraživanje društvenih fenomena, a sve se ćešće sreće u psihologiji, antropologiji, komunikacijskim znanostima, ekonomici, geografiji i sociologiji.
Osnova network analize je matematička teorija grafikona (graph teory) koja se u društvenim znanostima primjenjuje na pojedince i društvene aktere poput grupa, organizacija, tvrtki i dr. Network analiza omogućuje (primjerice) mjerenje gustoće mreže i centraliteta mrežnih čvorova pri čemu se mjere centraliteta mogu koristiti kao indikatori moći, utjecaja, popularnosti ili prestiža dok mjere gustoće pokazuju strukturu društvenih zajednica, strukturnih podjela u društvu, geografskih aglomeracija i dr. Implicitna pretpostavka network analize u društvenim znanostima je međupovezanost društvenih aktera pa su standardne statističke pretpostavke nezavisnosti narušene. Zbog toga korištenje statističkih procedura poput testova signifikantnosti, regresije, analize varijance i dr. nije moguće u network analizi.
Vrste network analize su: 1. Vizualizacija i karakterizacija mreže 2. Modeliranje i inferencijalna statistika 3. Mrežni procesi.
Procedura provedbe nework analize se sastoji od sljedećih koraka: 1. Uređivanje i priprema podataka za network analizu 2. Vizualizacija mreže 3. Deskriptivna analiza mrežnih karakteristika 4. Matematički modeli mreže 5. Statistički modeli mreže 6. Dinamički modeli mreža
# Učitaj pakete
library(tidyverse)
library(tidygraph)
library(ggraph)
library(navdata)
# Učitaj i pregledaj podatke
data("phone.call2")
class(phone.call2)
## [1] "list"
str(phone.call2)
## List of 2
## $ nodes: tibble [16 x 2] (S3: tbl_df/tbl/data.frame)
## ..$ id : int [1:16] 1 2 3 4 5 6 7 8 9 10 ...
## ..$ label: chr [1:16] "France" "Belgium" "Germany" "Danemark" ...
## $ edges: tibble [18 x 3] (S3: tbl_df/tbl/data.frame)
## ..$ from : int [1:18] 1 2 1 1 1 1 3 3 2 3 ...
## ..$ to : int [1:18] 3 1 8 9 10 11 12 13 3 14 ...
## ..$ weight: num [1:18] 9 4 3 4 2 3 2 2 3 2 ...
force(phone.call2)
## $nodes
## # A tibble: 16 x 2
## id label
## <int> <chr>
## 1 1 France
## 2 2 Belgium
## 3 3 Germany
## 4 4 Danemark
## 5 5 Croatia
## 6 6 Slovenia
## 7 7 Hungary
## 8 8 Spain
## 9 9 Italy
## 10 10 Netherlands
## 11 11 UK
## 12 12 Austria
## 13 13 Poland
## 14 14 Switzerland
## 15 15 Czech republic
## 16 16 Slovania
##
## $edges
## # A tibble: 18 x 3
## from to weight
## <int> <int> <dbl>
## 1 1 3 9
## 2 2 1 4
## 3 1 8 3
## 4 1 9 4
## 5 1 10 2
## 6 1 11 3
## 7 3 12 2
## 8 3 13 2
## 9 2 3 3
## 10 3 14 2
## 11 3 15 2
## 12 3 10 2
## 13 4 3 2
## 14 5 3 2
## 15 5 16 2
## 16 5 7 2
## 17 6 3 2
## 18 7 16 2.5
# Napravi graph network objekt
phone <- tbl_graph(
nodes = phone.call2$nodes,
edges = phone.call2$edges,
directed = T
)
# Vizualiziraj mrežu
ggraph(phone, layout = "graphopt") +
geom_edge_link(width = 1, colour = "lightgray") +
geom_node_point(size = 4, colour = "#00AFBB") +
geom_node_text(aes(label = label), repel = TRUE) +
theme_graph()
# Paket
library(corrr)
# Podatci
rc <- mtcars[,c(1,3:6)] %>%
t() %>%
correlate() %>%
shave(upper = T) %>%
stretch(na.rm = T) %>%
filter(r >= 0.998)
head(rc,15)
## # A tibble: 15 x 3
## x y r
## <chr> <chr> <dbl>
## 1 Mazda RX4 Mazda RX4 Wag 1.00
## 2 Mazda RX4 Merc 230 1.00
## 3 Mazda RX4 Merc 280 0.999
## 4 Mazda RX4 Merc 280C 0.999
## 5 Mazda RX4 Merc 450SL 0.998
## 6 Mazda RX4 Wag Merc 230 1.00
## 7 Mazda RX4 Wag Merc 280 0.999
## 8 Mazda RX4 Wag Merc 280C 0.999
## 9 Mazda RX4 Wag Merc 450SL 0.998
## 10 Datsun 710 Toyota Corona 0.999
## 11 Datsun 710 Volvo 142E 0.999
## 12 Hornet 4 Drive Valiant 0.999
## 13 Hornet 4 Drive Cadillac Fleetwood 0.998
## 14 Hornet 4 Drive Dodge Challenger 0.998
## 15 Hornet 4 Drive Pontiac Firebird 0.999
# Vizualiziraj
cor.graph <- as_tbl_graph(rc, directed = FALSE)
cor.graph
## # A tbl_graph: 24 nodes and 59 edges
## #
## # An undirected simple graph with 3 components
## #
## # Node Data: 24 x 1 (active)
## name
## <chr>
## 1 Mazda RX4
## 2 Mazda RX4 Wag
## 3 Datsun 710
## 4 Hornet 4 Drive
## 5 Hornet Sportabout
## 6 Valiant
## # ... with 18 more rows
## #
## # Edge Data: 59 x 3
## from to r
## <int> <int> <dbl>
## 1 1 2 1.00
## 2 1 20 1.00
## 3 1 8 0.999
## # ... with 56 more rows
#cor.graph %>%
# activate(edges) %>%
# arrange(desc(r))
ggraph(cor.graph) +
geom_edge_link() +
geom_node_point() +
geom_node_text(aes(label = name), size = 3, repel = TRUE) +
theme_graph()
# Permutacija network objekta
carsGrupa <- tibble(
name = rownames(mtcars),
cyl = as.factor(mtcars$cyl)
)
## Nodovi
cor.graph2 <- cor.graph %>%
activate(nodes) %>%
left_join(carsGrupa, by = "name") %>%
rename(label = "name")
cor.graph2
## # A tbl_graph: 24 nodes and 59 edges
## #
## # An undirected simple graph with 3 components
## #
## # Node Data: 24 x 2 (active)
## label cyl
## <chr> <fct>
## 1 Mazda RX4 6
## 2 Mazda RX4 Wag 6
## 3 Datsun 710 4
## 4 Hornet 4 Drive 6
## 5 Hornet Sportabout 8
## 6 Valiant 6
## # ... with 18 more rows
## #
## # Edge Data: 59 x 3
## from to r
## <int> <int> <dbl>
## 1 1 2 1.00
## 2 1 20 1.00
## 3 1 8 0.999
## # ... with 56 more rows
## Edges
cor.graph3 <- cor.graph2 %>%
activate(edges) %>%
rename(weight = r)
cor.graph3
## # A tbl_graph: 24 nodes and 59 edges
## #
## # An undirected simple graph with 3 components
## #
## # Edge Data: 59 x 3 (active)
## from to weight
## <int> <int> <dbl>
## 1 1 2 1.00
## 2 1 20 1.00
## 3 1 8 0.999
## 4 1 9 0.999
## 5 1 11 0.998
## 6 2 20 1.00
## # ... with 53 more rows
## #
## # Node Data: 24 x 2
## label cyl
## <chr> <fct>
## 1 Mazda RX4 6
## 2 Mazda RX4 Wag 6
## 3 Datsun 710 4
## # ... with 21 more rows
# Vizualiziraj
ggraph(cor.graph3) +
geom_edge_link(aes(width = weight), alpha = 0.2) +
scale_edge_width(range = c(0.2, 1)) +
geom_node_point(aes(color = cyl), size = 2) +
geom_node_text(aes(label = label), size = 3, repel = TRUE) +
theme_graph()
## MJERE CENTRALITETA
# 1. betweenness centrality
# 2. closeness centrality
# 3. eigenvector centrality
# 4. authority centrality
# Mjera centraliteta
phone %>%
activate(nodes) %>%
mutate(centrality = centrality_authority())
## # A tbl_graph: 16 nodes and 18 edges
## #
## # A directed acyclic simple graph with 1 component
## #
## # Node Data: 16 x 3 (active)
## id label centrality
## <int> <chr> <dbl>
## 1 1 France 1.01e- 1
## 2 2 Belgium 6.43e-17
## 3 3 Germany 1.00e+ 0
## 4 4 Danemark 3.21e-17
## 5 5 Croatia 3.21e-17
## 6 6 Slovenia 3.21e-17
## # ... with 10 more rows
## #
## # Edge Data: 18 x 3
## from to weight
## <int> <int> <dbl>
## 1 1 3 9
## 2 2 1 4
## 3 1 8 3
## # ... with 15 more rows
# Vizualiziraj
phone %>%
activate(nodes) %>%
mutate(centrality = centrality_authority()) %>% #
ggraph(layout = "graphopt") +
geom_edge_link(width = 1, colour = "lightgray") +
geom_node_point(aes(size = centrality, colour = centrality)) +
geom_node_text(aes(label = label), repel = TRUE)+
scale_color_gradient(low = "yellow", high = "red")+
theme_graph()
## CLUSTERING (grupiranje čvorova na osnovi "grafičke topologije")
# Clustering
cor.graph3 %>%
activate(nodes) %>%
mutate(community = as.factor(group_infomap()))
## # A tbl_graph: 24 nodes and 59 edges
## #
## # An undirected simple graph with 3 components
## #
## # Node Data: 24 x 3 (active)
## label cyl community
## <chr> <fct> <fct>
## 1 Mazda RX4 6 1
## 2 Mazda RX4 Wag 6 1
## 3 Datsun 710 4 3
## 4 Hornet 4 Drive 6 2
## 5 Hornet Sportabout 8 2
## 6 Valiant 6 2
## # ... with 18 more rows
## #
## # Edge Data: 59 x 3
## from to weight
## <int> <int> <dbl>
## 1 1 2 1.00
## 2 1 20 1.00
## 3 1 8 0.999
## # ... with 56 more rows
cor.graph3 %>%
activate(nodes) %>%
mutate(community = as.factor(group_infomap())) %>%
ggraph(layout = "graphopt") +
geom_edge_link(width = 1, colour = "lightgray") +
geom_node_point(aes(colour = community), size = 4) +
geom_node_text(aes(label = label), repel = TRUE)+
theme_graph()