LispStat を利用した統計処理1

[ 目次 || 前ページ | 次ページ ]

ヘルプの利用

LispStat には沢山の関数があるが、それら全て、その使用方法を覚えておくことは不可能だろう。 そこで、関数の使用方法などについては、ヘルプを参照する。
    > (help 'median)
    MEDIAN                                                          [function-doc]
    Args: (x)
    Returns the median of the elements of X.
ヘルプの参照は、help 関数に ヘルプを求めたい関数の名前の前に'(シングルクォーテーション)をつけて実行する。結果として、その関数に関する、引数の個数と内容の説明の記述が得られる。 関数名がうろ覚えの場合には、help* 関数に部分的な名前を作用することにより、その文字列を含む全ての関数名のヘルプが返される。
    > (help* 'norm)
この結果は、norm を含む沢山の関数名のヘルプが返される。 シンプルに、ある文字列を含む関数名を返す関数 apropos がある。 これにより、関数を探し、help 関数でそのヘルプをみるのがいいだろう。
    > (apropos 'norm)
    NORMALREG-MODEL
    NORM
    BIVNORM-CDF
    NORMAL-QUANT
    NORMAL-RAND
    NORMAL
    NORMAL-CDF
    NORMAL-DENS

関数の定義

前回の演習では、変数の分散を計算したが、分散の計算などは毎回式を 記述するのではなく、関数として定義して利用する方が便利である。 関数の定義は、defun 関数を使い
    (defun funcname (parameter)
       body )      <-- 見やすさのために改行している
のように定義する。
    (/ (^ (- height (mean height)) 2) (length height))
のように、変数 height の分散は計算されたので、分散を計算する関数 var は
    > (defun var (x)
       (/ (sum (^ (- x (mean x)) 2)) (length x)))
    VAR
    > (var height)
    47.64000000000001
    > (var weight)
    16.240000000000002
として定義して利用できる。ついでに不偏分散を計算する関数を定義すると
    > (defun uvar (x)
       (/ (sum (^ (- x (mean x)) 2)) (- (length x) 1)))
    UVAR
    > (uvar height)
    52.933333333333344
また、ユーザ定義関数を新たな関数を定義するのに利用できる。 標準偏差を計算する関数は以下のように定義できる。
    > (defun std (x)
       (sqrt (var x)))
    STD
ここで、Lisp-Statが準備している標準偏差を計算する関数 standard-deviation を使ってみると、
    > (std height)
    6.902173570694959
    > (standard-deviation height)
    7.275529763071094
今、定義したものと値が異なっている。これは、Lisp-Statは不変標準偏差を出力しているからであり、
    > (defun ustd (x)
       (sqrt (uvar x)))
    USTD
    > (ustd height)
    7.275529763071095
とすることにより、確認できた。

演習5 例題2のデータについて、次のことを行ないなさい。

  1. 身長のデータを標準化(平均を引いて、標準偏差で割る)しなさい。
  2. リストの標準化をおこなう関数 standardize を定義し、身長、体重のデータを標準化せよ。
  3. 共分散と相関係数を計算する関数を定義し、身長と体重の共分散と相関係数を計算せよ。
演習の解答

条件をつけて、評価したい場合には、cond を利用する。

    > (defun my-abs (x)
        (cond ( (> x 0) x)
              ( (= x 0) 0)
              ( (< x 0) (- x))))
    MY-ABS

グラフの作図

LispStatには、統計グラフを作図するための関数が幾つか用意されている。 データのヒストグラムを表示する関数 histogram や 箱ひげ図をプロットする boxplot などである。
    > (histogram height)
    > (boxplot height)
boxplot に変数のリストを与えると、平行箱ひげ図がプロットされる。
    > (boxplot (list height weight))
2次元プロットとしては、散布図をかく plot-points、折れ線がある。
    > (plot-points height weight)
これで、身長と体重の散布図をかくことができる。


[ 目次 || 前ページ | 次ページ ]

By Yoshiro Yamamoto