/
signed_2mode.Rmd
112 lines (85 loc) · 4.62 KB
/
signed_2mode.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
---
title: "Signed Two-Mode Networks"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{05 Signed Two-Mode Networks}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
message=FALSE,
warning=FALSE
)
```
This vignette describes methods implemented to analyze signed two-mode networks.
```{r setup}
library(igraph)
library(signnet)
```
## Projections
A common analytic tool for two-mode networks is to project the network onto on relevant mode.
This is easily done using the adjacency matrix $A$. $AA^T$ yields the row projection and $A^TA$ the column
projection. The resulting networks will thus be weighted. Several methods exist to turn a weighted projection
into an unweighted network where only the most significant edges are included. A number of these methods are implemented in the [backbone](https://cran.r-project.org/package=backbone) package.
Projecting signed networks, however, is not as straightforward. Consider the following simple example.
```{r simple s2mode}
el <- matrix(c(1,"a",1,"b",1,"c",2,"a",2,"b"),ncol = 2,byrow = TRUE)
g <- graph_from_edgelist(el,directed = FALSE)
E(g)$sign <- c(1,1,-1,1,-1)
V(g)$type <- c(FALSE,TRUE,TRUE,TRUE,FALSE)
```
```{r graph, echo=FALSE,out.width = "50%",fig.align='center'}
knitr::include_graphics("small_signed2mode.png")
```
If we use the regular projection rules we obtain
```{r matmul}
A <- as_incidence_signed(g)
R <- A%*%t(A)
C <- t(A)%*%A
R
C
```
The row projection suggests that there is no relation between 1 and 2, when in fact there is a negative path (via b) and
a positive path (via a) between them. The same holds for the column projection and the nodes a and b.
The paper of Schoch introduces two projection methods that circumvent this "nullification". The package implements the *duplication* approach since it plays well with existing binarization tools. The first stepp is to turn the signed two-mode network into an unsigned one.
This is done by duplicating all vertices of the primary mode (i.e. the one to project on). For example, vertex a turns into two
vertices "a-pos" and "a-neg". The vertices of the secondary mode connect to these new vertices depending on the sign of edge.
For instance, 1 has a positive edge to a and thus 1 connects to a-pos.
This can be done for the whole network with the function `as_unsigned_2mode()` by specifying the primary mode (either TRUE or FALSE).
```{r duplicate}
gu <- as_unsigned_2mode(g,primary = TRUE)
gu
```
Now, any binarization toll (e.g. from the `backbone` package) can be applied since the network is an unsigned
two-mode network. For illustration, we include all edges with a weight greater one (the "universal" approach) since it can be
done without the `backbone` package.
```{r binarize}
pu <- bipartite_projection(gu,which = "true")
pu <- delete_edge_attr(pu,"weight")
pu
```
After binarization, the network is turned back to an unsigned network using a *contraction rule*.
The contraction rule works as follows.
If there is an edge (a-pos,b-pos) or (a-neg,b-neg) in the projection
then there is a positive edge (a,b) in the signed projection.
If there is an edge (a-pos,b-neg) or (a-neg,b-pos) in the projection
then there is a negative edge (a,b) in the signed projection.
If there is an edge (a-pos,b-pos) **and** (a-neg,b-pos) (or, e.g., (a-neg,b-neg) **and** (a-pos,b-neg)) in the projection
then there is an *ambivalent edge* (a,b) in the signed projection.
This is done with the function `as_signed_proj()`.
```{r contract}
ps <- as_signed_proj(pu)
as_data_frame(ps,"edges")
```
The projection of a signed two-mode network thus may contain three types of edges (positive ("P"), negative ("N") or ambivalent ("A")).
The concept of ambivalent ties comes from work by Abelson & Rosenberg and Cartwright & Harary.
More technical details can be found in the original paper by Schoch.
Consult the vignette about [complex matrices](complex_matrices.html) to learn about analyzing signed networks with ambivalent ties.
## References
Doreian, Patrick, Paulette Lloyd, and Andrej Mrvar. 2013. "Partitioning Large Signed Two-Mode Networks: Problems and Prospects." Social Networks, Special Issue on Advances in Two-mode Social Networks, 35 (2): 178–203.
Schoch, David. 2020. "Projecting Signed Two-Mode Networks" Mathematical Sociology, forthcoming
Abelson, Robert P., and Milton J. Rosenberg. 1958. “Symbolic Psycho-Logic: A Model of Attitudinal Cognition.” Behavioral Science 3 (1): 1–13.
Cartwright, Dorwin, and Frank Harary. 1970. “Ambivalence and Indifference in Generalizations of Structural Balance.” Behavioral Science 15 (6).