【Pythonデータ解析】臨床研究のための医学統計入門

この記事をシェアする

 

はじめに

今回はPythonで医療統計を行う際に必要な要約統計量の求め方を記事にしたいと思います。

今回もJupyter-Notebookを使用します。

Pythonで統計指標を求めるには、基本的に

Pythonの標準ライブラリであるstatisticsモジュール

サードパーティ製パッケージであるscipyモジュール

のどちらかです。

statisticsよりはscipyの方が良く使われると思うので、scipyの使い方を良く学習する必要があると思います。

 

乱数を発生させる時も

Pythonの標準ライブラリであるrandomモジュール

サードパーティ製パッケージであるnumpyモジュールのrandomメソッド

の2パターンあります。

Numpyは良く使用するので、基本的にnumpyのrandomで乱数を発生させた方が混乱しなくて済む気がします。

 

Jupyter-Notebookを起動させよう

 

必要なライブラリのインポート!

f:id:Medicmed:20180605230526p:plain

最初に記述する”おまじない”的なやつです。

そのうち慣れます。

 

標準ライブラリrandom/statisticsモジュールで要約統計量を求める!

 

f:id:Medicmed:20180605230551p:plain

まずrandomモジュールを使用して乱数を発生させます。

作成したデータをsample1という変数に格納します。

 

平均値を求める!

f:id:Medicmed:20180605230618p:plain

mean()メソッド使用すると平均値を求めることができます。

 

中央値を求める!

f:id:Medicmed:20180605230644p:plain

median()メソッド使用して中央値を求めることができます。

 

母集団の分散を求める!

f:id:Medicmed:20180605230715p:plain

母分散を求めるにはpvariance()メソッドを使用します。

pはpopulationの略です。

 

母集団の標準偏差を求める!

f:id:Medicmed:20180605230737p:plain

pstdev()メソッドを使用すると母集団の標準偏差を求めることができます。

 

不偏分散(標本分散)を求める!

f:id:Medicmed:20180605230759p:plain

variance()メソッドを使用して標本分散を求めます。

 

標本標準偏差を求める!

f:id:Medicmed:20180605230826p:plain

標本標準偏差(sample standard deviation)を求めるには、stdev()メソッドを使用します。

不偏分散の平方根のことを標本標準偏差と呼びますが、「不偏標準偏差」と表記されていることもあるので注意が必要です。

Wikipediaによると「不偏標準偏差」という用語の定義には諸説あるみたいなので、基本的には「標本標準偏差」として覚えた方が良いと思います。

標準偏差 - Wikipedia

 

「不偏分散」と「標本分散」と同じ扱いにしていますが、東京大学出版会の「統計学入門」でも同じ扱いでした。

統計学入門 (基礎統計学?)

統計学入門 (基礎統計学?)

 

標本のデータ個数で割っている分散のことを本文中では

’不偏でない’(偏りのある)標本分散である

引用:本文P184

 

と表現しています。

ですので、基本的に「不偏分散」=「標本分散」と理解して良いと思います。

 

Numpyのrandomとscipyで要約統計量を求める!

 

基本的には同じ手順です。

f:id:Medicmed:20180605230905p:plain

ぜひ参考にしてみてください。

 

多変量データの管理

 

いくつかのデータを扱う時には、サードパーティ製モジュールであるPandasのDataFrameを使用すると便利です。

作成した"sample1"と"sample2"をPandasのデータフレームに変形します。

 

PandasのDataFrameに変形する!

f:id:Medicmed:20180605231410p:plain

リストにsample1とsample2を入れてDataFrameに変形するとこのような形になります。

 データフレームの形にすると、グループ別の要約統計量を簡単にもとめることができます。

 

describe()を使用するとグループ別の要約統計量をもとめることができる!

f:id:Medicmed:20180605232214p:plain

describe()メソッドを使用するとグループ別の主要な要約統計量を簡単にもとめることができます。

ただ今回の場合、列ごとに要約統計量を出しているため本来欲しかった情報ではありません。

 

転置という行列変換をする!

f:id:Medicmed:20180605232525p:plain

f:id:Medicmed:20180605232604p:plain

今回はdescribe()メソッドを使用して本来欲しかったグループ別の要約統計量を表示できました。

 

次は、「共分散」と「分散共分散行列」を求めていきたいと思います。

 

共分散と分散共分散行列を求める!

 

共分散はNumpyのcov()を使用して求める!

f:id:Medicmed:20180605235625p:plain

共分散を求めることができました。

 

次にnumpyとscipyそれぞれで分散共分散行列を求めていきます。

 

分散共分散行列を求める!

f:id:Medicmed:20180606001917p:plain

デフォルトではbias=0となっており、不偏分散(偏りがない)を求める設定になっています。

 

相関係数(ピアソンの積率相関係数)を求める!

 

ピアソンの積率相関係数は俗に言う「相関係数」のことです。

特に気にしなくて大丈夫です。

ピアソンの積率相関係数は単に

共分散を標準化したもの

です。

共分散では単位系の影響を受けるため、比較ができません。

そのため尺度を統一する必要があり、標準化したものが相関係数です。

相関係数の求め方ですが、numpyとscipyそれぞれで求めることが可能です。

 

corrcoef()でnumpyとscipyそれぞれで相関係数を出せる!

f:id:Medicmed:20180606003835p:plain

相関行列の形で表示されます。

相関係数は「0.1」です。

 

ぜひ参考にしてみてください。

終わり。

 

 

今回参考にした書籍はコチラ!
やさしいPython (「やさしい」シリーズ)
 
Pythonで学ぶあたらしい統計学の教科書

Pythonで学ぶあたらしい統計学の教科書

 

 

 

 

医学統計を行うために必要なPythonの入門記事! 

www.medicalmed.press

www.medicalmed.press

www.medicalmed.press

www.medicalmed.press

www.medicalmed.press

www.medicalmed.press

 

 

 

プログラミングで実践する医療統計!

www.medicalmed.press

www.medicalmed.press

 

www.medicalmed.press

 

 

 

 統計学を本格的に勉強したい人向け!

www.medicalmed.press

www.medicalmed.press