回帰直線を求める

 

 

1.回帰直線とは


 

 説明変量xと目的変量yとの関係を示す1次式 y=ax+b を回帰直線(regression line),
 aを回帰係数(regression coefficient)と言う.

 サンプルデータの残差の2乗和Q(a, b)を最小とするようy=ax+bを求める(=最小2乗法)
 
  N組のデータ (x1, y1),(x2, y2),・・・・,(xn, yn)
  回帰直線  y=ax+b
  残差の2乗和 Q(a,b)=(a*x1+b-y1)2+(a*x2+b-y2)2+.....+(a*xn+b-yn)2

 極値の問題として偏微分すれば,a, bは以下のようになる.
 


2.回帰直線を求めるためのプログラム

DIM num AS INTEGER
DIM tmpX AS STRING, tmpY AS STRING
DIM X(1000) AS SINGLE
DIM Y(1000) AS SINGLE
DIM margin AS SINGLE
DIM xmax AS SINGLE, xmin AS SINGLE, ymax AS SINGLE, ymin AS SINGLE
DIM avx AS SINGLE, avy AS SINGLE
DIM sdx AS SINGLE, sdy AS SINGLE
DIM r AS SINGLE
DIM sumX AS SINGLE, sumY AS SINGLE, sum AS SINGLE
DIM n AS INTEGER

SCREEN 12
CLS

'Data Input
num = 0
DO
    PRINT "Data No."; num + 1; "   (End:Enter)"
    INPUT "X= "; tmpX
    IF tmpX = "" THEN EXIT DO
    INPUT "Y= "; tmpY
    num = num + 1
    X(num) = VAL(tmpX)
    Y(num) = VAL(tmpY)
    IF num = 1 THEN
        xmax = X(num): xmin = X(num)
        ymax = Y(num): ymin = Y(num)
    ELSE
        IF X(num) > xmax THEN xmax = X(num)
        IF Y(num) > ymax THEN ymax = Y(num)
        IF X(num) < xmin THEN xmin = X(num)
        IF Y(num) < ymin THEN ymin = Y(num)
    END IF
LOOP

IF num < 2 THEN
    PRINT "Number of data must be more than 2!"
    END
END IF

'Draw correlation diagram
xmargin = (xmax - xmin) / 10
ymargin = (ymax - ymin) / 10
CLS
VIEW (210, 20)-(610, 420), 7, 12
WINDOW (xmin - xmargin, ymax + ymargin)-(xmax + xmargin, ymin - ymargin)
LINE (xmin, ymin)-(xmin, ymin - ymargin)
LINE (xmin, ymin)-(xmin - xmargin, ymin)
LINE (xmin - xmargin, ymax)-(xmax, ymax)
LINE (xmax, ymin - ymargin)-(xmax, ymax)
LOCATE 1, 26: PRINT "Y"
LOCATE 4, 19: PRINT USING "#####.#"; ymax
LOCATE 25, 19: PRINT USING "#####.#"; ymin
LOCATE 28, 28: PRINT USING "#####.#"; xmin
LOCATE 28, 69: PRINT USING "#####.#"; xmax
LOCATE 28, 78: PRINT "X"

'Draw points
FOR n = 1 TO num
    CIRCLE (X(n), Y(n)), .01 * (xmax - xmin), 0
NEXT

'average
sumX = 0: sumY = 0
FOR n = 1 TO num
    sumX = sumX + X(n)
    sumY = sumY + Y(n)
NEXT
avx = sumX / num
avy = sumY / num
LOCATE 1, 1
PRINT "N="; num
PRINT "Heikin "
PRINT " X:"; avx
PRINT " Y:"; avy

'Hyoujun Hensa  (standard deviation)
sumX = 0: sumY = 0
FOR n = 1 TO num
    sumX = (X(n) - avx) ^ 2 + sumX
    sumY = (Y(n) - avy) ^ 2 + sumY
NEXT
sdx = SQR(sumX / num)
sdy = SQR(sumY / num)
PRINT "Hyoujun Hensa"
PRINT " X:"; sdx
PRINT " Y:"; sdy

'Soukan Keisuu(correlation coefficient)
sum = 0
FOR n = 1 TO num
    sum = (X(n) - avx) * (Y(n) - avy) + sum
NEXT
r = sum / num / sdx / sdy
PRINT "Soukan Keisuu "
PRINT " r = "; r
 

