Creating Weighted Edgelists
EDGES
edges_<-list(NULL)
for (i in 1:length(subsetsLIST)) {
edges1 <- data.frame(from = c(subsetsLIST[[i]]$c1.1, subsetsLIST[[i]]$c1.1, subsetsLIST[[i]]$c1.1),
to = c(subsetsLIST[[i]]$c2.1, subsetsLIST[[i]]$c2.2, subsetsLIST[[i]]$c2.3))
edges2 <- data.frame(from = c(subsetsLIST[[i]]$c1.2, subsetsLIST[[i]]$c1.2, subsetsLIST[[i]]$c1.2),
to = c(subsetsLIST[[i]]$c2.4, subsetsLIST[[i]]$c2.5, subsetsLIST[[i]]$c2.6))
edges3 <- data.frame(from = c(subsetsLIST[[i]]$c1.3, subsetsLIST[[i]]$c1.3, subsetsLIST[[i]]$c1.3),
to = c(subsetsLIST[[i]]$c2.7, subsetsLIST[[i]]$c2.8, subsetsLIST[[i]]$c2.9))
edges_[[i]]<-rbind(edges1, edges2, edges3)
}
VERTICES ATTRIBUTES
AffectsubsetsLIST<-list(); HomophilyLIST<-list()
for (i in 1:length(subsetsLIST)) {
AffectsubsetsLIST[[i]]<-data.frame(nodes = c(subsetsLIST[[i]]$c1.1, subsetsLIST[[i]]$c1.2,
subsetsLIST[[i]]$c1.3, subsetsLIST[[i]]$c2.1,
subsetsLIST[[i]]$c2.2, subsetsLIST[[i]]$c2.3,
subsetsLIST[[i]]$c2.4, subsetsLIST[[i]]$c2.5,
subsetsLIST[[i]]$c2.6, subsetsLIST[[i]]$c2.7,
subsetsLIST[[i]]$c2.8, subsetsLIST[[i]]$c2.9),
Aff = c(subsetsLIST[[i]]$c1.1aff, subsetsLIST[[i]]$c1.2aff,
subsetsLIST[[i]]$c1.3aff, subsetsLIST[[i]]$c2.1aff,
subsetsLIST[[i]]$c2.2aff, subsetsLIST[[i]]$c2.3aff,
subsetsLIST[[i]]$c2.4aff, subsetsLIST[[i]]$c2.5aff,
subsetsLIST[[i]]$c2.6aff, subsetsLIST[[i]]$c2.7aff,
subsetsLIST[[i]]$c2.8aff, subsetsLIST[[i]]$c2.9aff))
}
# Aggregating Nodes and Finding the Mean Value for Aff
for (i in 1:length(AffectsubsetsLIST[[i]]$nodes)) {
AffectsubsetsLIST[[i]]$nodes<-as.factor(AffectsubsetsLIST[[i]]$nodes) # first as factor to agg
AffectsubsetsLIST[[i]]$Aff<-as.numeric(AffectsubsetsLIST[[i]]$Aff)
AffectsubsetsLIST[[i]]<-aggregate(list(Aff = AffectsubsetsLIST[[i]]$Aff), list(nodes = AffectsubsetsLIST[[i]]$nodes),
FUN = function(x) round(sum(x)/length(x)) )
AffectsubsetsLIST[[i]]$nodes<-as.character(AffectsubsetsLIST[[i]]$nodes) # now back to char
print(i)
print(nrow(AffectsubsetsLIST[[i]]))
print(nrow(unique(AffectsubsetsLIST[[i]])))
# Creating Aff Labels for Nodes (Homophily)
HomophilyLIST[[i]]<-ifelse(AffectsubsetsLIST[[i]]$Aff<=40,"Neg",
ifelse(AffectsubsetsLIST[[i]]$Aff>60,"Pos",
"Neu"))
}
ADDING EDGES WEIGHTS
WEIGHTED_<-list(NULL)
# First loop over our data
for (i in 1:length(subsetsLIST)) {
# finding words (niveis) and counting
edges_[[i]]$to<-as.factor(edges_[[i]]$to)
niveis<-levels(edges_[[i]]$to)
teste<-table(edges_[[i]]$to)
# finding words (niveis2) and counting
edges_[[i]]$from<-as.factor(edges_[[i]]$from)
niveis2<-levels(edges_[[i]]$from)
teste2<-table(edges_[[i]]$from)
# aggregating the words and counting (weights)
niveis3<-c(niveis, niveis2)
n <- intersect(names(teste), names(teste2))
teste[n] + teste2[n]
WEIGHTED_[[i]] <- edges_[[i]]
# Now loop over each of the unique words
for (j in 1:length(niveis)) {
WEIGHTED_[[i]]$weight[WEIGHTED_[[i]]$to == niveis3[[j]]] <- teste[niveis3[[j]]]
}
for(k in 1:length(niveis2)) {
WEIGHTED_[[i]]$weight[WEIGHTED_[[i]]$from == niveis3[[k]]] <- teste2[niveis3[[k]]]
}
WEIGHTED_[[i]]$from<-as.character(WEIGHTED_[[i]]$from) # char
WEIGHTED_[[i]]$to<-as.character(WEIGHTED_[[i]]$to) # char
WEIGHTED_[[i]]$weight<-as.numeric(WEIGHTED_[[i]]$weight) # num
WEIGHTED_[[i]] <- aggregate(WEIGHTED_[[i]][,3], WEIGHTED_[[i]][,-3], sum) # aggregating all
colnames(WEIGHTED_[[i]])[colnames(WEIGHTED_[[i]])=="x"] <- "weight"
print(nrow(WEIGHTED_[[i]]))
print(nrow(unique(WEIGHTED_[[i]][,c("from", "to")])))
}
BUILD NETWORK OBJECT
require(network)
el<-list()
vld<-list()
net<-list()
length(AffectsubsetsLIST) == length(WEIGHTED_)
for (i in 1:length(WEIGHTED_)) {
el[[i]] <- WEIGHTED_[[i]] # Read in WEdgelist
vld[[i]] <- AffectsubsetsLIST[[i]] # Read in Vertex data
net[[i]] <- network::network.initialize(nrow(vld[[i]]),
directed = F, hyper = FALSE, loops = FALSE, multiple = FALSE)
network::network.vertex.names(net[[i]]) <- vld[[i]]$nodes # Nodes names
net[[i]][as.matrix(el[[i]][,c(1,2)])] <- 1 # Add in edges
network::set.vertex.attribute(net[[i]], "Aff", vld[[i]]$Aff) # Define vertex attr: affect
network::set.edge.attribute(net[[i]], "eweight", as.numeric(el[[i]][,3])) # Define edge attr: weight
# net[[i]] %v% "grayscale" = ifelse(net[[i]] %v% "Aff"<40, "gray70",
# ifelse(net[[i]] %v% "Aff">60, "black", "gray30")) # Nodes colors
# Nodes attbr, colors, etc
net[[i]] %v% "shape" = ifelse(net[[i]] %v% "Aff"<40, 3, ifelse(net[[i]] %v% "Aff">60, 15, 4))
net[[i]] %v% "color" = ifelse(net[[i]] %v% "Aff"<40, "red3",
ifelse(net[[i]] %v% "Aff">60, "blue3", "gold2"))
net[[i]] %v% "Neg" = ifelse(net[[i]] %v% "Aff"<40, 1, 0)
net[[i]] %v% "Pos" = ifelse(net[[i]] %v% "Aff">60, 1, 0)
net[[i]] %v% "Neu" = ifelse(net[[i]] %v% "Aff"<60 & net[[i]] %v% "Aff">40, 1, 0)
net[[i]] %v% "Ambiv" = (net[[i]] %v% "Pos" + net[[i]] %v% "Neg")/2 - abs(net[[i]] %v% "Pos" - net[[i]] %v% "Neg")
net[[i]] %v% "AmbivZF" = ((net[[i]] %v% "Pos" + net[[i]] %v% "Neg") / (net[[i]] %v% "Pos" + net[[i]] %v% "Neg" + net[[i]] %v% "Neu"))
# Edges attbr, colors, etc
#net[[i]] %e% "color" = ifelse(net[[i]] %e% "Aff"<40, "red3",
#ifelse(net[[i]] %e% "Aff">60, "blue3", "gold2"))
}
BUILD ADJACENCY MATRIX
adjmat<-list(); adjmat1<-list()
gtest<-list(); gtest1<-list()
require(igraph)
for (i in 1:length(WEIGHTED_)) {
adjmat[[i]]<-as.matrix(
igraph::get.adjacency(
igraph::graph.data.frame(WEIGHTED_[[i]], directed = F),
attr="weight", sparse=F)
)
adjmat[[i]][is.na(adjmat[[i]])]<-0
gtest[[i]]<-graph_from_adjacency_matrix(adjmat[[i]], mode="undirected", diag=F)
V(gtest[[i]])$Aff=as.numeric(AffectsubsetsLIST[[i]]$Aff[match(V(gtest[[i]])$name, AffectsubsetsLIST[[i]]$nodes)])
V(gtest[[i]])$color = ifelse(V(gtest[[i]])$Aff<=40, "red3",
ifelse(V(gtest[[i]])$Aff>60, "blue3", "gold2"))
E(gtest[[i]])$weight=as.numeric(WEIGHTED_[[i]]$weight[match(V(gtest[[i]])$name, WEIGHTED_[[i]][,c("from", "to")])])
for (j in 1:length(gtest)) { # Creating Incongruent thoughts
if (j == c(1,2,3,4,15,16,22,23,24,25,30)) {
V(gtest[[j]])$Inc <- ifelse(V(gtest[[j]])$Aff<40, 1, 0)
}
else if (j == c(5,6,7,8,17,18,26,27,28,29,31)) {
V(gtest[[j]])$Inc <- ifelse(V(gtest[[j]])$Aff>60, 1, 0)
}
else {
V(gtest[[j]])$Neg = ifelse(V(gtest[[j]])$Aff<40, 1, 0)
V(gtest[[j]])$Pos = ifelse(V(gtest[[j]])$Aff>60, 1, 0)
}
}
BUILD IGRAPH OBJECTS
require(igraph);
graph<-list();
graphINC<-list(); graphCONG<-list();
deg<-list()
for (i in 1:length(congruencies)) {
graph[[i]] <- graph_from_data_frame(d=congruencies[[i]], vertices=Affcongruencies[[i]], directed=F)
graph[[i]] <- simplify(graph[[i]], remove.multiple = F, remove.loops = T)
V(graph[[i]])$color <- ifelse(V(graph[[i]])$Aff<=40, "red3",
ifelse(V(graph[[i]])$Aff>60, "blue3", "gold2")) # vertex COLORED
if (i<3) {
V(graph[[i]])$Inc <- ifelse(V(graph[[i]])$Aff<40, 1, 0)
V(graph[[i]])$Neutral <- ifelse(V(graph[[i]])$Aff>39 & V(graph[[i]])$Aff<61, 1, 0)
V(graph[[i]])$IncShape = ifelse(V(graph[[i]])$Inc==1, "square", "circle")
}
else if (i>2) {
V(graph[[i]])$Inc <- ifelse(V(graph[[i]])$Aff>60, 1, 0)
V(graph[[i]])$Neutral <- ifelse(V(graph[[i]])$Aff>39 & V(graph[[i]])$Aff<61, 1, 0)
V(graph[[i]])$IncShape = ifelse(V(graph[[i]])$Inc==1, "square", "circle")
}
graphINC[[i]]<-igraph::delete.vertices(graph[[i]], V(graph[[i]])$Inc==0 | V(graph[[i]])$Neutral==1)
graphINC[[i]]<-igraph::delete.vertices(graphINC[[i]], igraph::degree(graphINC[[i]])==0)
graphCONG[[i]]<-igraph::delete.vertices(graph[[i]], V(graph[[i]])$Inc==1 | V(graph[[i]])$Neutral==1)
graphCONG[[i]]<-igraph::delete.vertices(graphCONG[[i]], igraph::degree(graphCONG[[i]])==0)
deg[[i]] <- igraph::degree(graph[[i]], mode="all")
}