-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.Rmd
87 lines (69 loc) · 3.19 KB
/
index.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
---
title: "Supplementary Materials"
---
```{r setup, echo=F, include=FALSE, results = FALSE, message=FALSE, error=FALSE, results = "hide"}
library(tsna)
library(ndtv) # also loads animation and networkDynamic
library(igraph)
library(dplyr)
# load dyadic data
load("/Users/simon/Documents/repo/animation-website_1/dyadicdat.RData")
# date from numeric
dyadicdat$date <- as.Date(dyadicdat$time, origin = "1970-01-01")
# restructure data
dyadicdat <- dyadicdat %>% arrange(date)
dyadicdat$canton1 <- as.factor(dyadicdat$canton1)
dyadicdat$canton2 <- as.factor(dyadicdat$canton2)
dyadicdat$ID_SM <- as.factor(dyadicdat$ID_SM)
library(forcats) # understand why changing levels changes values of factors, too stupid to understand just now
dyadicdat$canton1 <- fct_expand(dyadicdat$canton1, levels = sort(unique(c(as.character(dyadicdat$canton1), as.character(dyadicdat$canton2)))))
dyadicdat$canton2 <- fct_expand(dyadicdat$canton2, levels = sort(unique(c(as.character(dyadicdat$canton1), as.character(dyadicdat$canton2)))))
# subset to bilaterals
dyadicdat <- dyadicdat %>% filter(bilateral == 1)
# quickly look no of mechansims per agreement
rowSums(cbind(dyadicdat$commission, dyadicdat$monitoring, dyadicdat$conflict))
# function to transform from dyadic data to network panels for each time stamp
from_dyadic_to_net <- function(dyadicdat){
lst <- list()
for (i in as.character(unique(dyadicdat$date))){
temp_mat1 <- as.matrix(table(dyadicdat$canton1[dyadicdat$date <= i], dyadicdat$ID_SM[dyadicdat$date <= i]))
temp_mat2 <- as.matrix(table(dyadicdat$canton2[dyadicdat$date <= i], dyadicdat$ID_SM[dyadicdat$date <= i]))
temp_mat1 <- temp_mat1[sort(rownames(temp_mat1)), sort(colnames(temp_mat1))]
temp_mat2 <- temp_mat2[sort(rownames(temp_mat2)), sort(colnames(temp_mat2))]
temp_mat <- temp_mat1 + temp_mat2
lst[[i]] <- temp_mat %*% t(temp_mat)
diag(lst[[i]]) <- 0
lst[[i]] <- as.network(lst[[i]],
vertex.attrnames = rownames(lst[[i]]),
directed = F,
ignore.eval = F,
names.eval = 'weight')
}
return(lst)
}
lst <- from_dyadic_to_net(dyadicdat)
# create separate datasets for each mechanism and for those agreements without mechanism
com_list <- from_dyadic_to_net(dyadicdat[dyadicdat$commission == 1,])
mon_list <- from_dyadic_to_net(dyadicdat[dyadicdat$monitoring == 1,])
con_list <- from_dyadic_to_net(dyadicdat[dyadicdat$conflict == 1,])
no_mech_list <- from_dyadic_to_net(dyadicdat[dyadicdat$commission == 0 & dyadicdat$monitoring == 0 & dyadicdat$conflict == 0,])
```
## Plot Animation
```{r, include = FALSE}
dyn <- networkDynamic(network.list = lst,
vertex.TEA.names = TRUE,
create.TEAs = TRUE,
edge.TEA.names = c('weight','type'))
```
```{r pressure, echo = FALSE, tidy = FALSE, message = FALSE, error = FALSE, results=-1}
render.d3movie(dyn,
displaylabels = TRUE,
edge.lwd = 'weight',
output.mode = 'htmlWidget')
timeline(dyn)
proximity.timeline(dyn,
default.dist = 6,
mode = 'sammon',
labels.at = 17,
vertex.cex = 4)
```