'以下の囲みの部分を前回のプログラムに追加する.
'Kaiki Chokusen
DIM sigmaX AS SINGLE, sigmaY AS SINGLE, sigmaX2 AS SINGLE, sigmaXY AS SINGLE
DIM a AS SINGLE, b AS SINGLE
sigmaX = 0
sigmaY = 0
sigmaX2 = 0
sigmaXY = 0

FOR n = 1 TO num
        sigmaX = sigmaX + X(n)
        sigmaY = sigmaY + Y(n)
        sigmaX2 = sigmaX2 + X(n) ^ 2
        sigmaXY = sigmaXY + X(n) * Y(n)
NEXT

a = (num * sigmaXY - sigmaX * sigmaY) / (num * sigmaX2 - sigmaX ^ 2)
b = (sigmaX2 * sigmaY - sigmaXY * sigmaX) / (num * sigmaX2 - sigmaX ^ 2)

LINE (xmin, a * xmin + b)-(xmax, a * xmax + b), 1
PRINT "Kaiki Chokusen"
PRINT " Y="; a; "x"; "+"; b
 

END
 

3.回帰直線を求める.

以下について,回帰直線を求めなさい.
 

1)企業10社における宣伝広告費と売上高の相関表(文献1より)

サンプルNo.
宣伝広告費(千万円)
売上高 (億円)
1
107
286
2
336
851
3
233
589
4
82
389
5
61
158
6
378
1037
7
129
463
8
313
565
9
142
372
10
428
1020

 

 
 
 
 

2)価格と最高出力の相関表(文献1より)

車種
価格
最高出力
シビック
140.0
120
ターセルコルサ
81.5
73
ランサー
149.7
160
シティ
82.7
76
カローラ
78.5
73
スターレットターボ
118.4
105
ファミリア
143.0
140
レーザー
137.5
140
スターレットソレイユ
69.3
73

3)持ち家率と1住宅あたり延べ床面積(1988年)との関係

都道府県
持ち家住宅率(%)
一住宅あたり延べ床面積(u)
北海道
53.31
83.41
青森
71.15
116.23
岩手
73.28
115.62
宮城
61.62
98.03
秋田
80.87
136.06
山形
80.60
132.65
福島
69.91
111.51
茨城
73.60
98.94
栃木
71.55
100.16
群馬
72.17
101.54
埼玉
62.77
79.39
千葉
63.36
81.47
東京
41.41
60.27
神奈川
53.72
70.25

延べ床面積とは,各居住室の床面積のほか,その住宅に含まれる玄関,台所,便所,浴室,
押し入れなども含めた床面積の合計をいいます.
 

4.エクセルを用いた統計解析

1)基本統計量を求める.

 a)関数による方法

 最大値 MAX(セル範囲)
 最小値 MIN(セル範囲)
 平均 AVERAGE(セル範囲)
 中央値 MEDIAN(セル範囲)
 分散  VAR(セル範囲)
 標準偏差 STDEV(セル範囲)
  歪度  SKEW(セル範囲)
 尖度  KURT(セル範囲)

 b)アドイン>>分析ツールを用いた方法


   ツール>>アドインで分析ツールにチェックする.
   ツール>>分析ツールを選択し,基本統計量を選択する.
   入力元,出力オプションを設定すれば,自動的に基本統計量が出力される.
 
 
 
 

2)相関係数,回帰直線を求める.

  a)関数による方法

   相関係数 CORREL(セル範囲x,セル範囲y)
   回帰直線を求める
        LINEST(セル範囲y, セル範囲x, 定数(TRUE or FALSE),補正(TRUE or FALSE))
           定数をFALSEにすると,bは0となる.通常FALSE
       例:=LINEST(D2:D11,E2:E11,TRUE,FALSE)

   結果は配列として出力されるので,2つのセルを選んだ状態で関数を入力し,Ctrl+Shift+Enter

 b)グラフによる方法

   2つの変量を元に,散布図を描く.
   散布図を描いた後に,グラフのプロット点を選択し,
    グラフ>>近似曲線の追加>>種類タブで線形近似
        オプションタブで「グラフに数式を表示する.」「R-2乗値を表示する」にチェックし,OK.
        (この場合,相関係数Rの2乗で表示されるので要注意)

   c)アドインによる方法

   分析ツールから回帰分析を選択する.