我已经完成了我的研究和谷歌搜索,但还没有找到解决以下问题的方法。我经常从这个论坛找到与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
该图是一个多维缩放图(距离将被解释为相异度)。这是逻辑:
我正在寻找的是一种方法来自动/计算地添加灰线,我现在手动绘制在上面的图上。自动绘图应基于如上所述的数据。使用小数据集,手动绘制线条没有问题,但是当存在数十个这样的“属性”和数百个项目/行数据时就成了问题。 有任何想法吗?一些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)。这可以用发病率图来完成吗?
答案 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
。