根据数据,图中某些点之间的线? (带R)

时间:2013-02-03 15:29:23

标签: r graph plot lines

我已经完成了我的研究和谷歌搜索,但还没有找到解决以下问题的方法。我经常从这个论坛找到与R相关的问题的解决方案,所以我想我试一试,希望有人能提出建议。我的博士论文需要它;任何我将使用的代码或建议的人自然会被承认和记入。

所以:我需要绘制线条/线段来连接R中的点(特别是多维缩放)中的点(也欢迎基于SPSS的解决方案) - 但不是所有点之间,只是代表至少一个数据项共享的属性/变量的那些 - 行的位置应该基于所讨论的图基于其自身的数据。让我exeplify;下面是一些虚拟变量的虚构数据,其中“1”表示该项具有属性:

       "properties"
        a   b   c
"items" ---------
tree  | 1   1   0
house | 0   1   1
hut   | 0   1   1
book  | 1   0   0

enter image description here

该图是一个多维缩放图(距离将被解释为相异度)。这是逻辑:

  • A和B之间有一条线,因为至少有一个项目/变量(“树”) 具有两种属性的数据;
  • B和C之间有一条线,因为数据中至少有一个项目(“house”和“hut”)具有两个属性;
  • 有一个项目(“书”)只有一个属性(A),所以它不会影响行的位置
  • 重要的是,A和C之间存在无行,因为数据中没有具有这两种属性的项目。

我正在寻找的是一种方法来自动/计算地添加灰线,我现在手动绘制在上面的图上。自动绘图应基于如上所述的数据。使用小数据集,手动绘制线条没有问题,但是当存在数十个这样的“属性”和数百个项目/行数据时就成了问题。 有任何想法吗?一些R代码(如果可能的话,评论)将是最受欢迎的!

编辑:我似乎忘记了非常重要的事情。首先,@ GaborCsardi提出的解决方案与示例数据完美配合,谢谢!但我忘了包括点的连接也应该是“保守的”,尽可能少的连接线。例如,如果某个项目具有所有“属性”,那么它不应该在图中的每个属性点之间创建线条,因为这样,如果点已经被其他项连接,即使是间接连接。因此,基于以下数据的绘图不应该是完整的三角形,即使item1具有所有三个属性:

      A B C
item1 1 1 1
item2 1 1 0
item3 0 1 1

相反,A,B和B,C应该用一条线连接,但是A和C之间的一条线会很频繁,因为它们已经间接连接(通过B)。这可以用发病率图来完成吗?

1 个答案:

答案 0 :(得分:4)

如果您使用图表,并且创建表格中的二分图的投影,这将非常简单。 E.g。

library(igraph)

## Some example data
mat <- "       properties
        items  a   b   c
        tree   1   1   0
        house  0   1   1
        hut    0   1   1
        book   1   0   0
       "
tab <- read.table(textConnection(mat), skip=1,
                  header=TRUE, row.names=1)

## Create a bipartite graph
graph <- graph.incidence(as.matrix(tab))

## Project the bipartite graph
proj <- bipartite.projection(graph)

## Plot one of the projections, the one you need 
## happens to be the second one
plot(proj$proj2)

## Minimum spanning tree of the projection
plot(minimum.spanning.tree(proj$proj2))

有关详情,请参阅手册页,例如?"igraph-package" ?graph.incidence?bipartite.projection?plot.igraph