オオハタの研究ノート

考えたこととか勉強したこととか、書いていきます。

相関係数観察日記

相関係数は次のように定義される量です。

r = \frac{s_{xy}}{s_x s_y}

ここで、 s_x = \sqrt{\frac{1}{n}\sum_{i=1}^{n} (x_i - \bar{x})^{2}} , s_y = \sqrt{\frac{1}{n}\sum_{i=1}^{n} (y_i - \bar{y})^{2}} , s_{xy} = \frac{1}{n}\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y}) とします。x の分散、y の分散、x と y の共分散です。

2つの量がどれだけ直線的な関係を持っているかを表す指標になります。 共分散とは異なり、データの大きさに影響されません。

相関係数は2つの量に関係があるかを表す指標ではなく、2つの量に直線的な関係があるかを表す指標です。 強い条件なので相関係数0でも互いに関係していることはあります。

ベクトルとしてみる


  \boldsymbol{u} = \left(
    \begin{array}{c}
      x_1 -\bar{x}\\
      x_2 -\bar{x}\\
      \vdots \\
      x_n -\bar{x}
    \end{array}
  \right)
,
  \boldsymbol{v} = \left(
    \begin{array}{c}
      y_1 -\bar{y}\\
      y_2 -\bar{y}\\
      \vdots \\
      y_n -\bar{y}
    \end{array}
  \right)

各要素が各データの平均からのズレを表すベクトル\boldsymbol{u},\boldsymbol{v}を考えると、


s_x = \frac{1}{\sqrt{n}}|\boldsymbol{u}| , \\
s_v = \frac{1}{\sqrt{n}}|\boldsymbol{v}| , \\
s_{xy} = \frac{1}{n}\boldsymbol{u} \cdot \boldsymbol{v}

であることがわかります。すると相関係数は、

 r = \frac{\boldsymbol{u} \cdot \boldsymbol{v}}{|\boldsymbol{u}||\boldsymbol{v}|}

内積の定義を思い出してもらうとこれは\boldsymbol{u}\boldsymbol{v}のなす角の\cosであると捉えることがでかます

相関係数は平均からのズレを表すベクトルのなす角の\cos

これだと値が-1 \leq r \leq 1もすぐわかります。

観察

r=1つまりとても強い正の相関があるときを考えてみます。
 r = \frac{\boldsymbol{u} \cdot \boldsymbol{v}}{|\boldsymbol{u}||\boldsymbol{v}|} = 1
より2つのベクトルのなす角は0です。 つまり、同じ向きで平行であるといえます。

また同じ向きで平行なとき、次の式が成り立ちます。
 \frac{x_1 - \bar{x}}{y_1 - \bar{y}} =\frac{x_2 - \bar{x}}{y_2 - \bar{y}}= \dots =\frac{x_n - \bar{x}}{y_n - \bar{y}} (> 0)
これは x の平均からのズレが大きい時に y も平均からのズレが大きく、x_iの平均からのズレが小さい時にy_iも平均からのズレが小さい、と読むことができます。

同じ向きなので\frac{x_i - \bar{x}}{y_i - \bar{y}}は正になるので互いに同符号です。 つまり、x_iが平均よりプラスの場合はy_iも平均よりプラスで、x_iが平均よりマイナスの場合はy_iも平均よりマイナス。であるといえます。 これは正の相関があるということに他ならないです。

正の相関があることからベクトルが平行であること ベクトルが平行であることから正の相関があること を確認しました。

ざっくりいえば

各要素が各データの平均からのズレを表すベクトル\boldsymbol{u},\boldsymbol{v}を考えると、 相関係数はこのベクトルのなす角のcos

また\cosは2つのベクトルがどのくらい同じ向きかを表す指標と捉えることができるので 平均からのズレ方が似ている(正の相関がある)なら1に近づきます。

標準化された量の積の平均(期待値)として見る

s_{xy}を定義に従い代入すると以下のようになります。
 r = \frac{s_{xy}}{s_x s_y} = \frac{1}{n}\sum_{i=1}^n (\frac{x_i - \bar{x}}{s_x})(\frac{y_i - \bar{y}}{s_y})

\frac{x_i - \bar{x}}{s_x}という部分はよく見ると、 標準化しています。標準化とは、平均を0、分散を1にする変換のことです。

この標準化の部分が相関係数の元データの大きさによらないを作り出しています。 (ベクトルのなす角に注目するのも同じです。)

相関係数は標準化した 2 量の積の平均(期待値)であるといえます。

観察

標準化した 2 量の平均が正だったとき、これは「だいたいこの 2 量は符号をともにすることが多い」といえます。増加、減少を同じようにするということで、それは正の相関があるということです。

負であれば逆で異符号になりやすい、片方が増加しているときにもう一方は減少している。ということになります。

つぶやき。

個人的には 2 つ目の「標準化した 2 量の積の期待値」と見るやり方が今の所好きです。 だいたい、積の符号はこうなるのかーなら相関は〜ってなりやすい気もします。

JuliaPro で IJuali を追加できない。

概要。

JuliaPro をインストール後、 https://pkg.juliacomputing.com/ にアクセスして token.toml をダウンロード。 ~/.juliapro/に入れれば OK。

