All Projects → schochastics → signnet

schochastics / signnet

Licence: other
R package for signed networks

Programming Languages

r
7636 projects
C++
36643 projects - #6 most used programming language

Projects that are alternatives of or similar to signnet

egor
R Package for importing and analysing ego-centered-network data.
Stars: ✭ 17 (-10.53%)
Mutual labels:  network-analysis, sna
Awesome Network Analysis
A curated list of awesome network analysis resources.
Stars: ✭ 2,525 (+13189.47%)
Mutual labels:  network-analysis, sna
migraph
Tools for multimodal and multilevel network analysis
Stars: ✭ 25 (+31.58%)
Mutual labels:  network-analysis, sna
packet cafe
A platform built for easy-to-use automated network traffic analysis
Stars: ✭ 40 (+110.53%)
Mutual labels:  network-analysis
Network-Embedding-Resources
Network Embedding Survey and Resources
Stars: ✭ 43 (+126.32%)
Mutual labels:  network-analysis
IM GreedyCELF
Source code for blog post at https://hautahi.com/im_greedycelf
Stars: ✭ 24 (+26.32%)
Mutual labels:  network-analysis
kubernetes-iperf3
Simple wrapper around iperf3 to measure network bandwidth from all nodes of a Kubernetes cluster
Stars: ✭ 80 (+321.05%)
Mutual labels:  network-analysis
SynNet-Pipeline
Workflow for Building Microsynteny Networks
Stars: ✭ 32 (+68.42%)
Mutual labels:  network-analysis
infomap ecology package
Package with functions to handle network data and run Infomap, inspired by ecological networks
Stars: ✭ 14 (-26.32%)
Mutual labels:  network-analysis
f1-communities
A novel approach to evaluate community detection algorithms on ground truth
Stars: ✭ 20 (+5.26%)
Mutual labels:  network-analysis
Junet.jl
Julia package for network research
Stars: ✭ 37 (+94.74%)
Mutual labels:  network-analysis
A-Detector
⭐ An anomaly-based intrusion detection system.
Stars: ✭ 69 (+263.16%)
Mutual labels:  network-analysis
Causal-Deconvolution-of-Networks
Causal Deconvolution of Networks by Algorithmic Generative Models
Stars: ✭ 25 (+31.58%)
Mutual labels:  network-analysis
aera-workshop
This workshop introduces participants to the Learning Analytics (LA), and provides a brief overview of LA methodologies, literature, applications, and ethical issues as they relate to STEM education.
Stars: ✭ 14 (-26.32%)
Mutual labels:  network-analysis
sflow-collector
A Python class for parsing sFlow packets.
Stars: ✭ 16 (-15.79%)
Mutual labels:  network-analysis
NetBID
Data-driven Network-based Bayesian Inference of Drivers
Stars: ✭ 21 (+10.53%)
Mutual labels:  network-analysis
IPRadar2
Real-time detection and defense against malicious network activity and policy violations (exploits, port-scanners, advertising, telemetry, state surveillance, etc.)
Stars: ✭ 20 (+5.26%)
Mutual labels:  network-analysis
reddit-opinion-mining
Sentiment analysis and opinion mining of Reddit data.
Stars: ✭ 15 (-21.05%)
Mutual labels:  sna
DEMON
DEMON: a local-first discovery method for overlapping communities.
Stars: ✭ 26 (+36.84%)
Mutual labels:  network-analysis
network-pipeline
Network traffic data pipeline for real-time predictions and building datasets for deep neural networks
Stars: ✭ 36 (+89.47%)
Mutual labels:  network-analysis

signnet

R-CMD-check CRAN status Downloads Codecov test coverage

The package provides methods to analyse signed networks (i.e. networks with both positive and negative ties).

Installation

You can install the released version of signnet from CRAN with:

install.packages("signnet")

The development version from is available with:

# install.packages("devtools")
devtools::install_github("schochastics/signnet")

Structural Balance and Triads

The principles underlying structural balance are based on a theory in social psychology dating back to the work of Heider in the 1940s, which was generalized and extended to graphs by Cartwright and Harary in the 1950s. In its simplest form, it is defined via triangles. A triangle is balanced if all ties are positive (“the friend of a friend is a friend”) or only one tie is positive (“the enemy of my enemy is my friend”). The remaining configurations are said to be unbalanced.

A network is balanced if i.a., it can be partitioned into two vertex subsets, such that intra-group edges are all positive and inter-group edges are all negative. Determining this is easy, but measuring a degree of balancedness (i.e. how close is a network to be balanced?) is not. The package, so far, implements three methods to calculate balance scores. All are defined such that a value of one indicates perfect balance and zero perfect unbalance. Though for intermediate networks, results may vary significantly. Check this paper by Samin Aref (and his other work) for more details.

library(igraph)
library(signnet)
data("tribes")

balance_score(tribes,method = "triangles")
#> [1] 0.867647
balance_score(tribes,method = "walk")
#> [1] 0.357576
balance_score(tribes,method = "frustration")
#> [1] 0.758621

For directed signed networks, triad_census_signed() can be used to compute the count for all 138 non-isomorphic signed triads.

Blockmodeling

The package implements two different blockmodeling algorithms. The classic one tries to partition the network into a specified set of groups such that intra group edges are positive and inter group edges are negative.

clu <- signed_blockmodel(tribes,k = 3,alpha = 0.5,annealing = TRUE)
clu
#> $membership
#>  [1] 2 2 3 3 1 3 3 3 1 1 3 3 1 1 2 2
#> 
#> $criterion
#> [1] 2

The parameter k is the number of groups and alpha specifies the penalty of negative inter group and positive intra group edges. If alpha = 0 (alpha = 1) then only positive inter group (negative intra group) edges are penalized. Set alpha = 0.5 for equal penalization The algorithm is not exact and just a heuristic. If annealing = TRUE, then simulated annealing is used. This improves the result, but may take additional time.

The result of the blockmodel can be visualized with ggblock (requires ggplot2)

ggblock(tribes,clu$membership,show_blocks = TRUE,show_labels = TRUE)

The second blockmodeling technique is known as generalized blockmodeling. This method removes the restriction of positve (negative) inter (intra) group edges. Instead, a blockmatrix is passed to the function with the desired block structure. The example below illustrates the technique with a network composed of three groups with differing inter/intra group edge patterns.

# create a signed network with three groups and different inter/intra group ties
g1 <- g2 <- g3 <- graph.full(5)

V(g1)$name <- as.character(1:5)
V(g2)$name <- as.character(6:10)
V(g3)$name <- as.character(11:15)

g <- Reduce("%u%",list(g1,g2,g3))
E(g)$sign <- 1
E(g)$sign[1:10] <- -1
g <- add.edges(g,c(rbind(1:5,6:10)),attr = list(sign=-1))
g <- add.edges(g,c(rbind(1:5,11:15)),attr = list(sign=-1))
g <- add.edges(g,c(rbind(11:15,6:10)),attr = list(sign=1))

# specify the link patterns between groups
blockmat <- matrix(c(1,-1,-1,-1,1,1,-1,1,-1),3,3,byrow = TRUE)
blockmat
#>      [,1] [,2] [,3]
#> [1,]    1   -1   -1
#> [2,]   -1    1    1
#> [3,]   -1    1   -1

clu <- signed_blockmodel_general(g,blockmat,0.5)
clu
#> $membership
#>  [1] 2 3 2 2 2 2 2 2 2 2 3 3 3 1 3
#> 
#> $criterion
#> [1] 0
ggblock(g,clu$membership,show_blocks = TRUE,show_labels = FALSE)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].