★ Chernoffの顔 ★

 115 Chernoffの顔  ざーさい  2002/12/05 (木) 12:57
  126 Re: Chernoffの顔  青木繁伸  2002/12/06 (金) 19:39
   152 Re:論文でつかうのが楽しみです  ざーさい  2002/12/09 (月) 14:58
  121 Re: Chernoffの顔  青木繁伸  2002/12/05 (木) 23:20
   122 Re^2: Chernoffの顔  青木繁伸  2002/12/05 (木) 23:26
    123 Re^3: Chernoffの顔  青木繁伸  2002/12/06 (金) 00:04
     124 Re^4: Chernoffの顔  青木繁伸  2002/12/06 (金) 00:05
  118 Re: Chernoffの顔  青木繁伸  2002/12/05 (木) 14:05


115. Chernoffの顔  ざーさい  2002/12/05 (木) 12:57
Chernoffの顔をSplusやSで書けることをしりました。

Chernoff, H. (1973). The use of Faces to Represent Points in k-Dimensional Space Graphically. Journal of the American Statistical Association, 68, 361-368.

Rではかけないのでしょうか?
コードをみたところ内部コードのようですが,,,

     [このページのトップへ]


126. Re: Chernoffの顔  青木繁伸  2002/12/06 (金) 19:39
R で作りました(力ずく?)

http://aoki2.si.gunma-u.ac.jp/R/index.html

参考文献:脇本和昌,垂水共之,田中豊編「パソコン統計解析ハンドブック I 基礎統計編」共立出版株式会社株式会社

     [このページのトップへ]


152. Re:論文でつかうのが楽しみです  ざーさい  2002/12/09 (月) 14:58
> R で作りました(力ずく?)
>
> http://aoki2.si.gunma-u.ac.jp/R/index.html

感動しました。また回りにRを奨めるときに披露する技?が増えました(笑)

スレッド表示で見ていたので見逃していました。たしかに非常に
訴えかけるものがパワフルですね,(そのぶん注意して使わなければなり
ませんが,,,)

是非,博士論文で使わせてもらいます。
(小生がしっていたものは顔の上下の大きさは一緒だったので,
2重に驚きました。)

     [このページのトップへ]


121. Re: Chernoffの顔  青木繁伸  2002/12/05 (木) 23:20
顔の落書きをするプログラム
arc1 <- function(x1, y1, r, l, xo, yo)
{
    sign <- ifelse(l > 0, -1, 1)
    sang <- sign*acos(x1/r)
    yo <- yo+(y1-sign*sqrt(r^2-x1^2))
    if (l <= 0) {
        arc(xo, yo, r, sang, pi-sang)
    }
    else {
        arc(xo, yo, r, pi-sang, 2*pi+sang)
    }
}

arc <- function(ox, oy, r, sang, eang)
{
    oldx <- oldy <- 0
    step <- min(0.1, (eang-sang)*0.1)
    for (theta in c(seq(sang, eang, step), eang)) {
        x <- r*cos(theta)+ox
        y <- r*sin(theta)+oy
        if (theta != sang) {
            gline(oldx, oldy, x, y)
        }
        oldx <- x
        oldy <- y
    }
}

gline <- function(x1, y1, x2, y2)
{
    lines(c(x1, x2), c(y1, y2))
}

pi2 <- 2*pi
plot(c(-5, 5), c(-5, 5), type="n", xlab="", xaxt="n", ylab="", yaxt="n", bty="n")
arc(0, 0, 4, 0, pi2)
arc(1.5, 1.6, 1, 0, pi2)
arc(-1.5, 1.6, 1, 0, pi2)
arc(1.2, 1.5, 0.3, 0, pi2)
arc(-1.2, 1.5, 0.3, 0, pi2)
gline(0, 1, 0, -1.7)
arc1(1.3, -1.3, 4, 1, 0, -1)
arc1(1.3, -1.3, 2, 1, 0, -1)

     [このページのトップへ]


122. Re^2: Chernoffの顔  青木繁伸  2002/12/05 (木) 23:26
あと,楕円(弧)を描く関数を作って,ドライバ関数を作れば顔グラフが描ける。
誰か,やりますか?(^_^;)

     [このページのトップへ]


123. Re^3: Chernoffの顔  青木繁伸  2002/12/06 (金) 00:04
楕円を描く関数  あとは,ドライバ関数
ellipse0 <- function(xs, ys, rm, rn, thop, thsp, thep, xo, yo)
{
    oldx <- oldy <- 0

    if (thep < thsp) {
        thep <- thep+2*pi
    }
    rmn1 <- rm*rn
    rmn2 <- 4/(rm+rn)
    k <- (thep-thsp)/rmn2
    xs <- xs+xo
    ys <- ys+yo
    for (i in 0:k) {
        thsp <- thsp+rmn2
        ww <- rmn1/sqrt((rm*sin(thsp))^2+(rn*cos(thsp))^2)
        x1 <- ww*cos(thop+thsp)+xs
        y1 <- ww*sin(thop+thsp)+ys
        if (i > 0) {
            gline(oldx, oldy, x1, y1)
        }
        oldx <- x1
        oldy <- y1
    }
    ww <- rmn1/sqrt((rm*sin(thsp))^2+(rn*cos(thsp))^2)
    x1 <- ww*cos(thop+thsp)+xs
    y1 <- ww*sin(thop+thsp)+ys
    gline(oldx, oldy, x1, y1)
}

     [このページのトップへ]


124. Re^4: Chernoffの顔  青木繁伸  2002/12/06 (金) 00:05
顔の落書きテスト バージョン2

pi2 <- 2*pi
plot(c(-500, 500), c(-500, 500), type="n", xlab="", xaxt="n", ylab="", yaxt="n", bty="n")
arc(0, 0, 400, 0, pi2)
arc(150, 160, 100, 0, pi2)
arc(-150, 160, 100, 0, pi2)
arc(120, 150, 30, 0, pi2)
arc(-120, 150, 30, 0, pi2)
gline(0, 100, 0, -170)
arc1(130, -130, 400, 1, 0, -1)
arc1(130, -130, 200, 1, 0, -1)
ellipse0(0, 0, 500, 280, 0.5, 0, pi2, 0, 0)
ellipse0(0, 0, 500, 280, -0.5, 0, pi2, 0, 0)

     [このページのトップへ]


118. Re: Chernoffの顔  青木繁伸  2002/12/05 (木) 14:05
> Rではかけないのでしょうか?
> コードをみたところ内部コードのようですが,,,

チャーノフの顔グラフは,多変量データを顔の部品に割り当て,数値により部品のサイズ・形状を決め,それによって線画を描くだけですから(爆),絵を描くことのできるソフトなら可能です。R では plot と lines を使えば,点を結んで曲線(直線)を描くことができます。
http://aoki2.si.gunma-u.ac.jp/R/map.html
には,R で日本地図を描くプログラムとデータを示してあります。点の座標さえ用意できれば,どんな複雑な線画でも描けます。
後,問題は,点の座標データをどのように用意するかですが,それはプログラム機能を持つ R にとって,不可能でも何でもありません。ただ,ちょっと面倒くさい。つまり,他の言語システムではたとえばプロッターを駆動する関数(円を描くとか三角形を描くとか)はライブラリとして準備できているでしょうが,R ではもしかしたら全部自分で用意しないといけないかもしれない。
http://wwwbs.let.hokudai.ac.jp/~otsu/Sguide.pdf
には,確率楕円を描く関数が紹介されている。この手の関数を必要に応じて作ればいいのでしょう。

     [このページのトップへ]


● 「統計学関連なんでもあり」の過去ログ--- 022 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る