jStat は,統計関数とグラフの描画機能をブラウザ上で提供する JavaScript ライブラリである。外部への依存関係を持たず,すべてのブラウザで統計処理に使用することができる。ただしデータのプロットには jQuery と flot プラグイン が必要だ。jStat は,オープンソースの統計処理言語および作業環境である R を部分的にポートしたもので,その機能のサブセットを実装している。
jStat の提供する機能を確認するため,InfoQ は Matthew Williams 氏に話を聞いた。氏は英国バーミンガムの Aston 大学の研究員で,jStat チームのメンバである。
jStat のコアは,ベクトルと行列をベースとしています (MatLab によく似ています)。基本ユニットは行列で,jStat 関数 (j$) を使って生成します。
§ var matrix = j$([[1,2,3],[4,5,6],[7,8,9]])
生成された行列は加算,除算,乗算,減算,対角,反対角,転置,内積,正規化,最少,最大,平均,中央値といったメソッドを実装しています。
さらに正規,対数正規,ベータ,ガンマ,ワイブル,コーシー,カイ2乗,指数,パレート,スチューデントTなどの確率分布もホストしています。それぞれの確率分布で,特定の x 値 (または値の行列) における PDF,CDF,逆 CDF の評価,さらに可能であれば平均値,中央値,最頻値,標準偏差,分散などを求めることもできます。また,ほとんどのディストリビューションでは,ランダムサンプルの生成も可能です。
さらに '専門' 関数として,ガンマ関数,逆ガンマ関数,ベータ関数,逆ベータ関数,不完全ベータ関数,対数ガンマ関数,逆不完全ガンマ関数,誤差関数,相補誤差関数,逆相補誤差関数 なども用意されています。randn (正規分布からのランダムサンプリング) と randg (ガンマ分布からのランダムサンプリング) という,2つの乱数生成器も提供します。
その他に,夏の間 Aston 大学で作業をした Tushar Gupta という学生が,"Nelder-Mead と非線形共役勾配アルゴリズムを用いた最適化,および積分,微分,内挿など線形代数関数" など,多数の機能を追加している。
jStat は比較的若いプロジェクトであり,最も不足しているのはプロット機能の品揃えである。これは将来的に追加されていく予定だ。明確なロードマップは設定されていないが,williams 氏が語るところによると,チームとしては将来的にプラグインアーキテクチャを導入して,プロジェクトに関心があれば誰でも拡張ができるようにしたいと考えているようだ。
jStat の今後については,たくさんの計画があります。現在はシンプルな線形回帰から始まって,もう少し複雑なベイズ的手法まで提供する,回帰パッケージに取り組んでいるところです。多変量変数 (3D) など,より複雑なプロット機能についても提供を検討しています。さらに将来的には,完全にインタラクティブな jStat を作り上げるという大目標もあります。
cloud9 というオンライン IDE がありますが,それと同じように変数の追跡や対話的なプロット,作業の保存と再開などの機能を備えたオンラインの Matlab/R 環境を jStat で提供したいと思っています。
またプラグインアーキテクチャを構築して,jStat 用のプラグインを開発すれば誰でも機能を拡張できるようにしたい,という考えもあります。完全なプラグインシステムにすることで,jStat には非常に大きな可能性があると思うのです。
公式なロードマップについては,今の時点では難しいですね。私たちは現在,リファクタリングと変更内容のドキュメント化で忙しいのですが,一段落したら jStat Web サイトの更新とチュートリアルの提供に取り掛かるつもりです。これらのことを数カ月のうちに完了して,それを1つの大きなステップにしたいと思っています。このマイルストーンに到達できれば,jStat の将来を計画する上で,よいポジションに付くことができるでしょう。
コードの最新バージョンは Github/jstat にあり,寛容な MIT ライセンス の下で公開されている。
より堅牢で完成度の高い統計ソリューションを望むならば,R を使用することができる。R はあらゆる種類の統計計算とプロットを Unix,Mac,Windows 上で実行するためのツールを完備した,完全なフレームワークだ。しかし R が統計処理を行うネイティブアプリケーション開発に最適であるのに対して,R ほどのフレームワークの全機能と規模を必要としない場合には,ブラウザを選ばない軽量 web アプリケーションの作成が可能な jStat が適している。(jStat の最小バージョンが 40KB であるのに対して,R の Windows インストーラは 39MB ものサイズがある)