三角多項式グラフ 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") # データを標準化する場合
出力結果例
データを標準化しなかった場合
データを標準化した場合
解説ページ
参考文献
河口至商,水田正弘「パソコンによる多変量グラフ解析入門」,森北出版株式会社,84〜88ページ
脇本和昌,後藤昌司,松原義弘著「多変量グラフ解析法」,朝倉書店,111〜113ページ
http://cran.r-project.org/doc/contrib/grafi3.pdf スペイン語
直前のページへ戻る
E-mail to Shigenobu AOKI