98 Stats (簡単な統計情報)

書式:
    stats {<ranges>} 'filename' {matrix | using N{:M}} {name 'prefix'}
          {{no}output}

このコマンドは、ファイルの 1 列、または 2 列のデータの簡単な統計情報を 提供します。using 指定子は、plot コマンドと同じ形で解釈されますが、 index, every, using 指定に関する詳細については以下参照: plot (p. [*])。 データ点は、その解析の前に xrange, yrange に従ってフィルタにかけられま す。以下参照: set xrange (p. [*])。その情報はデフォルトではスクリーンに出力さ れますが、コマンド set print を先に使うことで出力をファイルにリダイ レクトしたり、オプション nooutput を使うことで出力しないようにするこ ともできます。

画面出力に加え、gnuplot は個々の統計情報を 3 つの変数グループに保存し ます。 1 番目の変数グループは、どんなデータが並んでいるかを示します:

STATS_records   N   範囲内のデータ行の総数
STATS_outofrange       範囲外として除かれた行数
STATS_invalid       無効/不完全/欠損データ行の総数
STATS_blank       空行の総数
STATS_blocks       ファイル内のデータの index ブロック数
STATS_columns       データ先頭行の列数

2 番目の変数グループは、1 つの列の、範囲内のデータの性質を示します。こ の列は y の値として扱われます。y 軸が自動縮尺の場合は、対象とする範囲 に限界はありませんが、そうでなければ範囲 [ymin:ymax] 内の値のみを対象 とします。

2 つの列を同時に 1 回の stats コマンドで解析する場合は、各変数名に "_x", "_y" という接尾辞を追加します。例えば STATS_min_x は、1 つ目の列 のデータの最小値で、STATS_min_y は 2 つ目の列のデータの最小値を意味し ます。この場合、点は xrange と yrange の両方で検査することでふるいにか けます。

STATS_min   min(y) 範囲内のデータ点の最小値
STATS_max   max(y) 範囲内のデータ点の最大値
STATS_index_min   i | yi = min(y) data[i] == STATS_min となる添字 i
STATS_index_max   i | yi = max(y) data[i] == STATS_max となる添字 i
STATS_mean $\bar{{y}}$ = ${\frac{{1}}{{N}}}$$\sum$y 範囲内のデータ点の平均値
STATS_stddev $\sigma_{y}^{}$ = $\sqrt{{\frac{1}{N}{\sum{{(y-\bar{y})}^2}}}}$ 範囲内のデータ点の標本標準偏差
STATS_ssd sy = $\sqrt{{\frac{1}{N-1}{\sum{{(y-\bar{y})}^2}}}}$ 範囲内のデータ点の不偏標準偏差
STATS_lo_quartile     第一 (下の) 四分位境界値
STATS_median     メジアン値 (第二四分位境界値)
STATS_up_quartile     第三 (上の) 四分位境界値
STATS_sum   $\sum$y
STATS_sumsq   $\sum$y2 平方和
STATS_skewness   ${\frac{{1}}{{N\sigma^3}}}$$\sum$(y-$\bar{{y}}$)3 範囲内のデータ点の歪度
STATS_kurtosis   ${\frac{{1}}{{N\sigma^4}}}$$\sum$(y-$\bar{{y}}$)4 範囲内のデータ点の尖度
STATS_adev   ${\frac{{1}}{{N}}}$$\sum$| y-$\bar{{y}}$| 範囲内のデータ点の平均絶対偏差
STATS_mean_err   $\sigma_{y}^{}$/$\sqrt{{N}}$ 平均値の標準誤差
STATS_stddev_err   $\sigma_{y}^{}$/$\sqrt{{2N}}$ 標準偏差の標準誤差
STATS_skewness_err   $\sqrt{{6/N}}$ 歪度の標準誤差
STATS_kurtosis_err   $\sqrt{{24/N}}$ 尖度の標準誤差

3 番目の変数グループは、2 つの列のデータの解析専用です。

STATS_correlation   x と y の不偏相関係数
STATS_slope   回帰直線 y = Ax + B の係数 A
STATS_slope_err   A の不確かさ
STATS_intercept   回帰直線 y = Ax + B の係数 B
STATS_intercept_err   B の不確かさ
STATS_sumxy   積和 (x*y の和)
STATS_pos_min_y   y の最小値を与える x 座標
STATS_pos_max_y   y の最大値を与える x 座標

matrix が指定されると、全ての行列要素がその解析の対象になります。そ の行列のサイズは、変数 STATS_size_x と STATS_size_y に保存されます。

2 つ以上のファイルやデータ列からの統計情報を並列に扱うことができれば便利ですので、変数のデフォルトの接頭辞である "STATS" を、オプションname でユーザが指定する文字列に置き換えることができるようになっています。例えば、異なる 2 つのファイルのそれぞれの 2 列目のデータの平均値 は以下のようにして比較できます:

    stats "file1.dat" using 2 name "A"
    stats "file2.dat" using 2 name "B"
    if (A_mean < B_mean) {...}

キーワード columnheader や関数 columnheader(N) により、データファ イルの 1 行目から取得した内容により接頭辞を生成することもできます:
    do for [COL=5:8] { stats 'datafile' using COL name columnheader }

STATS_index_xxx で示される添字の値は、plot コマンドの第 0 疑似列 ($0) の値に対応し、最初の点は添字は 0、最後の点の添字は N-1 となります。

メジアンと四分位境界値を探す際はデータの値をソートし、点の総数 N が奇 数の場合は、その (N+1)/2 番目の値をメジアン値とし、N が偶数の場合は、 N/2 番目と (N+2)/2 番目の値の平均値をメジアン値とします。四分位境界値 も同様に処理します。

その後の描画に注釈をつけるためにコマンド stats を利用した例について は、以下を参照してください。 stats.dem。

現在のバージョンの gnuplot の stats コマンドでは、日時フィールド (set xdata timeset ydata time) がない場合は対数軸のデータも処 理できます。この制限は、将来のバージョンで緩和されるでしょう。

竹野茂治@新潟工科大学
2019-12-04