ひょっこりノートは、Google Colab のノートブックを利用した Web上のワークシートです。
Google Colab のノートブックは、文章とプログラムを含み、word,excel を合わせた機能を持ちます。
GoogleColab では Python, R, Julia の3種類のプログラム言語を使用することができます。

[目的]

  • 授業の要点をGoogleColabで記録し試験対策に役立てる。
  • R や Python でシミュレーションを体験する。(本講義では R を使用します)

1 ノートブック作成.

1.1 方法1.

まず一般的な方法を紹介します。

  • Google Colaboratory へようこそをクリックし、「ノートブックを開く」をクリックします.
  • 画面上のツールバーからランタイムをクリックし、「ランタイムのタイプを変更」をクリック、R に変更して保存をクリックします。

1.2 方法2.

以下のリンクをクリックすると、言語をRに設定した新規ノートブックを作成できます。

https://colab.research.google.com/notebook#create=true&language=r

ノートブックはプログラムを書き入れるファイルと思って下さい。  

2 コードセル.

Colab ではセル単位でプログラムを実行できます。

画面左上の「+ コード」をクリックすると新しいコードセルが作成されます。
R スクリプトを書いて実行してみます。

x <- rnorm(10000)
hist(x)

セル内のスクリプトが実行されました。

このように Colab ではセルごとにスクリプトを書き、実行することができます。

セルの出力(実行結果)を消すには、セルの右上のボタンから「出力を消去」を選びます。

  • コードセルの右上の鉛筆マークからAI機能を選ぶと、AIがコードの説明をしてくれます。また、コードに間違いがあれば指摘してくれます。

3 テキストセル.

画面左上の「+ テキスト」をクリックするとテキストセルが作成されます。
テキストセルは、プログラムではなく普通の文章を書くためのセルです。

テキストセルの編集時はセルが左右に分割されて表示されます。
左側がテキストを記入する場所で、右側にはテキストの表示結果が示されます。

  • Escキーを押すとテキストセルの編集状態を抜けます。
  • ダブルクリックで編集状態に戻ります。

以下の項目について、自分の Claboノートブックにコピペし、書式を整えてみましょう。
(まず、半角スペース2個を文末に入れ、行に区切る)

3.1 マークダウン.

テキストセルの文章はマークダウン形式で書くことができます。
マークダウン形式を知らない人は、とりあえず次のルールを覚えておくと良いでしょう。

  • 改行には半角スペース2個を文末に入れる.
  • 文と文の間に空の行を入れると段落に分割される.
  • 文頭に#記号を付けるとその文は太字かつ大きいサイズで表示される.

3つめのルールについて、これは文章の見出しを作るために使う機能です。ちなみに、#が1つだと文字のサイズがとても大きいですが、#記号を2つとか3つ並べることもでき、その場合は#記号の数が多くなるほど文字のサイズが小さくなります。

3.2 装飾記号.

