2017-06-21 1 views
3

J'utilise la version 0.99.879 et le paquet la version 1.0.1. Ma question est étroitement liée à celle-ci sur le même problème: igraph package in RStudio: Bipartite graph projection error
Cependant, ma question est plus liée à la structure de données. Voici un lien vers un exemple de csv.file que j'utilise: https://workupload.com/file/6qhyZqc et le code suivant:erreur de projection de graphe biparti (de igraph, rstudio)

# Start 
set.seed(7) 
setwd("C:/Users/Stefan/Desktop/") 
data <- read.csv("example.csv", sep=";") 
summary(data) 

library(igraph) 

## using subset function to select 2 variables 
data_new <- subset(data, select=c(justification, claimant_function)) 
data_new 

g <- graph.data.frame(data_new, directed = FALSE) 
g 

col <- c("steelblue1", "white") 
shape <- c("circle", "square") 

# creating bipartite network 
V(g)$type <- FALSE 
V(g)$type[V(g)$name %in% data_new[, 1]] <- TRUE 
is.bipartite(g) 
# TRUE 

plot(g, layout = layout.kamada.kawai, 
vertex.shape = shape[as.numeric(V(g)$type) + 1], 
vertex.color = col[as.numeric(V(g)$type) + 1], 
edge.color = 'gray') 

# bipartiate projection 
one_mode_networks <- bipartite.projection(g) 
# Error in .Call("R_igraph_bipartite_projection", graph, types, 
# as.integer(probe1), : 
# At bipartite.c:198 : Non-bipartite edge found in bipartite projection, 
# Invalid value 


Tout fonctionne, sauf la commande de projection. Donc, le code n'est pas le problème. Peut-être que l'erreur/le problème pourrait être dans les données elles-mêmes. Puisque je travaille déjà avec les données depuis longtemps, je pense que je suis professionnellement blinkered. Ce serait génial si quelqu'un d'autre pouvait jeter un coup d'œil aux exemples de données affichés et pourrait donner des suggestions sur le problème.
Toute aide est très bien accueillie!

Répondre

2

Mon intuition est que vous avez un lien entre deux noeuds de la même appartenance. Un peu de recherche et en effet c'est le cas.

Notez que vous avez la chaîne « autre » dans les deux colonnes data_new:

data_new[which(data_new[,1] %in% data_new[,2]),1] 
[1] "other" 

igraph lit la chaîne comme un nœud dans le réseau. V(g)$type[V(g)$name %in% data_new[, 1]] <- TRUE lui donne une valeur de TRUE pour son type.

Nous pouvons voir ce qui relie deux sommets cravate dont type == 'TRUE':

> i <- which(V(g)$type[match(ends(g,1:ecount(g))[,1],V(g)$name)] == V(g)$type[match(ends(g,1:ecount(g))[,2],V(g)$name)]) 
> ends(g, i) 
    [,1]     [,2] 
[1,] "financial solidity" "other" 

Le bord 12, les deux sommets ont type==TRUE.

simplement réévaluent les cordes de sorte qu'ils ne sont pas égaux et tout fonctionne bien.

data_new <- subset(data, select=c(justification, claimant_function)) 
data_new[which(data_new[,1]=="other"),1] <- "other just" 
data_new[which(data_new[,2]=="other"),2] <- "other claim" 

g <- graph.data.frame(data_new, directed = FALSE) 

# creating bipartite network 
V(g)$type <- FALSE 
V(g)$type[V(g)$name %in% data_new[, 1]] <- TRUE 
is.bipartite(g) 

one_mode_networks <- bipartite_projection(g) 

Vérifier:

> one_mode_networks 
$proj1 
IGRAPH UNW- 16 72 -- 
+ attr: name (v/c), weight (e/n) 
+ edges (vertex names): 
[1] business  --expert/scientist  business  --public figure   
[3] business  --media/journalist  business  --citizen    
[5] business  --legislative   business  --ECB     
[7] government  --media/journalist  government  --expert/scientist  
[9] government  --other claim   government  --legislative   
[11] government  --ECB     government  --European Commission 
[13] government  --other politician/party government  --European Parliament 
[15] government  --citizen    government  --European Council  
+ ... omitted several edges 

$proj2 
IGRAPH UNW- 16 83 -- 
+ attr: name (v/c), weight (e/n) 
+ edges (vertex names): 
[1] political solidarity--monetary solidarity political solidarity--financial solidity 
[3] political solidarity--no justification  political solidarity--cultural solidarity 
[5] political solidarity--sovereignty   political solidarity--self interest  
[7] political solidarity--economic solidarity political solidarity--human solidarity  
[9] financial solidity --social solidarity financial solidity --misuse of solidarity 
[11] financial solidity --economic solidarity financial solidity --cultural solidarity 
[13] financial solidity --self interest  financial solidity --legal regulations 
[15] financial solidity --necessity   financial solidity --conditionally  
+ ... omitted several edges 
+0

Grand. Votre réponse était exactement ce que je cherchais (et m'a orienté vers d'autres «similitudes de codage» dans le reste de l'ensemble de données). Merci beaucoup! –