R: criando uma rede 'statnet' com atributos de nó

Nov 15 2020

Estou seguindo os exemplos aqui sobre como usar a biblioteca "statnet" em http://personal.psu.edu/drh20/papers/v24i09.pdf.

O primeiro exemplo mostra como inspecionar um objeto de rede statnet em R:

library(statnet)
library(network)
 data("faux.magnolia.high") 
 fmh <- faux.magnolia.high 
summary(fmh)

No exemplo acima, parece aqui que a rede statnet neste exemplo já possui "atributos de nó".

Usando a biblioteca statnet, alguém sabe se existe uma maneira de criar diretamente uma rede com atributos de nó a partir de um quadro de dados?

Por exemplo, se eu tiver alguns dados parecidos com estes:

mydata <-data.frame(

"source" = c("123","124","123","125","123"),
"target" = c("126", "123", "125", "122", "111"),
"color" = c("red","red","green","blue","red"),
"food" = c("pizza","pizza","cake","pizza","cake")
)

Suponha que eu tenha uma lista predefinida de atributos do nó:

Nodes <-data.frame(

"source" = c("123","124","125","122","111", "126"),

"Country" = c("usa", "uk", "uk", "usa", "uk", "usa")

)

Tentei o seguinte código:

net = network(mydata)

Mas não tenho certeza se isso criou uma rede com os atributos do nó (cor e comida).

Eu também tentei isso, mas não funcionou:

mydata <-data.frame(

"source" = c("123","124","123","125","123"), "target" = c("126", "123", "125", "122", "111"), "color" = c("red","red","green","blue","red"), "food" = c("pizza","pizza","cake","pizza","cake") )

Nodes <-data.frame(

"source" = c("123","124","125","122","111", "126"),

"Country" = c("usa", "uk", "uk", "usa", "uk", "usa")

)

net<-network(mydata[,c[1:2])

edges <- as.sociomatrix(mydata[,c(3:4)],simplify=TRUE)

nodes <- as.sociomatrix(Nodes,simplify=TRUE)

final <- as.sociomatrix(list(net,edges,nodes))

Alguém pode me mostrar como criar uma rede com atributos de nó?

fonte: https://rdrr.io/github/statnet/network/man/as.sociomatrix.html

obrigado

Respostas

1 stats555 Nov 16 2020 at 06:32

Poderia esta ser a resposta? https://igraph.org/r/doc/graph_from_data_frame.html

library(igraph)

g <- graph_from_data_frame(mydata, directed=TRUE, vertices=Nodes)
1 MarkoLucić Nov 16 2020 at 13:52

Igraph está OK, mas se você quiser permanecer dentro do pacote de rede, que é a suíte statnet, você pode fazer o seguinte:

net<- as.network(mydata, matrix.type = "edgelist")
set.vertex.attribute(net, "color", as.character(mydata$color)) set.vertex.attribute(net, "food", as.character(mydata$food))
#To verify...
get.vertex.attribute(net, "color")

Parece que a função set.vertex.attribute não aceita fatores, portanto, as.character ()

Se você tiver muitos atributos de vértice, poderá usar "aplicar" para aplicar o set.vertex.attribute como uma função sobre colunas de um quadro de dados com atributos de vértice.

Geralmente, os materiais (tutoriais) para o pacote statnet de Michael Heaney foram muito úteis para mim (materiais vinculados no primeiro item sob o título "Workshops de verão"): http://michaeltheaney.com/teaching