0

私は調査とグーグルを行いましたが、次の問題の解決策をまだ見つけていません。このフォーラムから R 関連の問題の解決策を見つけることがよくあるので、試してみて、誰かが何か提案してくれることを願っています。博士論文に必要です。私が使用するコードや提案をした人は、当然認められ、信用されます。

だから:Rのプロット(具体的には多次元スケーリング)のポイントを接続するために線/セグメントを描く必要があります(SPSSベースのソリューションも歓迎されます)-しかし、すべてのポイント間ではなく、プロパティ/変数を表すものだけです少なくとも 1 つのデータ項目が共有されます。線の配置は、問題のプロットがそれ自体に基づいているデータに基づいている必要があります。例を挙げましょう。以下は、ダミー変数を含む架空のデータです。ここで、「1」はアイテムにプロパティがあることを意味します。

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

ここに画像の説明を入力

プロットは多次元スケーリング プロットです (距離は非類似度として解釈されます)。これはロジックです:

  • A と B の間に線があります。これは、両方のプロパティを持つデータに少なくとも 1 つの項目/変数 (「ツリー」) があるためです。
  • B と C の間に線があります。これは、両方のプロパティを持つデータ (「家」と「小屋」) に少なくとも 1 つの項目があるためです。
  • プロパティ (A) が 1 つしかないアイテム (「ブック」) があるため、行の配置には影響しません。
  • 重要なのは、データには両方のプロパティを持つ項目がないため、A と C の間に線がありません。

私が探しているのは、上記のプロットで手動で描画した灰色の線を自動的に/計算で追加する方法です。自動描画は、上記のデータに基づいている必要があります。小さいデータ セットでは、手動で線を引くことは問題ありませんが、そのような「プロパティ」が数十あり、データのアイテム/行が数百ある場合は問題になります。何か案は?いくつかの R コード (可能であればコメント付き) は大歓迎です!

編集:私は何か非常に重要なことを忘れていたようです. まず、以下の@GaborCsardiによって提案されたソリューションは、サンプルデータで完全に機能します。ありがとうございます! しかし、ポイントのリンクも「保守的」で、接続線をできるだけ少なくする必要があることを含めるのを忘れていました。たとえば、すべての「プロパティ」を持つアイテムがある場合、たとえ間接的であっても、ポイントが他のアイテムによってすでに接続されている場合、そのためだけに、プロット内のすべてのプロパティ ポイント間に線を作成するべきではありません。したがって、item1 に 3 つのプロパティがすべて含まれていても、次のデータに基づくプロットは完全な三角形にはなりません。

      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

グラフを使用し、テーブルにある 2 部グラフの射影を作成すると、これは非常に簡単です。例えば

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 に答える