散布図と回帰直線
変数の対の散布図と回帰直線
の描画を行う。回帰直線の係数は
の誤差の2乗和
を最小にするものとして求める。
いま、
とおけば、式(1)は
と書くことができる。このとき、誤差の平方和を最小にするパラメータ値は次式で与えられる(岡本、2009、p.26)。
ここで、はのムーア・ペンローズ逆行列である。
Spiegelhalter(2019), p. xviに記載されているウェブサイトからダウンロードしたRスクリプトとファイルを参考・利用して、リスト1に示す散布図と回帰直線を描くPythonスクリプトを書いてみた。入力ファイル05-1-galton-x.csvは、Spiegelhalter(2019), p. xviに記載されているウェブサイトからダウンロードしたものである。
リスト1を実行すると、散布図と回帰直線のグラフが表示される(図1)。
図1
縦の橙色破線は、残差の例である。この2例は、Spiegelhalter(2019), p. xviに記載されているウェブサイトからダウンロードしたRスクリプト例で扱われているものである。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# The data file downloaded
from Spiegelhalter(2019)'s website
d_csv =
pd.read_csv('05-1-galton-x.csv')
Father = d_csv['Father'] # Father's height
Gender = d_csv['Gender'] # Child's gender
Height = d_csv['Height'] # Child's height
Father_son = Father[Gender=='M']
Height_son = Height[Gender=='M']
n = len(Father_son)
X = np.concatenate((np.ones((n,1)),
np.reshape(Father_son, (n, 1))), axis=1)
b = np.linalg.pinv(X) @
np.reshape(Height_son, (n, 1))
print('b =\n', b)
def regression(v): # Regression line
return b[0] + b[1] * v
plt.figure(figsize=(7,5))
for i in range(len(Father_son)):
# No jitter added
plt.plot(Father_son.values[i], Height_son.values[i], 'o', c='k',
markersize=10, fillstyle='none' )
plt.plot([55, 80],[55, 80], ls='--')
plt.plot([np.min(Father_son),
np.max(Father_son)],
[regression(np.min(Father_son)), regression(np.max(Father_son))],
lw=3)
#
# Arbitrary
selection of two points by Spiegelhalter (2019)
#
pointA_F = Father_son.values[137-1]
pointA_H = Height_son.values[137-1]
pointB_F = Father_son.values[28-1]
pointB_H = Height_son.values[28-1]
#
Show residuals
plt.vlines(pointA_F, pointA_H,
regression(pointA_F), ls='--', lw=2, color='m')
plt.vlines(pointB_F, pointB_H,
regression(pointB_F), ls='--', lw=2, color='m')
plt.xlabel("Father's height
(inches)", fontsize=14)
plt.ylabel("Son's height
(inches)", fontsize=14)
plt.tight_layout()
plt.show()
岡本安晴(2009) 統計学を学ぶための数学入門[下].培風館
岡本安晴(2019) いまさら聞けないPythonでデータ分析.丸善出版
Spiegelhalter, D. (2019). The art of statistics: Learning from data. Pelican