以下長いです。

Julia っていうのが良い感じだということを聞きつけまして、 IJulia を試そうと https://juliacomputing.com/products/juliapro.html から Linux 向けのやつをダウンロード。 一応、クイッガイドも。

Prerequisites for Installation on Ubuntuを確認。

sudo apt-get -y install xclip
sudo apt-get -y install libgconf-2-4

次は sh にパーミッションを与える。

chmod 777 JuliaPro-1.0.2.1_build-441.sh

この部分、クイッガイドにはこう書いてある。

chmod 777 JuliaPro-1.0.2.1.sh

なんか名前違うんだけど。。。

インストール先のパスを指定できるので~/Julia にしておく

$./JuliaPro-1.0.2.1_build-441.sh /home/username/Julia

満を持して起動。

$cd ~/Julia/JuliaPro-1.0.2.1
$./Launch_JuliaPro

JuliaREPL のところで Enter をすとサイトが開いて、登録するらしいのだが起動せす。 ファイル名も違ってるクイックガイドたしまあ無視するか(ここが悪かった!!) ということで REPL にて]をして add IJulia するとエラーに。

(JuliaPro_v1.0.2.1) pkg> add IJulia
Updating registry at ~/.juliapro/registries/JuliaPro
Updating git-repo https://pkg.juliacomputing.com/registry/JuliaPro
ERROR: MethodError: no method matching display(::MIME{Symbol("application/prs.juno.jlpane")}, ::TokenManager.AuthWindow)

検索してもでてこず終わる。 再インストールとか試すも効果なし。 もうどうしようもなくクイックガイドを読んでいると

  1. Using JuliaPro in a non-GUI environment
    By default, JuliaPro will download all the packages from https://pkg.juliacomputing.com/
    , this website requires authentication

とあった。authentication?えっ

hence, you have to download token.toml
file to authenticate any requests from your JuliaPro installation to the server.
This file can be downloaded by visiting following website in your browser
https://pkg.juliacomputing.com/

これか!登録って必要なんた。。。 そういえば Token とか Auth とか書いてある。。

(JuliaPro_v1.0.2.1) pkg> add IJulia
Updating registry at ~/.juliapro/registries/JuliaPro
Updating git-repo https://pkg.juliacomputing.com/registry/JuliaPro
ERROR: MethodError: no method matching display(::MIME{Symbol("application/prs.juno.jlpane")}, ::TokenManager.AuthWindow)

わからんよ。

Once you have token.toml , you can move this file to the machine where you have
installed JuliaPro, the default location to place this file is ~/.julia/token.toml

てなわけで token.toml をダウロードして下記にぶち込む。 ~/.julia/token.toml

はあやっとだよ。

そして再びのエラー!!!

(JuliaPro_v1.0.2.1) pkg> add IJulia
Updating registry at ~/.juliapro/registries/JuliaPro
Updating git-repo https://pkg.juliacomputing.com/registry/JuliaPro
ERROR: MethodError: no method matching display(::MIME{Symbol("application/prs.juno.jlpane")}, ::TokenManager.AuthWindow)

もうわけわからんと諦めていた。 それでもクイックガイドの最後の方にこんな記述が。

you can always change
the default location by editing following file (Please take a backup before editing this file)
vi JuliaPro-1.0.2.1/Julia/etc/julia/startup.jl
In startup.jl, we are assigning the default location for token.toml using
following line
ENV["JULIA_PKG_TOKEN_PATH"] = joinpath(homedir(),".julia","token.toml")

なるほどこれでトークン指定できるのね。とりあえず確認。

$ cat startup.jl | grep TOKEN
ENV["JULIA_PKG_TOKEN_PATH"] = joinpath(homedir(),".juliapro","token.toml")

???

joinpath(homedir(),".juliapro","token.toml")

って~/.juliapro/token.toml じゃん。

Once you have token.toml , you can move this file to the machine where you have
installed JuliaPro, the default location to place this file is ~/.julia/token.toml

クイックガイド!適当なこと書かんでくれ〜。 ~/.juliapro/にトークンをコピーし、

add IJulia

$jupyter notebook

にて確認できました。

f:id:KenjiOhata:20190130004824p:plain

めでたしめでたし。

うーん。登録制を甘く見てたのが悪かったのかな。それにしてもガイドが不親切だったし、サイトも自動で開かなかったしな。。

MoSyaMoSyaを公開します!

この記事は群馬大学電子計算機研究会 IGGG Advent Calendar 2018 - Adventar 23日目の記事です。

やったぜ!

長いことかかりました。なんとなくWebアプリをつくってみようと思ってから何ヶ月か。 だらだらしてたのもあるんですが。

なんとなく形にできたのが嬉しいです。

作ったのはこれ

Home -MoSyaMoSya

絵の模写をするときにグリットだしたり白黒にしたりします。

Python Flask Pure.cssなんかを使いました。

やってないぜ!

SPAっぽくしようと思ってJavaScriptに手を出していました。 ホントはこっちを完成させて公開したかったんですけど。。今の今まで不具合が治らなくて。。。 見送りです。ほんとつらい。 というか日本語にしてないのも。。

バージョンアップは近日公開します!