Анализ микробной сети в igraph - PullRequest
0 голосов
/ 28 мая 2020

У меня есть бактериальная таблица OTU на всех уровнях таксономии. Я хочу построить сеть с помощью igraph (или любого другого пакета). Я никогда не создавал такой сюжет, поэтому, пожалуйста, если кто-нибудь знает ссылку на учебник для начинающих? ИЛИ Если кто-то проведет меня со сценариями, я буду очень признателен за ваше время. Спасибо!

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Я не понимаю, какие данные у вас были, вот пример процедуры для анализа небольшой сети:

  1. Сначала вам нужно определить, какую ссылку вы хотите анализировать (например, какую Направлены ли ребра - и, возможно, взаимны - или нет? Какие характеристики узлов и ребер важны?).
  2. Затем вам нужно создать свой список ребер. В моем случае наиболее распространенный способ для небольшой сети (не требующий большой производительности) - это создать data.frame с tidyverse . В каждом случае сетевого анализа вам нужен список ребер. Обычно это data.frame со связями между двумя объектами, которые вы называете своей сетью. Затем анализ:

    • ТОЛЬКО ДЛЯ МАЛЕНЬКОГО ГРАФИКА, вы начинаете с построения и чтения графика. После этого список краев отправляется в igraph и строится, предполагая, что вам нужен синтаксис tidyverse (%>%):

    myedgeslist <- data.frame(from = c('man1', 'man2','man3', 'man3'), to = c('man3','man1','man1', 'man2') ) mygraph <- myedgeslist %>% igraph::graph_from_data_frame(directed = T) mygraph %>% igraph::plot.igraph()

Который рисует небольшую направленную сеть между 3 узлами и 4 связями (Igraph сказал: IGRAPH DN-- 3 4 -- для обозначения сети с направленным DN, 3 узла и 4 канала).

  • Параллельно, вам нужно создать некоторую tidyverse групповую статистику, например,

myedgeslist %>% group_by(to) %>% summarise(nlinksto= n(), n_nodes=n_distinct(from)) %>% arrange(desc(n_nodes)) сказал, что 'man1' является наиболее центральными узлами, потому что 2 ссылки go на него (вместо одной ссылки для man3 и man2).

  • Параллельно, как я сказал выше, прочтите некоторые теоретические сведения о сетевом анализе и вычислите индикаторы для понимания сети (центральность, взаимность ...). например,

    mygraph %>% igraph::edge_density() говорит, что 66% направленных ссылок реализованы в этой сети.

PS : обычно это плохая идея чтобы построить большую сеть, вы должны разделить их на несколько частей или возобновить сеть по глобальной / сгруппированной статистике.

1 голос
/ 28 мая 2020
  1. Набор данных о взаимосвязях в сетевом анализе состоит, по крайней мере, из одного data.frame (или матрицы), который описывает ссылки и содержит как минимум 2 столбца, чтобы указать ссылку «от» и «к» на 2 первых столбцах data.frame. Другие столбцы этого «списка ребер» указывают характеристики каждой из этих ссылок. Далее давайте назовем этот data.frame edgeslist
  2. Возможно, вам не нужен второй набор данных, чтобы указать характеристики для ваших узлов, aka 'node-list' . Это второй data.frame (или матрица), где первый столбец указывает имена узлов, а другие столбцы указывают характеристики каждого узла. Список узлов в Igraph должен указывать каждый из отдельных узлов. Каждый узел должен был появиться в списке узлов только один раз, и ни один из узлов, находящихся в списке ребер (столбцы «от» или «до»), не может отсутствовать в списке узлов. В дальнейшем давайте назовем этот data.frame nodeslist.

  3. Затем вам нужно создать объект Igraph с igraph::graph_from_data_frame(edgeslist, directed = F, vertices = nodeslist)

  4. И вы можете получить доступ к этому объекту для компиляции кучи глобальной статистики или получения новых- данные, связанные с некоторыми узлами (например, cliques <- igraph::largest_cliques(mygraph) или igraph::edge_density(mygraph, loops=T))

  5. Или доступ к очень точному набору узлов или ребер (например, igraph::E(mygraph)$weight <- 1 или что-то еще c.
  6. Я предлагаю поиграть с edge-list и tidyverse, чтобы создать групповую статистику.

Попробуйте найти некоторые из существующих руководств, например этот .

...