Markdownは、記号(#や*)を使ってテキストを装飾する軽量マークアップ言語です。
主な装飾は、見出し(#)、太字(**)、斜体(*)、箇条書き(-)、リンク([テキスト](url))など。
すべて半角で入力し、記号と文字の間にスペースを入れることで、構造化されたHTML文書に変換されます。

  • 箇条書き:文頭に - (ハイフンと半角スペース)を付ける.
  • B 太字:** アスタリスク二つで囲む.
  • I 斜体:* アスタリスク一つで囲む.
  • 番号付きリスト:文頭に「1.半角スペース」を付ける
  • インデント:文頭に < を付ける.
  • 横罫線:(-)ハイフン3つで区切り線.

3.3 表.

Markdownは、表を記述することもできます。
テキストセルに以下のスクリプトを入力(コピペ)すると、四分表が作成されます。

|  | 効果あり|効果なし|計|
| :-- | :--: | :----: | :----:| 
| 新薬 | a |b| a+b |
| ブラセポ | c | d|c+d|
| 合計 |a+c |b+d|a+b+c+d|
|
効果あり 効果なし
新薬 a b a+b
ブラセポ c d c+d
合計 a+c b+d a+b+c+d

3.4 数式.

LaTeX(ラテフ)を用いて数式の記述もできます。
分散の式は次のようになります。

$\displaystyle V(X)=\dfrac{1}{n} \sum_1^n(x_i-m)^2$

   \(\displaystyle V(X)=\dfrac{1}{n} \sum_{i=1}^n(x_i-m)^2\)

  • LaTeX(ラテフ)は、数式が非常に綺麗にレンダリングされるため、数式を多用する理数系・工学系の論文では必須とされています。
  • LaTeX を使ったhtml では、数式を右クリックすると、
    Show Math As > Tax Commands によって LaTeX スクリプトが表示されます。

4 セルの操作.

セルをクリックして選択状態にすると、そのセルの右上にいくつかのアイコンが表示されます。上矢印↑や下矢印↓をクリックするとそのセルの位置を上下に移動させることができます。

ところで、新しいセルを作成する際に先ほどは画面左上の「+ コード」「+ テキスト」ボタンを使いましたが、別の方法も可能です。

セルとセルの間で、かつ左右方向で中央付近にマウスカーソルを合わせると、そこに「コード」と「テキスト」のボタンが現れます。

そのボタンを押せば、その位置に新しいセルを作成することができます。

5 ノートブックの保存.

ノートブックを保存するには、画面左上の「ファイル」から「保存」を選びます。
すると、ノートブックは自分の Google アカウントの Google Drive に保存されます。

Ctrl + S(⌘ + S)というキーボードショートカットでも保存できます。

ノートブックの名前は画面上部のファイル名の箇所をクリックすると変更できます。

6 メリット.

  • テキストやレジメは長いですが、重要な部分だけピックアップしておくことで復習に便利です.
  • コードを変えて、自分でシミュレーションができます。

7 乱数シミュレーション.

Rには正規分布に従うデータを出力する関数 rnorm があります。

rnorm(生成する乱数の数, 平均値, 標準偏差).

次のコードは、平均 mean=2 、標準偏差 sd=1 の正規乱数を1000個生成し、ヒストグラムを出力します。
平均を中心とし左右に 2 sd の範囲に 95% のデータが集まっていることがわかります。

x <- rnorm(1000,mean=2,sd=1)
hist(x)

面積が確率を表すようにするには、prob=TRUE を付け加えます。 縦軸は、Density(確率密度)となります。

  • dnorm(x, 平均値, 標準偏差) は理論関数を出力します。
    dnorm(x,2,1) は、平均 mean=2 、標準偏差 sd=1 の理論関数です。

  • curve は、関数のグラフを描画する関数です。
    add=True でグラフは重ね書きされます。

col で色を指定できます。次の図の赤い曲線は、理論上のグラフです。

hist(x,prob=T,col="lightblue")
curve(dnorm(x,2,1),add=TRUE,col="red")

<まとめ>.

  • rnorm(乱数を出力).
  • hist(ヒストグラムの描画).
  • curve(理論曲線の描画).

これがシミュレーションの流れです。

確率変数 X が 平均 μ 標準偏差 σ の正規分布に従うとき、

   \(𝑋∼𝑁(𝜇,𝜎^2)\)    と書きます。

8 標準化.

rnorm(1000, 5, 2) は、平均 m = 5 、標準偏差 s = 2 のデータを1000個出力します。

hist(rnorm(1000, 5, 2) ,breaks="sturges",prob=T,col="lightblue",xlim=c(-6,6),ylim=c(0,0.4),xlab="")

  • データから平均 5 を引けば、平均は0になります.
hist(rnorm(1000, 5, 2)-5 ,breaks="sturges",prob=T,col="lightblue",xlim=c(-6,6),ylim=c(0,0.4),xlab="")

  • さらに標準偏差 2 で割れば、標準偏差は1になります.
hist((rnorm(1000, 5, 2)-5)/2 ,breaks="sturges",prob=T,col="lightblue",xlim=c(-6,6),ylim=c(0,0.4),xlab="")

  • add=T を付けると、重ねて表示します.
hist(rnorm(1000, 5, 2) ,breaks="sturges",prob=T,col="white",xlim=c(-6,6),ylim=c(0,0.4),xlab="")
hist(rnorm(1000, 5, 2)-5,prob=T,col="lightpink",add=T)
hist((rnorm(1000, 5, 2)-5)/2 ,breaks="sturges",prob=T,col="lightblue",add=T)
curve(dnorm(x,0,1),add=TRUE,col="blue")

  • 白のヒストグラムが元のデータ.
  • 平均5を引くと、左に移動して0を中心とするピンクになり.
  • 標準偏差 2 で割った空色が標準化されたデータです。

dnorm(x,0,1) は標準正規分布を表す関数.

平均0、分散1の正規分布であり、

   \(\phi \left( z\right) =\dfrac{1}{\sqrt{2\pi }}\exp \left( -\dfrac{z^{2}}{2}\right)\sim N(0,1)\)  (標準正規分布).

と表されます。

ガウスが天文学観測データの測定誤差の研究から発見したと言われています。

テキストp121 の標準正規分布表は、この関数をもとに計算した理論確率の数表です。

9 独立な2変量データ.

相関係数を計算するには、2変量のデータ \((x,y)\) が必要です。

n <- 500#個数
x <- rnorm(n,0,1)
y <- rnorm(n,0,1)
par(mfrow=c(1,2))#1行に2つのグラフを並べる
hist(x)
hist(y)

座標平面にグラフを描くには plot( )関数を用います。

plot(x,y)

asp=1は縦横比を同じにします。colは色を指定します。

plot(x,y,asp=1,col="pink")

円状に分布し、中心の密度が高くなります。
半径3の円内にデータは集まります。

相関係数を求める関数は、cor(x,y) です。

cor(x,y) 
## [1] 0.03605161

相関係数は0に近いです。
このとき、\((x,y)\) は無相関であるといいます。

これは、x,y を別々に構成したためであり、このときx,y は独立といいます。

x,y が独立のとき、cor(x,y)=0.

10 相関のある2変量データ.

1つの変量から x,y を構成すると、相関のあるデータを構成することができます。

u を1つの変量とします。

u <- rnorm(n,0,1)
hist(u)

  • x=0.9u,y=0.8u によってデータを生成します。
x <- 0.9*u
y <- 0.8*u
plot(x,y,asp=1,col="pink")

cor(x,y)
## [1] 1

データは直線上に分布し、相関係数は1です。

誤差を加えると実際のデータに近くなります。
標準偏差 0.5 の誤差をrnorm で加えます。

x <- 0.9*u+rnorm(n,0,0.5)
y <- 0.8*u+rnorm(n,0,0.5)
plot(x,y,asp=1,col="pink")

cor(x,y)
## [1] 0.7340785

<課題>.

  • 誤差を変えると、散布図や相関係数がどう変化するか試してみましょう。

  • 係数 0.9と0.8 を変えるとどうなるか試してみましょう。
    (係数を因子負荷量といいます).

実際のデータから、係数を求める分析を因子分析といいます。

11 ゴルトンとピアソン

<Google Geminiによる説明>.

イギリスの学者フランシス・ゴルトンは、相関係数の概念の提唱者です。遺伝の研究を通じて「平均回帰(親の特徴が極端でも、子は平均に近づく現象)」を発見し、2つの変数の関係性の強さを表す指標として「相関(co-relation)」という言葉を初めて用いました。

ゴルトンの研究とアイデアは、彼の教え子であるカール・ピアソンによって数学的な計算式(ピアソンの積率相関係数)として完成されました。

<ゴルトンと相関係数>

  • 遺伝研究からの出発: ダーウィンのいとこでもあったゴルトンは、親の身長や知能などの才能が子にどのように遺伝するのかを研究していました。

  • 平均への回帰: 彼は両親の身長データを分析し、背の高い親の子供は親よりは背が低く、逆に背の低い親の子供は親より背が高くなり、どちらも「平均値」に近づく傾向(平均回帰)を発見しました。

  • 「r」の誕生:このような「2つの変数がどれくらい連動して変化するか」を表す指標に「相関」と名付け、相関係数を表す文字として現代でも使われている \(r\) を導入しました。

  • ピアソンへの継承: ゴルトンは直観や図形的なアプローチを得意としていましたが、これを現代の統計学で使われる具体的な数式として一般化したのが弟子のカール・ピアソンです。

<ゴルトンのデータ>

フランシス・ゴルトン(Francis Galton)が1886年に発表した親子の身長データセットは、近代統計学における「回帰分析(Regression Analysis)」および「相関係数」の誕生のきっかけとなった、歴史的に極めて重要なデータです。

ゴルトンは、205家族から集めた934人の子供とその親の身長を記録しました。単にそのまま比較するのではなく、性別による身長差を補正するために以下のような独自の工夫を行っています。

  • 親の身長(Mid-parent Height):父親の身長と、母親の身長に「1.08」を掛けた値(女性の身長を男性並みに補正するため)の平均値。

  • 子供の身長:娘の身長には「1.08」を掛け、息子の身長はそのまま使用。

library(HistData)
data(GaltonFamilies)
df <- as.data.frame(GaltonFamilies)
head(df)
family father mother midparentHeight children childNum gender childHeight
001 78.5 67.0 75.43 4 1 male 73.2
001 78.5 67.0 75.43 4 2 female 69.2
001 78.5 67.0 75.43 4 3 female 69.0
001 78.5 67.0 75.43 4 4 female 69.0
002 75.5 66.5 73.66 4 1 male 73.5
002 75.5 66.5 73.66 4 2 male 72.5
library(car)
scatterplot(childHeight ~ midparentHeight, data=df,ellipse=TRUE)

ゴルトンがこのデータを散布図にプロットし、親の身長と子供の身長の関係を分析したことで、以下の2つの偉大な統計学的概念が生まれました。

1.平均への回帰(Regression to the Mean)

ゴルトンは、「背の高い親からは背の高い子が生まれる」という単純な遺伝を予想していました。しかし実際のデータは、以下のような不思議な現象を示していました。

  • 非常に背の高い親から生まれた子供の平均身長は、親の身長よりも低く(全体の平均に近く)なる。

  • 非常に背の低い親から生まれた子供の平均身長は、親の身長よりも高く(全体の平均に近く)なる。

このように、極端な特徴を持つ親から生まれた子供のデータが、世代を超えると「全体の平均値へと戻っていく(退化・回帰していく)」という現象を発見し、これを「平均への回帰」と名付けました。現在、統計学や機械学習で日常的に使われている「回帰(Regression)」という言葉は、この「平均に戻る」という生物学的な現象名が語源となっています。

scatterplot(childHeight ~ midparentHeight | gender, data=df,ellipse=TRUE)

2.相関係数(Correlation Coefficient)の礎

親の身長と子供の身長の間には、完全に一致するわけではないものの、明確な連動性(一方が高ければもう一方も高い傾向)がありました。ゴルトンはこの関係性の強さを数値化しようと試み、これがのちに彼の弟子であるカール・ピアソンによって、現代の「ピアソンの積率相関係数(r)」へと数理的に体系化されることになります。