Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R'中构建社区检测数据;s曲线图_R_Igraph - Fatal编程技术网

在R'中构建社区检测数据;s曲线图

在R'中构建社区检测数据;s曲线图,r,igraph,R,Igraph,我不熟悉igraph和社交网络分析,但不熟悉R 我正在努力为社区检测正确构建数据集,但已成功使用iGraph生成共现矩阵。我接下来要做的是在同一个数据集上使用社区检测算法来创建一个显示集群的图 如何执行此操作的示例代码如下所示: df1 <- graph.famous("Zachary") df2 <- walktrap.community(df1) #any algorithm plot.communities(df2, df) 我试图在我所研究的人群中找到重叠的兴趣群,因此ID

我不熟悉igraph和社交网络分析,但不熟悉R

我正在努力为社区检测正确构建数据集,但已成功使用iGraph生成共现矩阵。我接下来要做的是在同一个数据集上使用社区检测算法来创建一个显示集群的图

如何执行此操作的示例代码如下所示:

df1 <- graph.famous("Zachary")
df2 <- walktrap.community(df1) #any algorithm
plot.communities(df2, df)
我试图在我所研究的人群中找到重叠的兴趣群,因此
ID
是一个人,
兴趣
是这个人的兴趣,
评论
是他们表现出兴趣的次数的索引。这有用吗


我已经尝试在这个数据集上运行社区算法(例如,
df2一个图不允许你对个体进行聚类,而只允许你找出哪些变量是相关的。不过,如果你想从你的数据中构建一个图,你必须这样做。(请注意,我已将您的示例数据保存为.csv文件,并将其上载到dropbox,以创建易于复制的示例)

首先,您需要创建一个矩阵,其中每个特征一行一列:

matrix=matrix    
rownames(matrix)=unique(test[,1])
colnames(matrix)=unique(test[,2])
如果单元格的值与利益的强度相对应:

for (i in 1:nrow(matrix)){
    temp=test[test[,1]==i,][,2:3]
    for (j in 1:ncol(matrix)){
    matrix[i,j]=sum(temp[temp[,1]==colnames(matrix)[j],2]) # sum is used because of duplicates
    }
}
你得到的是:

> matrix
  comedy electronic gaming pop ent
1      2         11     14   1   1
2     14          0     45   1  26
3      8          0     10   0   4
4      0          1      9   2   0
5      0          0      1   2   1
6      0          0     12   0   0
然后,您可以从中创建一个邻接矩阵:

x=t(matrix)%*%matrix
你得到的是:

> x
           comedy electronic gaming pop  ent
comedy        264         22    738  16  398
electronic     22        122    163  13   11
gaming        738        163   2547  79 1225
pop            16         13     79  10   29
ent           398         11   1225  29  694
从中构建图形很容易:

g=graph.adjacency(x,weighted=T,mode="undirected",diag=FALSE)
g=simplify(g)
您可以将任何社区检测算法应用于对象
g
,例如:

spinglass.community(g,weight=E(g)$weight)

如果您想对个体而不是变量进行聚类,我会研究PCA和层次聚类(例如,请参阅FactoMineR包中的优秀函数)。在这种情况下,您将使用上面的对象
矩阵
(无需计算邻接矩阵).

图形由节点和边组成。数据集中的哪些节点与节点相关,您如何知道哪些节点是连接的?对于Zarchary数据,它可以由邻接矩阵(
get.adjacy(df1)
)或边列表(
get.edgelist(df1)
)@MrFlick表示。节点是“兴趣”列中的值--即喜剧、游戏等。我试图在我所研究的人群中找到重叠的兴趣群,因此ID是个人,兴趣是个人的兴趣,以及“评论”是他们显示兴趣的次数的索引。这有帮助吗?这是有意义的,但这仍然不能很好地转化为图形语言。因此,您希望每个兴趣都是一个节点,然后如果用户共享这两个兴趣,您希望节点之间有一条边?我不确定您将如何处理“注释”列,因为这似乎不起作用t以及节点或边权重。我仍然很难看到这些数据如何以图形形式表示。@MrFlick我可能没有准确沟通……我的最终目标是找到具有兴趣组合的独特人群。因此,可能有一群人喜欢“游戏和娱乐”,这可能与喜欢“游戏和喜剧”的人有关(但不同)。这些“评论”是为了提供一个相对的兴趣权重(并用于共现分析)但是我真的只是想通过一种建议的聚类方法来蒙混过关…@roody如果你觉得我的答案很有帮助或者回答了你的问题,请投票/接受。否则,请不要犹豫发表评论以澄清。你能解释一下矩阵x中的数字代表什么吗,这是交叉预测的结果ct请。@user20650请查看
图形的文档。邻接
函数:感谢您的回答。要进一步回答我的问题,例如,在
x
喜剧/喜剧
元素中,
264
与什么有关?我看不出这与原始数据有什么关系(我知道我一直很慢)顺便说一句,我知道你试图形成一个加权邻接矩阵。@user20650这些值本身没有任何物理意义,它们只是有意义的权重,因为它们允许比较,而且,矩阵是对称的,我们不关心对角线。这些值表示两个值之间共现的强度变量。例如,电子和游戏的联合出现频率(163)远高于电子和喜剧(22)。在创建加权图时,这些数字将决定边缘的“厚度”。@user20650注意,我更正了一个打字错误:
x=t(matrix)%*%matrix
而不是
x=t(x)%*%x
g=graph.adjacency(x,weighted=T,mode="undirected",diag=FALSE)
g=simplify(g)
spinglass.community(g,weight=E(g)$weight)