生成分层随机图

时间:2015-10-22 03:11:46

标签: r graph igraph

我正在尝试将分层随机图模型拟合到边缘列表(表示未加权的无向大网络中的交互),并测量模型的聚类和路径长度。我不太确定我所做的事情是否正确,因为我可能没有完全掌握文档。

这是代码。

#Import Edgelist, convert to igraph
imported_g=read.csv('graph_edgelist.csv',header=FALSE,check.names=FALSE)
g=graph.data.frame(imported, directed=FALSE, vertices=NULL)

#Calculate parameters, make sure network is ok.
transitivity(g)
>0.3352213
average.path.length(g)
>3.6299


#Fit HRG model, convert back to igraph object to measure metrics.  
hrg_model = hrg.fit (g, hrg = g, start = FALSE, steps = 0)
igraph_hrg=as.igraph(hrg_model)

#Measure metrics of fit_hrg
average.path.length(igraph_hrg)
>50
transitivity(igraph_hrg)
>0

基本上,igraph模型的度量与我导入的边缘列表非常不同(它具有更低的路径长度和更高的聚类)。我认为这意味着模型无法捕获边缘列表的属性,但后来我不确定我是否正在生成HRG模型。

将HRG模型拟合到图表和实际生成HRG之间有什么区别我可以从中测量有用的参数?它是igraph函数hrg.create吗?

igraph代码基于: http://tuvalu.santafe.edu/~aaronc/hierarchy/

希望我的问题有道理。

1 个答案:

答案 0 :(得分:2)

不要将start参数传递给TRUE - 只有在您想要用作起点的HRG模型时才应该使用它。 (除非您将sample_hrg设置为hrg.create,否则它会被忽略。否则你的代码似乎是正确的 - 并注意到HRG模型从不打算捕获原始图的平均路径长度或传递性。不久前我用几个随机图模型做了一些实验,看看它们有多接近地重现某些生物网络的不同结构特性,我的结果表明,分层随机图模型在再现平均度和平均顶点方面往往做得很好 - 网络的距离 - 但是在重现平均顶点过渡性或主题出现方面不尽如人意 - 但公平地说,我还没有找到任何其他可以很好地完成这项工作的随机图模型。

  

将HRG模型拟合到图表和实际生成HRG之间有什么区别?我可以从中测量有用的参数?

拟合模型采用实际(实际)图形并找到分层随机图模型的参数,这些模型很接近真实图形(在某种意义上)。 生成步骤采用参数化HRG模型(通常从先前的拟合步骤建立),然后创建另一个图。这是在sample_hrg

中实现的
  

它是igraph函数hrg.create吗?

不,#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/list.h> #include <linux/slab.h> struct birthday { int day; int month; int year; struct list_head list; }; struct list_head birthday_list; struct birthday *createBirthday(int day, int month, int year) { struct birthday *person = kmalloc(sizeof(struct birthday), GFP_KERNEL); person->day = day; person->month = month; person->year = year; return person; } void printInfo(char *str) { printk(KERN_INFO "OS Module: %s", str); } int simple_init(void) { struct birthday *person = createBirthday(13, 4, 1987); struct birthday *ptr; printInfo("Loading Module\n"); LIST_HEAD(birthday_list); list_add_tail(&person->list, &birthday_list); person = createBirthday(14, 4, 1987); list_add_tail(&person->list, &birthday_list); person = createBirthday(15, 4, 1987); list_add_tail(&person->list, &birthday_list); person = createBirthday(16, 4, 1987); list_add_tail(&person->list, &birthday_list); person = createBirthday(17, 4, 1987); list_add_tail(&person->list, &birthday_list); list_for_each_entry(ptr, &birthday_list, list) { printk(KERN_INFO "OS Module: Day %d.%d.%d\n", ptr->day, ptr->month, ptr->year); } return 0; } void simple_exit(void) { struct birthday *tmp; struct list_head *ptr, *next; printInfo("Removing Module\n"); if (list_empty(&birthday_list)) { printInfo("List is empty"); return; } list_for_each_safe(ptr, next, &birthday_list){ tmp = list_entry(ptr, struct birthday, list); printk(KERN_INFO "OS Module: Removing %d.%d.%d\n", tmp->day, tmp->month, tmp->year); list_del(ptr); kfree(tmp); } //list_for_each_entry_safe(ptr, next, &birthday_list, list) { // printk(KERN_INFO "OS Module: Removing %d.%d.%d\n", ptr->day, ptr->month, ptr->year); // list_del(&ptr->list); // kfree(ptr); //} printInfo("Module removed\n"); } module_init( simple_init ); module_exit( simple_exit ); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Simple Module"); MODULE_AUTHOR("MP"); 采用HRG模型结构的二叉树表示(类似于您在Aaron的论文中看到的图),然后创建一个HRG模型对象,您可以将其传递给~/kernelModule $ sudo insmod simple.ko ~/kernelModule $ sudo rmmod -f simple ~/kernelModule $ dmesg | grep 'OS Module' [ 386.590198] OS Module: Loading Module [ 386.590201] OS Module: Day 13.4.1987 [ 386.590202] OS Module: Day 14.1.1964 [ 386.590203] OS Module: Day 2.6.1964 [ 386.590204] OS Module: Day 13.8.1986 [ 386.590204] OS Module: Day 10.6.1990 [ 396.647828] OS Module: Removing Module ~/kernelModule $ sudo rmmod -f simple rmmod: ERROR: ../libkmod/libkmod-module.c:769 kmod_module_remove_module() could not remove 'simple': Device or resource busy rmmod: ERROR: could not remove module simple: Device or resource busy 以后。