このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

統計の基本中の基本をハッキリさせる

R言語をインストールしたはいいけど、全然使えないです。Rが、プログラミング言語としてどういうものか?おおよその見当は付きますが、Rの用途は統計。統計処理をしないとあまり意味がない。だけど統計を知らないのでお手上げ。

統計の入り口は、データ整理をする記述統計という分野です。記述統計では確率も母集団も出てきません。このレベルでもよく分かんない。入門書を見ると、事例があるだけで用語・概念の定義がないんですよ。教育的配慮としては妥当かと思うんですが、気持ち悪い。なので、想像(「たぶんこうだろう」)を織り交ぜて基本概念を解釈してみます。教育的配慮はありません。

  1. 変数とデータ
  2. データシーケンスからデータフレームへ
  3. 変量の値の集合
  4. 分布と密度
  5. ヒストグラム
  6. グラフィックス以前

変数とデータ

いきなり「2変数のデータ」とか言われても、「はぁー、ソレなんですか?」と困惑します。

統計の「変数」とは関数のことですね。統計の文脈では、ある種の関数のことをほとんど常に「変数」と呼びます。でも、僕は違和感があるので、当面「変量」を使います。慣れたら「変数」にするかも知れません。

なんらかの集合DとVがあって、関数 x:D→V もあるとき、Dをデータの集合と解釈して、xをV値の変量(統計用語の変数)と呼ぶみたいです。「データの集合」って何だ? てーのは、一般的には定義できないので、個別の状況ごとに考えるしかないです。例えば、Dが人の集団で、x:D→RRは実数の集合)が人の身長とか。

