Python & R: 確率分布をグラフに, R, vistributions, python, numpy ver. 5

I.vistributionsについて

 

vistributionsは確率分布をグラフにするライブラリです。

 

Visually explore Probability Distributions with vistributions

 

以前に正規分布を説明するグラフの描き方を紹介しました。

 

Statistics:正規分布のグラフ, R

 

vistributionsを使うと次のように簡単にグラフを描くことができます。これまでの苦労はなんだったんだと思ってしまうほど簡単に美しく描けます。

学生に教えるのに便利です。

 

II.正規分布の色分けグラフ

 

library(vistributions)
vdist_normal_plot(mean = 0, sd = 2)
 

 

 

平均0、標準偏差2の正規分布のグラフを平均より両側標準偏差の1倍、2倍の68%部分、95%部分が色分けされます。

 

III.正規分布の分布割合入りグラフ

 

vdist_normal_perc(0.95, 60, 3, 'both') 

 

 

平均60、標準偏差3の60+-6の分布の分布割合を上部に書き込みます。

 

IV.カイ二乗分布

 

なんと、χ2分布もdf(degrees of freedom「自由度」)を入れるだけで簡単に描けます。

ちなみに、χ2分布は統計を勉強すると、統計的検定のところで出会います。「エックスの二乗じゃないの?ああ、ギリシャ語ね、で、カイの二乗、難しそう?」という感じになりますが、検定のことはおいておいて、グラフとして難しいものではありません。

 

1.Standard normal distribution

 

まず、標準正規分布を描きます。標準正規分布は平均0、標準偏差1の分布です。例えば1000個の数字なら、平均は0で、-1から+1の間に680個の数字があり、−2から+2の間に950個の数字があるという分布になります。

 

vdist_normal_plot(mean = 0, sd = 1) 

 

 

標準偏差に従ってこのような特徴があるのは不思議ですが、19世紀のドイツの数学者ガウスが測定誤差が正規分布に従うことを発見し、正規分布のこのような特徴を明らかにしました。発見者にちなんで、正規分布をガウス分布とも呼びます。

もちろん、全ての分布が正規分布になるわけではありませんが、この形の分布になるものが意外にたくさんあって、例えば、人の身長とか学力試験などはこのような形になります。ただし、体重は正規分布しないことが知られています、、、でも、正規分布するとされていることも多いのはなぜ?

実際のところ、私のクラスの試験結果が正規分布することはまずありません。二つの山があったり、高得点に偏っていたりします。

このことからわかるのは、クラスのメンバーの学力が偏っているか、試験問題が実力を反映しないものである、あるいは、その両方であるということです。試験結果が正規分布に従うと考えられることからそう推測できるのです。

 

2.自由度1のχ2分布

 

1の標準正規分布するそれぞれの数を2乗して、その頻度をグラフにします。すべて正の数になります。たった1行の式で描けます。

 

vdist_chisquare_plot(df = 1) 

 

 

V.乱数で標準正規分布とカイ二乗分布の関係を確認(Python編)

 

標準正規分布に従う乱数のそれぞそれを2乗した数の分布がカイ2乗分布です。

実際に標準正規分布に従う乱数をつくって、それぞれを2乗してプロットすればカイ2乗分布になります。

Pythonを使って非常にわかりやすく解説されてるページがありました。私の場合バージョンの関係でエラーがでましたので、一部スクリプトを変えて紹介しますが、すべて下の文書のスクリプトに従っています。

 

【統計学】正規分布とカイ二乗分布の関係を可視化してみる。

 

次の警告がでました。

 

 

修正すると下のように警告はなくなりました。

標準正規分布(平均1、標準偏差1)にしたがう30000万個の数をつくりプロットします。当然ですが、きれいな正規分布の形になります。

 

 

上で作成した乱数をそれぞれ2乗してプロットすると、自由度1のカイ2乗分布のグラフが作成されました。

 

 

VI.乱数で標準正規分布とカイ二乗分布の関係を確認(R編)

 

次に乱数を用いた正規分布、カイ二乗分布、t分布のグラフの描き方があります。詳しくわかりやすく書かれています。

 

Normal, Chi Square, and t Distributions

 

以下のスクリプトは上の文書で紹介されているスクリプトの説明です。一部変更しているところもあります。

 

 

 

 

# generate the random numbers
set.seed(1234)
vector <- rnorm(1e5)
x
mean(x)
sd(x)
# plot histogram
hist(x, freq=FALSE, breaks=50)
curve(dnorm(x), col="red", add=TRUE)
# plot the x^2 histogram with the 1-df chi-square curve
hist(x^2, freq=FALSE, breaks=200, xlim=c(0,5))
curve(dchisq(x,1),col="red",add=TRUE)
 

 

to be continued

 

Please follow and like us:

About shibatau

I was born and grown up in Kyoto. I studied western philosophy at the University and specialized in analytic philosophy, especially Ludwig Wittgenstein at the postgraduate school. I'm interested in new technology, especially machine learning and have been learning R language for two years and began to learn Python last summer. Listening toParamore, Sia, Amazarashi and MIyuki Nakajima. Favorite movies I've recently seen: "FREEHELD". Favorite actors and actresses: Anthony Hopkins, Denzel Washington, Ellen Page, Meryl Streep, Mia Wasikowska and Robert DeNiro. Favorite books: Fyodor Mikhailovich Dostoyevsky, "The Karamazov Brothers", Shinran, "Lamentations of Divergences". Favorite phrase: Salvation by Faith. Twitter: @shibatau

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.