상세 컨텐츠

본문 제목

벡터 회귀분석 Vector Regression

코딩일기장/통계학

by Grip! 2021. 9. 27. 01:09

본문

 

위 회귀분석을 벡터관점에서, 파이썬을 사용해서 풀어보자

 

 

1. 데이터 정의

import numpy as np

STUDY = np.array([[21], [24], [26], [27], [29], [25], [25], [30]])
GPA = np.array([2.8, 3.4, 3.0, 3.5, 3.6, 3.0, 2.7, 3.7]).transpose()
vector8_1 = np.ones([8, 1])


A = np.hstack((vector8_1, STUDY))
A_transpose = A.transpose()

 

y(GPA)는 8x1 matrix , X(STUDY)는 8x2 matrix, b$$(\beta_{1},\beta_{2})$$는 2x1 matrix이다

 

2. OLS 가 뭐냐? 바로 $$\hat{\beta}= argmin(y-Xb)'(y-Xb) $$ 를 구하는 것이다

좀더 단순히 , y 벡터와 X 평면간의 거리를 최소화하는 지점 Xb를 찾는 것이다

어떤 지점에서 y와 A평면간의 거리가 최소화될까? 바로 y와 X가 직교하는 지점이다

그러므로 X에 의해 선형변환한 8x1 벡터 Xb를 통해 아래와 같은 식을 도출 할 수 있다

 $$ X \cdot (y-Xb) =0 $$

$$ X^{T}(y-Xb)=0$$

$$X^{T}y=X^{T}Xb$$

 

 

자 그러면 우리는 $$\beta$$를 구했다

 

여기까지의 Code

import numpy as np

STUDY = np.array([[21], [24], [26], [27], [29], [25], [25], [30]])
GPA = np.array([2.8, 3.4, 3.0, 3.5, 3.6, 3.0, 2.7, 3.7]).transpose()
vector8_1 = np.ones([8, 1])


A = np.hstack((vector8_1, STUDY))
A_transpose = A.transpose()

# Beta_hat = (A'A)^-1 A'b, (X'X)^-1X'b,
temp = np.linalg.inv(np.dot(A_transpose, A))
temp = np.dot(temp, A_transpose)
Beta = np.dot(temp, GPA)
print(Beta)

 

 

 

3. $$\hat{Y} $$ 구하기

위에서 구한 $$\beta$$를, X로 선형변환시켜주면 $$\hat{Y} $$ 이 구해진다

 

code

import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
STUDY = np.array([[21], [24], [26], [27], [29], [25], [25], [30]])
GPA = np.array([2.8, 3.4, 3.0, 3.5, 3.6, 3.0, 2.7, 3.7]).transpose()
vector8_1 = np.ones([8, 1])


A = np.hstack((vector8_1, STUDY))
A_transpose = A.transpose()

# Beta_hat = (A'A)^-1 A'b, (X'X)^-1X'b,
temp = np.linalg.inv(np.dot(A_transpose, A))
temp = np.dot(temp, A_transpose)
Beta = np.dot(temp, GPA)
# print(Beta)

# GPA_hat
GPA_hat = np.dot(A, Beta)
# print(GPA_hat)
residual = GPA-GPA_hat
# print(residual)


# DRAW DATA
ols = linear_model.LinearRegression()
model = ols.fit(STUDY, GPA)
GPA_TEST = np.linspace(20, 31, 100).reshape(-1, 1)  # 2D ARRAY
GPA_predict = ols.predict(GPA_TEST)

plt.scatter(STUDY[:], GPA[:])
plt.plot(GPA_TEST, GPA_predict, color='blue')
plt.show()

# USE
# temp = np.linalg.inv(np.dot(A_transpose, A))  # (AT A)-1
# temp = np.dot(A, temp)
# temp = np.dot(temp, A_transpose)
# GPA_hat = np.dot(temp, GPA)

 

 

Drawing

 

 

 

Reference: 서강대 남준우 교수 계량경제학 수업, 허준영 교수 경기변동론 수업, https://heung-bae-lee.github.io/2020/06/09/linear_algebra_06/

 

'코딩일기장 > 통계학' 카테고리의 다른 글

Moment와 Moment generating function  (0) 2021.10.05
Jensen Inequality  (0) 2021.10.05
Markov Inequality, Chebyshev Inequality  (0) 2021.10.05
회귀분석 Regression Analysis (2)  (0) 2021.09.14
회귀분석 Regression Analysis (1)  (0) 2021.07.29

관련글 더보기

댓글 영역