[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:003198] GGraph の散布図機能改定について



大塚さま:
(dennou-ruby あてにします.西澤さん,末尾に質問等ありです.)

GGraph の散布図描画メソッド(scatter, color_scatter)に
新しいオプションを追加してくれたので,何かなと思って試してみる
ついでに,ソースの末尾のテスト部分にサンプルを追加しました.
ggraph に機能を追加するときはデモとテストを兼ねてそうしてもら
えると嬉しいです.(散布図関連は,私も作ってなかったのがまずかっ
たです.すみません.color_scatter のサンプルも欲しいですね...)

今回加わったのは相関やEOFを計算した上で表示するという
ものですね.オプションの説明をみてもよくわからなかったので,
説明を増やしておきました(相関のほうだけ).

GGraph はこれまで可視化だけだったので,オプションながら相関も計算する
というのは,今まではない試みです.そういうのも今後はある程度はよしとし
ましょうか.基準としては,やることが単純でいかにも補助的にやるような
計算で(...感覚的なものになってしまいますが),かつ,その表示のために
加える描画オプションも少ない場合というのはどうでしょう.
散布図描画におけるついでの相関計算はいいですかね.
今回のコーディングでも,計算メソッド自体は ganalysis に分離されて
るのが良いです.

ただ,どうせなら,あとで計算結果を用いたい場合に,
同じ計算を外で繰り返さないですむような工夫はしたほうがいいと
思います.そうでなければやはり外で計算して与えるのがいいのでは?
結果を返すのは,やはり戻り値でするのがいいと思います.
現状だと GGraph の描画メソッドは,戻り値は常に nil になってますが,
correlation => true の場合,相関係数とデータ個数をハッシュにして
戻り値にするとか....うーん,どうかな.でも計算が一つとは限らなけ
れば順番並びには頼れない.(ちなみに,有意性計算には自由度が必要
なので,とりあえず個数は返して欲しい.もちろん欠損値はカウントしない.)

ところで,散布図における相関といえば,フィッティングした直線も
欲しくなるでしょうね.これについては,独立変数が x か y か,
あるいは両方対等のフィッティングかという選択が必要ですし,
線種や色等も指定したいでしょうから,scatter のオプションとはせず,
別途計算して line で重ねるのがいいでしょう.

さて,EOF についてです.
ggraph 内に計算がコーディングしてあるのでなんでかと思ったのですが,
ganalysis.rb の eof メソッドとは入力に関する想定が
違うので対応できないというわけですね.でも,その場合の対応としては,
ganalysis に新メソッドを付け加えたうえで呼ぶようにしてほしいです.
(ggraph内には診断計算メソッドを入れない.)
これを仮に eof2 という名前で呼ぶことにすると,eof2(x,y) は
x, y を適当に加工して eof を呼ぶというので対応するのが簡単そうに思います.
ggraph に入れてあるものは GSL を前提にしてるなど,「とりあえず
つくってみた」感じなので,そのまま ganalysis に入れるのは
よくないのでは?

EOF ベクトルの図示は,いろいろやり方がありそうですし,
scatter のオプションでなくメソッドとして分離して
ほしいです.GGraph は重ね書きもできますので,こんな感じで呼べたら
いいんでは?

   GGraph.scatter(x,y)
   modes, rates = GAnalaysis.eof2(x,y)
   GGraph.add_arrows(modes)   # 最初のモードのみ表示なら modes[0]

add_arrows という名前は思いつきなので違ってもいいです.
add_arrows (仮名) のオプションは,線種やインデックスに加え,
線分か矢印か選べるようにすると良いと思います.
(arrowだと矢印をデフォルトにしないと妙なので,線分がデフォルトが
よければ別のメソッド名がいいでしょう.)
あと,(scatterのeof表示の新オプションにある)長さの調整
関係のオプションも必要なら.eof が norm 付きなら基本は不要
でしょうが...

ちなみにメソッド名の頭の add_ は,単体で描画するのでなく,
今ある描画に追加で書き込む
イメージです.その手のメソッドで既存の color_bar には add_ が
ついてないのですが,「追加書き込みメソッド」が増えてくると,
このように名前で区別できたらいいかもということで.
(color_bar の改名はしないですが.)


西澤さま:

GAnalysis.eof で計算される eof ベクトルのノルムってどうなってます?
その軸方向の標準偏差? 小物置き場の解説を見ても載ってないし,ソースは
no document なので.あと,並び順は寄与率順にはなってないでしょうか.
ソースのテスト部分で theta = PI/6 となってるのを PI/3 にして
走らすと,最初にでてくるのは小さい順になりました.
すみませんが,ソースに引数及び戻り値の仕様を書いて,あと,
できれば小物置き場なりのドキュメントにも反映してもらえると
嬉しいです.

堀之内 武
北海道大学 地球環境科学研究院 地球圏科学部門