集合Dをデータ空間、Dの要素をデータ点と呼びます。データ空間/データ点は、Rのスーパーエキスパートであるウィッカムが使っていた用語です(一般的かも知れないけど)。([追記]ウィッカムの用例だと、目的にとって十分な変量の集まりがあったとき、それら変量の値の空間達を直積に組んだものをデータ空間と呼んでる気もします。[/追記]

データ空間Dは無限集合かもしれないので、人間やコンピュータで扱える有限部分集合を考えます。その有限部分集合をデータセットと呼ぶようですが、実際のところはデータセットはセット(集合)じゃないみたい。

ここでは、{1, 2, ..., N} を[N]と略記して、d:[N]→D を、長さNのデータシーケンスと呼ぶことにします。データシーケンスdは、(d(1), d(2), ..., d(N)) というタプルで表現できるので、d∈DN と考えてかまいません。データセットがほんとに集合のときもありますが、多くの場合はデータシーケンスをデータセットと呼んでいる感じ。意味するところは文脈依存なんです。

長さ4のデータシーケンス (3, 3, 3, 3) は、集合としては {3} ですが、「4回同じ値が繰り返した」ことが重要なら、そのことはデータシーケンスとしてしか表現できません。ただし、部分集合を列挙(枚挙)するために便宜上データ点を並べていることもあるので、このときはシーケンスでセットを表現しています。

データシーケンスからデータフレームへ

Rで「データ」と言った場合は、たいていデータフレームのことですね。例えば、有名(らしい)アヤメのデータirisはデータフレームとして提供されています。


> class(iris)
[1] "data.frame"
> nrow(iris)
[1] 150
> names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
>

データシーケンスの長さが150、irisの場合はシーケンスがセットを表し、150個のデータ点(アヤメの個体)の集合だと思っていいです。"Sepal.Length"、"Sepal.Width"、"Petal.Length"、"Petal.Width"、"Species" は関係データベースで言えばカラム名(属性名)に相当するもので、変量の名前です。

具体的に扱うデータは単なるデータ点の並び(または集合)ではなくて、変量と共に与えられます。幾つの変量(変数)を伴なうかによって「1変数のデータ」とか「2変数のデータ」とか呼ぶようです。

もう少しハッキリ述べると: d:[N]→D がデータシーケンスとして、x:D→V が変量のとき、dとxの組 (d, x) が1変数のデータです。もうひとつ変量 y:D→W があって、(d, x, y) を考えるなら、これが2変数のデータです。n変数のデータも同じことです。

データ空間Dは、概念的・理想的な存在だったりするので、d:[N]→D よりは、xを後結合(post-compose)した d;x:[N]→V のほうが現実的です。x1 = x(d(1)), x2 = x(d(2)), ..., xN = x(d(N)) とすれば、1変数のデータは (x1, x2, ..., xN) で表現できます。つまり、データ空間Dが表面からは消えて、値の空間VのN個の直積VNに舞台が移るわけです。

2変数のデータのときも同様で、d:[N]→D に対して、x:D→V と y:D→W があると、xi = x(d(i))、yi = y(d(i)) (i = 1, 2, ..., N)として、((x1, y1), (x2, y2), ..., (xN, yN)) が2変数データの表現となります。

かくして2変数のデータは、直積空間 (V×W)N の要素となるわけですが、(V×W)N \stackrel{\sim}{=} VN×VN なので、長さNのV値ベクトルと同じ長さNのW値ベクトルの組ともみなせます。変量(変数)の名前がxとyだったので、xとyを名前ラベルとする名前付きタプルで表現できます。

(d, x, y) を、xとyをラベルとする名前付きタプル(名前付きリスト)とみなしたものが、まさにRのデータフレームです。x, yの値は、同じ長さNを持つV値、W値ベクトルです。アヤメの例は5変数のデータで、変数名の集合が {"Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species"} で、N = 150 です。

変量の値の集合

変量 x:D→V には、値の集合Vが伴います。このVの特徴によって変量を分類するようです。そもそもVには、そんなに色々な種類があるわけじゃなくて、基本は二種類でしょう。

  1. 実数の全体Rか、または(空でも一点でもない)実数の区間
  2. 離散的な集合

「離散的な集合」は、離散位相を持つ位相空間と解釈していいし、実数とその区間は自然な位相を持ちます。なので、値の空間Vは常に位相空間だとしていいでしょう。

変量の値が実数のときは連続変量、そうでないときが離散変量です。量的質的な変数なんて言葉も使います。

値の集合Vとして実数Rを使う場合は、それを1次元のベクトル空間とみなすかアフィン空間とみなすか、とかも問題になります。どんな代数構造を許すか、ってことですね。温度の空間とかはややこしいです。

値の集合Vに順序が入るかどうかも問題になりますが、x ≦ y ⇔ x = y という自明な順序も順序のうちなので、常に順序構造を持つとしてもいいでしょう。ときに役立たずの順序もある、ということで。離散的なVに役に立つ順序がないとき、Vに値を取る変量をカテゴリカル変数と呼ぶみたい。値は分類のラベルでしかない、ということでしょう、たぶん。

結局、自明な位相や順序も認めるとして、変量の値の空間Vは位相と順序を常に持つと前提していいでしょう。位相があればボレルσ代数が定義できるので、Vは可測空間になります。

なんだかんだで、Vはけっこう豊富な構造を持ちます。

  1. Vは位相空間である。
  2. Vは順序集合である。
  3. Vは可測空間である。
  4. 他に、V上になんらかの代数構造が載ることもある。

分布と密度

確率については考えません。それでも、変量 x:D→V は確率変数と同様な扱いがある程度はできます。そのために、データ空間Dは測度空間だとします。D = (D, Σ, μ) のように書けて、Σがσ代数、μはΣ上の測度だとします。簡単な例は、Dが有限のとき、Dの部分集合に個数(基数)を対応付ける個数測度です。測度μが確率測度であることは仮定しません。

DもVも可測空間という状況では、変量 x:D→V は可測写像だとするのが自然です(可測な圏で考える)。V上には事前には測度がありません。しかし次のようにして、D上の測度μをxにより前送り(phsh forward)してV上に持って来ることができます。

  • Vの可測集合Aに対して、ν(A) := μ(x-1(A)) と定義する。

この定義でV上の測度νが作れます。νは、μのxによる像測度(image measure)と呼びます。確率を考えてないのに像測度を引き合いに出すのは、これがないとヒストグラムも定義できないからです。

変量xに対する「分布」という言葉が、たいていは定義なし(または曖昧な説明)で出てくるのですが、おそらくは、データ空間D上の測度のxによる像測度を分布と呼んでいるのでしょう。この意味なら、分布とは「値の空間V上の測度」のことです。D上の測度からx経由で誘導された測度、という断り書きが付きますが。

V上の実数値(非負値)関数fが、積分により分布(像測度)を再現するなら、fはその分布の密度関数です。変量 x:D→V において、Vが離散的であるか、あるいはV自体は連続(非離散)でも x(D) が離散部分集合になるとき、分布の点密度と点質量は区別する必要がなくなります。なので、点密度の和となるような密度関数を質量関数とも呼ぶようです。でも、質量関数というのは分かりにくい言葉ですね。分布が像測度だということが大事で、その表示は副次的な話だと思います。

ヒストグラム

ヒストグラムは1変数のデータの視覚化(チャート、プロット)の一形式です。この図示の前に行う処理を考えてみます。

変量 x:D→V は連続変量として、値の空間VはR区間だとします。xのヒストグラム(の事前処理)とは、値の空間Vを直和分割して、分割した各成分を像測度で計ることです。

一般に、集合Xの分割とは、Xのベキ集合Pow(X)の部分集合Pで、次の性質も持つものです。

  1. A∈P ならば、Pは空ではない。
  2. A, B∈P で A ≠ B ならば、A∩B = 空集合
  3. Pのメンバー全部の合併はXになる。

要するに、Xを隙間なく覆う集合族だけど、互いに重ならない(disjoint)ものです。区間をいくつかの小区間に分ければ、今言った意味の分割になります。

さて、変量 x:D→V に話を戻すと、Vを集合族Pに分割したとき、Pのメンバーはビンとか階級と呼びます。V = [a, b] という区間なら、a0 = a、ak = b として、列 a0 < a1 < ... < ak で少区間への分割が決まります。各 aiブレーク値とかブレーク点と呼ぶようです。ブレーク値が等間隔で並ぶなら、ビン幅の指定で分割が決まります。あるいは、いくつの少区間に分けるかを指定して等間隔に切り刻んでもいいでしょう。

[ai, ai+1] がビン(階級)だとして、このビンを像測度(分布)で計るということは、変量xによる逆像 x-1([ai, ai]) を取って、それをデータ空間D上の測度で計ることです。D上の測度が個数測度なら、xによる値が範囲 [ai, ai] 内に入っているデータ点の個数を勘定すればいいわけです。像測度により計ったビン(階級)の測度が度数です。度数が決まるには、「(1)D上の測度、(2)変量x、(3)値の空間Vの分割」が必要なので、思ったより複雑な概念です。

たまに、階級値っていうのを考えますが、これは、値の空間Vの分割をPとして、v:P→V という写像で、v(B)∈B となるものです。分割が少区間への分割なら、少区間Bに対する階級値v(B) は少区間Bの真ん中の値が採用されるのが普通です。

グラフィックス以前

Rはグラフィックスが強力だけど、実際に図示する前に、元のデータの構造がどうなっているかを把握しないと、どう描けばいいか分かんないです。

データシーケンスの順序が、実際になんらかの順序(例えば時間順)を反映しているのか、列挙のための恣意的・無意味な並び順なのかで扱いも変わるでしょう。変量が連続なら、その変量の値を位置や色にマップするでしょうが、離散量ならマーカーの形状とかで区別するのが適切かも知れません。

だいたいは視覚化したら分かりやすくなるハズなんですが、ヘタに図示すると誤解を招くだろうし、故意に誤解を与えることも可能です(やっちゃいけない)。それで、基本的なデータの枠組みをまとめてみました。