我正在尝试将分层随机图模型拟合到边缘列表(表示未加权的无向大网络中的交互),并测量模型的聚类和路径长度。我不太确定我所做的事情是否正确,因为我可能没有完全掌握文档。
这是代码。
#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/
希望我的问题有道理。
答案 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
以后。