データの読み込み
-
家賃のデータを使ってみましょう。
-
注意! 以下のコードでは、Python 2 のノートブックでは正しく動きません。必ず、Python 3 のノートブックを使ってください。
# URL によるリソースへのアクセスを提供するライブラリをインポートする。
import urllib.request
# 図やグラフを図示するためのライブラリをインポートする。
import matplotlib.pyplot as plt
%matplotlib inline
# ウェブ上のリソースを指定する
url = 'https://raw.githubusercontent.com/maskot1977/Statistics2017/master/home.txt'
# 指定したURLからリソースをダウンロードし、名前をつける。
urllib.request.urlretrieve(url, 'home.txt')
# ファイル読み込みと出力
for line in open("home.txt"):
print(line)
Y = []
X = []
for line in open("home.txt"):
c = line.split()
print(c)
Y = []
X = []
for line in open("home.txt"):
c = line.split()
Y.append(c[0])
X.append(c[1])
print(X)
print(Y)
Y = []
X = []
for index, line in enumerate(open("home.txt")):
if index == 0:
continue
c = line.split()
Y.append(float(c[0]))
X.append(float(c[1]))
print(X)
print(Y)
データの図示
%matplotlib inline
plt.scatter(X, Y)
%matplotlib inline
plt.scatter(X, Y)
plt.xlabel("Walking distance (min)")
plt.ylabel("Rent (yen)")
plt.grid()
plt.show()
- 参考資料(Pythonのインデントについて)
線形単回帰
平均値
# 平均値を求める関数を作ろう
def mean(list_):
print(mean(X))
print(mean(Y))
分散
# 分散を求める関数を作ろう
def variance(list_):
print(variance(X))
print(variance(Y))
標準偏差
# 標準偏差を求める関数を作ろう
import math
def standard_deviation(list_):
print(standard_deviation(X))
print(standard_deviation(Y))
共分散
# 共分散 = 偏差積の平均 (偏差値、ではありません。偏差積、です)を作ろう
def covariance(list1, list2):
print(covariance(X, Y))
相関係数
# 相関係数 = 共分散を list1, list2 の標準偏差で割ったものを作ろう
def correlation(list1, list2):
print(correlation(X, Y))
回帰直線
# 回帰直線の傾き=相関係数*((yの標準偏差)/(xの標準偏差))を求める関数を作ろう
def a_fit(xlist, ylist):
print(a_fit(X, Y))
# y切片=yの平均-(傾き*xの平均)を求める関数を作ろう
def b_fit(xlist, ylist):
print(b_fit(X, Y))
# 回帰直線の式を表示
print("y = f(x) = {0} x + {1}".format(a_fit(X, Y), b_fit(X, Y)))
線形重回帰
線形単回帰では、「徒歩何分」から「家賃」を求めました。 線形重回帰では、「徒歩何分」と「広さ何m2」から「家賃」を求めてみましょう。
Y = []
X1 = []
X2 = []
for index, line in enumerate(open("home.txt")):
if index == 0:
continue
c = line.split()
Y.append(float(c[0]))
X1.append(float(c[1]))
X2.append(float(c[2]))
- a の影響を除いた、b と y の 偏回帰係数 = (rby - (ray rab)) σy / ((1 - rab2) σb)
- ただし r は相関係数、 σ は標準偏差とする。
# a の影響を除いた、b と y の偏回帰係数 partial regression coefficient を求める関数を作ろう
def partial_regression(A, B, Y):
# 定数 w1 = (x2 の影響を除いた、x1 と y の偏回帰係数)
w1 = partial_regression(X2, X1, Y)
# 定数 w2 = (x1 の影響を除いた、x2 と y の偏回帰係数)
w2 = partial_regression(X1, X2, Y)
# 定数 t = yの平均 - w1*「x1の平均」 - w2*「x2の平均」
# 回帰直線の式を表示
print("y = f(x) = {0} X1 + {1} X2 + {2}".format(w1, w2, t))