2009-12-12 4 views
4

Несколько лет назад я использовал UCINET для анализа социальной сети. В те дни я хотел бы снова использовать SNA, но на этот раз я предпочитаю единую структуру анализа, которая для меня равна R.Основная SNA в R? - Как загрузить сетевые данные

Я просмотрел документацию sna и statnet, но немного перегружен.

Что я хотел бы сделать: сначала: загрузить двухстороннюю/матрицу инцидентности, вытащенную непосредственно из, например, websurvey (часто оценивается). Преобразуйте эту матрицу в две матрицы смежности '(affilatoin по аффилированности и случаи по случаям). Это также могут быть ориентированные, оцененные случаи по матрице случаев.

Во-вторых: загрузите файл (также, например, данные websurvey) атрибутов вершин.

В-третьих: Затем нарисуйте график, например. размер вершины согласно некоторой меридиональности, окрашенный и помеченный некоторыми атрибутами вершины, с только ребрами со значением над определенным пороговым значением.

Это мини-матрица частота:

data <- structure(list(this = c(0, 1, 0, 1, 1, 2, 0, 1, 3), 
that = c(1, 1, 3, 0, 0, 0, 2, 1, 0), 
phat = c(0, 0, 2, 1, 0, 0, 1, 2, 0)), 
.Names = c("this", "that", "phat"), 
row.names = c("a", "b", "c", "d", "e", "f", "g", "h", "i"), 
class = "data.frame") 

с данными атрибута сома:

att <-structure(list(sex = structure(c(1L, 1L, 2L, 2L, 1L, 2L, 1L, 
1L, 1L), .Label = c("F", "M"), class = "factor"), agegr = c(1L, 
1L, 3L, 1L, 3L, 1L, 1L, 3L, 1L), place = structure(c(1L, 2L, 
1L, 1L, 1L, 1L, 2L, 2L, 1L), .Label = c("Lower", "Upper"), 
class = "factor")), .Names = c("sex", 
"agegr", "place"), row.names = c(NA, -9L), class = "data.frame") 

P.S. может быть, SNA будет хорошим тегом для этой публикации? У меня просто нет доброй доброй воли :-)

+0

Я добавил тег и немного изменил ваш код, чтобы лучше подогнать страницу. Что касается использования SNA, я не использую это в возрасте - извините. –

ответ

7

Это хороший вопрос и дает некоторую возможность для дальнейшего изучения SNA в R. Я больше знаком с igraph package, поэтому я отвечу на ваш вопрос, используя функции в этой библиотеке.

Первая часть вашего вопроса имеет достаточно простое решение:

# Convert data frame to graph using incidence matrix 
G<-graph.incidence(as.matrix(data),weighted=TRUE,directed=FALSE) 
summary(G) 
# Vertices: 12 
# Edges: 30 
# Directed: TRUE 
# No graph attributes. 
# Vertex attributes: type, name. 
# Edge attributes: weight. 

Это возвращает объект графа с неориентированными и взвешенными дугами из матрицы инцидентности. Для генерации графов присоединений из двудольного графика у вас есть два варианта. Быстрый и легкие один такая:

proj<-bipartite.projection(G) 

Это возвращает список с каждым выступом индексируется в $ proj1 и proj2, несчастное то, что эти проекты не содержат края весов, которые обычно требуются при выполнении это манипуляция. Для этого наилучшим решением является просто выполнить матричное умножение самостоятельно.

# Create the matrices, and set diagonals to zero 
M<-as.matrix(data) 
affil.matrix<-M%*%t(M) 
diag(affil.matrix)<-0 
cases.matrix<-t(M)%*%M 
diag(cases.matrix)<-0 
# Create graph objects from matrices 
affil.graph<-graph.incidence(affil.matrix,weighted=TRUE) 
cases.graph<-graph.incidence(cases.matrix,weighted=TRUE) 

Генерация графики с данными атрибутов немного сложнее и требует больше кодирования, но я рекомендую посмотреть через некоторые из igraph examples, или даже some of my own, поскольку есть много там, чтобы вы начали. Удачи!

 Смежные вопросы

  • Нет связанных вопросов^_^