
書記が数学やるだけ#461 単回帰分析の計算-1
単回帰分析について過去何度か扱ってきた中では,実データの計算は統計ソフトに任せていた。今回は公式の導出から実データの計算までをまとめて行うことにする。
問題
解答
以前の結果:
まずは回帰式の導出から。残差平方和の最小化として,正規方程式を解く。
次に平方和分解について。
寄与率を求める。
今度は行列で考えてみる。ベクトル・行列の微分を用いて正規方程式を立てる。
これより回帰式,残差平方和などが求められる。
手計算といっても,電卓のみでは追いつかないのでPythonのNumpyを用い,statsmodelsやscipyの関数をできるだけ用いないで書いてみる。
# ライブラリの読み込み
import numpy as np
import pandas as pd
import scipy as sp
import statsmodels
import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
import seaborn as sns
# データの読み込み,予め用意しているものとする
data = pd.read_csv('回帰分析-1.csv')
data回帰式の導出。
#回帰式の導出
n=len(data)
x_sum=data['HEIGHT'].sum()
x_bar=x_sum/n
y_sum=data['VOLUME'].sum()
y_bar=y_sum/n
s_xy=(data['HEIGHT']*data['VOLUME']).sum() - (x_sum*y_sum)/n
s_xx=(data['HEIGHT']**2).sum() - (x_sum**2)/n
s_yy=(data['VOLUME']**2).sum() - (y_sum**2)/n
beta1=s_xy/s_xx
beta0=y_bar-beta1*x_bar
beta1_str = beta1.astype('str')
beta0_str = beta0.astype('str')
y_hat=beta0_str+"+"+beta1_str+"x"
y_hat'-87.12361353885379+1.5433497536945957x'
寄与率の導出。
#寄与率の導出
S_R=beta1*s_xy
R2=S_R/s_yy
S_e=s_yy-S_R
R2a=1-(S_e/(n-2)/(s_yy/(n-1)))
print(“寄与率=”R2a)寄与率= 0.33576135804306373
本記事のもくじはこちら:






