Help us understand the problem. What is going on with this article?

【Python演習】線形単回帰・線形重回帰

データの読み込み

# 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()

線形単回帰

平均値

# 平均値を求める関数を作ろう
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))
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away