メインコンテンツへスキップ
見出し画像

書記が数学やるだけ#461 単回帰分析の計算-1

    単回帰分析について過去何度か扱ってきた中では,実データの計算は統計ソフトに任せていた。今回は公式の導出から実データの計算までをまとめて行うことにする。


    問題

    スクリーンショット 2022-07-12 17.35.58


    解答

    以前の結果:


    まずは回帰式の導出から。残差平方和の最小化として,正規方程式を解く。

    数学やるだけ解答#461_page-0001


    数学やるだけ解答#461_page-0002


    次に平方和分解について。

    数学やるだけ解答#461_page-0003


    寄与率を求める。

    数学やるだけ解答#461_page-0004


    今度は行列で考えてみる。ベクトル・行列の微分を用いて正規方程式を立てる。

    数学やるだけ解答#461_page-0005


    これより回帰式,残差平方和などが求められる。

    数学やるだけ解答#461_page-0006


    手計算といっても,電卓のみでは追いつかないので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


    本記事のもくじはこちら:


    あなたへのおすすめ