0

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

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

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

在此处输入图像描述

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

  • 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)。这可以用发生率图来完成吗?

4

1 回答 1

4

如果您使用图表并创建表格中的二分图的投影,这将非常容易。例如

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

于 2013-02-03T15:41:00.347 回答