社会人が統計学の基礎を学び、実務で活かす

Pythonで線形回帰分析(単回帰、重回帰)を行う方法 (Pythonによる統計学入門)

スポンサーサーチ

Pythonを用いて線形回帰分析(単回帰、重回帰)を行う

今回は、Pythonを用いて線形回帰を行う方法をご紹介します。

回帰分析は、統計学的モデリングの最も基本的なもので、
Pythonを用いて簡単に実行することができます。

回帰分析では、説明変数応答変数の直線的な関係をモデリングします。

1つの説明変数を統計モデルに含む場合には「単回帰分析」、
2つ以上の説明変数を含む場合は「重回帰分析」と呼びます。

【目次】
利用するデータセット
データの読み込み
散布図を描いてデータをチェック
Pythonによる単回帰分析
Pythonによる重回帰分析

利用するデータセット

今回は、以下の
Applied Linear Statistical Models
の中で例として挙げられているデータセットを利用します。

なお、この教科書は約1400ページあり、実用的な線形モデルの使い方から、
統計学の数学的理論まで含めてガッチリと解説されているので、
網羅的に学習したい方にはオススメです。

ちなみに以下のリンクからpdfバージョンを見る事もできます。
https://mysite.science.uottawa.ca/rkulik/mat3378/mat3378-textbook.pdf

今回利用するデータは以下のページで公開されています。
線形回帰練習用データ

データの読み込み

さて、Pythonでデータを読み込み分析をするために、
以下のようにライブラリを読み込みます。

import os # ディレクトリを設定するためのライブラリ
import pandas as pd # Pythonでデータフレームを扱う(panda package)
import statsmodels.formula.api as sm # 回帰分析のライブラリ
import seaborn # 散布図に回帰直線を引くライブラリ

今回は、データファイルをdata.csv、変数の名前をそれぞれ
X1, X2, Yと名付けました。

以下のようにpandasライブラリのread_csv関数を用いてデータを読み込みます。

# CSV形式のデータを読み込む
mydata = pd.read_csv('ファイルのパス/data.csv', delim_whitespace=True)

散布図を描いてデータをチェック

線形回帰分析では、説明変数と応答変数が直線的な関係があると考えて
モデル構築をするケースが多いので、

ここでは散布図を描いて各説明変数(X1,X2)と応答変数(Y)の
関係を視覚的に見てみます。

Pandasライブラリを利用して以下のように
散布図を描くことができます。

# pandasライブラリを利用して散布図を描く
mydata.plot.scatter(x='X1', y='Y', title='X1 vs Y')
mydata.plot.scatter(x='X2', y='Y', title='X2 vs Y')


散布図を見るとX1もX2も両方ともYと直線的な関係があることが分かります。

それでは、単回帰分析と重回帰分析を行っていきましょう。

Pythonによる単回帰分析

単回帰分析では説明変数は一つです。X1とYの関係、X2とYの関係を
それぞれ以下のモデルで表します。

単回帰モデル1: Y = \beta_{0} + \beta_{1}X_{1} + \epsilon

単回帰モデル2:Y = \beta_{0} + \beta_{1}X_{2} + \epsilon

それでは早速、Pythonを利用して単回帰分析を行います。

# 単回帰モデル1
SLR1 = sm.ols(formula="Y ~ X1", data=mydata).fit()
print(SLR1.summary())

# 単回帰モデル2
SLR2 = sm.ols(formula="Y ~ X2", data=mydata).fit()
print(SLR2.summary())

単回帰モデル1の分析結果

X1の行のP値(P>|t|)は0.000となり、非常に小さいのでこの単回帰モデル1において説明変数X1の効果は統計的に有意であると言えます。

また、回帰係数\beta_1の95%の信頼区間は[1.529, 2.142]となります。

散布図上に回帰直線を引きたい場合は以下のコードで可能です。

# 散布図に回帰直線を入れる
seaborn.lmplot(x='X1',y='Y',data=mydata,fit_reg=True) 

単回帰モデル2も全く同じように分析できますので、
ぜひ、試して見てください。

Pythonによる重回帰分析

重回帰分析では2つ以上の説明変数と、
応答変数の関係をモデリングします。

今回は以下のようにモデルを構築してみます。

重回帰モデル: Y = \beta_{0} + \beta_{1}X_{1} + \beta_{2}X_{2} + \epsilon

それでは、重回帰分析のモデルを実装します。

# 重回帰分析
MLR = sm.ols(formula="Y ~ X1 + X2", data=mydata).fit()
print(MLR.summary())

X1の行のP値が0.000, X2の行のP値が0.033となり、
この重回帰分析モデルにおいて、どちらの変数も
有意な効果があると言えます。

※この記事を書くのに参考にしたページ

– pandas.read_csv
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

https://www.statsmodels.org/stable/index.html


プログラミングとソフトウェア

スポンサー募集中。

統計ドットリンクでは広告出稿をご希望のスポンサー様を募集しております。ページビューなどは、「お問い合わせ」からご連絡ください。

更新・勉強会などの情報を受け取る。

以下からFacebookページをフォローもしくは、メールマガジンへの登録をすると、更新情報、勉強会、講習会、交流会の案内など各種情報を受け取ることができます。

↑こちらからFacebookページをフォロー。
 

メルマガ登録はこちら

理系の就職・職業訓練

統計ドットリンクでは、理系の大学生、大学院生、第二新卒の就職や転職を応援しています。職業訓練、求人やエージェントなどの必要な情報を選別し、紹介しています。 就職、職業訓練の情報を確認する。
PAGETOP
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.