Rによるデータ分析

Rによる可到達行列(可達行列)

可到達行列(可達行列)は、 ISM の中で使われます。

可到達行列は、簡単な関数で、簡単に求まると良いのですが、そのような関数はないようです。 そこで、自作しました。

可到達行列を求める

Rには、行列同士の積を求める方法が3種類ありますが、 可到達行列を求めるのに必要な「行列同士の論理積」は標準のライブラリにはありません。 「行列同士の論理積」は「%&%」でできるのですが、これをするには、「Matrix」というライブラリが必要です。

Matrixのライブラリは、出力が欲しい行列の形式にならないため、以下のコードでは、欲しい形式になるように修正も入っています。

可到達行列を求める前の、最初の隣接行列は、以下になります。
ReachabilityMatrix

Cドライブ直下の、Rtestというフォルダに、上記の内容のData.csvというファイルがあるとします。

setwd("C:/Rtest")
library(Matrix)
Data <- read.csv("Data.csv", header=T,row.names=1)
AdjacencyMatrix <- as.matrix(Data)
n <- ncol(AdjacencyMatrix)
AdjacencyMatrixI <- AdjacencyMatrix + diag(n)
AdjacencyMatrixI2 <- AdjacencyMatrixI
ReachabilityMatrix <- AdjacencyMatrix
while(sum(ReachabilityMatrix - AdjacencyMatrixI2) != 0){
ReachabilityMatrix <- as.matrix(AdjacencyMatrixI2 %&% AdjacencyMatrixI)*1
AdjacencyMatrixI2 <- ReachabilityMatrix
}
ReachabilityMatrix

求まった、可到達行列は下記です。
ReachabilityMatrix



参考文献

豊橋技術科学大学 システム工学研究室
可到達行列の計算方法だけでなく、ISMについても書かれています。 下記リンクが検索サイトで見つかり、筆者は見れましたが、この研究室のページからのリンクは現在切れています。
http://ise.me.tut.ac.jp/lectures/decision-making/DSS12-2.pdf

CRAN
%&%の使い方が書かれています。
https://cran.r-project.org/web/packages/Matrix/Matrix.pdf




Tweet データサイエンス教室