三角多項式グラフ     Last modified: Aug 24, 2004

目的

三角多項式グラフを描く

使用法

Andrews.graph(dat, col=NULL, normalize=TRUE, points=100, main.title="Andrews' Plot")

引数

dat        多変量データ(データフレームでも行列でもよい)
col        dat の描くケースごとの色分けに使う色ベクトル。
           標準値(NULL)の場合には青色一色を使用する。
normalize  変数ごとに標準化する(標準値)。
           標準化しないときには FALSE を指定する。
points     曲線をなめらかに描くための点の数(標準値は 100)。
...        lines 屁の引数。

ソース

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/Andrews.R", encoding="euc-jp")

# 三角多項式グラフ(Andrews グラフ)
Andrews.graph <- function(   dat,                            # データ行列
                                normalize=TRUE,                 # 変数ごとに正規化する
                                points=100,                     # 曲線のなめらかさを決める
                                col=NULL,
                                ...)                            # plot への引数
{
        dat <- subset(dat, complete.cases(dat))
        dat <- as.matrix(dat)                                        # 行列に変換
        if (normalize == TRUE) {                                # normalize が TRUE なら,
                dat <- scale(dat)                            # 変数ごとに正規化する
        }
        n <- nrow(dat)                                               # 行数
        nv <- ncol(dat)                                              # 列数(変数の数)
        t <- seq(-pi, pi, length=points)                     # -π 〜 πに points 個の点を取る
        coef <- matrix(sapply(1:nv,                          # 係数行列
                function(i) if (i %% 2 == 0) sin((i%/%2)*t)
                            else cos((i%/%2)*t)),
                nrow=nv, byrow=TRUE)
        coef[1,] <- rep(1/sqrt(2), points)
        data <- matrix(sapply(1:n, function(k) colSums(dat[k,]*coef)), byrow=TRUE, nr=n)
        plot(range(t), range(data), type="n",
                xaxt="n", xlab="", ylab="")
        axis(1, at=seq(-pi, pi, length=5),
             lab=expression(-pi, -pi/2, 0, pi/2, pi))
        if (is.null(col)) {
                col <- rep("blue", n)
        }
        else if (length(col) == 1) {
                col <- rep(col, n)
        }
        invisible(sapply(1:n, function(k) lines(t, data[k,], col=col[k])))
}


使用例

data(iris)	# Fisher の iris data を図示してみる
col <- c("blueviolet", "chocolate3", "darkcyan")[as.integer(iris$Species)]		# setosa, versicolor, virginica をそれぞれ,紫,茶,緑系の色で表示する
Andrews.graph(iris[1:4], col=col, normalize=FALSE, main="iris data")  # データを標準化しない場合
Andrews.graph(iris[1:4], col=col, normalize=TRUE, main="iris data")   # データを標準化する場合

出力結果例

データを標準化しなかった場合

graph

データを標準化した場合

graph

・ 解説ページ

・ 参考文献

  河口至商,水田正弘「パソコンによる多変量グラフ解析入門」,森北出版株式会社,84〜88ページ
  脇本和昌,後藤昌司,松原義弘著「多変量グラフ解析法」,朝倉書店,111〜113ページ
  http://cran.r-project.org/doc/contrib/grafi3.pdf スペイン語


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh