R / 統計 > 切片を0とした回帰直線の式


動作環境
RStudio 0.99.903 on Windows 7 pro
R version 3.3.1

R機能マップ
http://qiita.com/7of9/items/0f911bcb95d3a8bbd703

渡された資料の中の計算式に基づくC実装とExcel, Rの回帰直線の式の傾きを比較していた。

  • ExcelとRの回帰直線の係数は合う
  • C実装のものだけ値が違う

使用しているデータは同じ。

違いは以下だと気づいた。

  • 通常の回帰直線
  • 切片を0とした回帰直線

Rのlsfitを使ってもだめなわけだ。

「切片を0とした回帰直線」の式は、以下のPDF内の式(1)の上にあるaハットとして定義されている。
http://sgulrep.sgu.ac.jp/dspace/bitstream/10742/1711/1/JK-33-027.pdf

切片を0とした回帰直線の傾きの式 \\
a_1 = \frac{\sum x_i y_i}{\sum x_i x_i}

一方で通常の回帰直線の傾きは参考によると以下。

通常の回帰直線の傾きの式 \\
a_2 = \frac{N\sum x_i y_i - \sum x_i \sum y_i}{N\sum x_i x_i - {(\sum x_i)}^2}

Excelの方でSUMPRODUCT()を使ってsum(xx)とsum(xy)を計算し、「切片を0とした回帰直線」の傾きを求めたら、C実装と整合した。
Rの方でも以下の計算で整合した。

> sum(newx$V1*newx$V2)/sum(newx$V1*newx$V1)
[1] -5906.378

learned a lesson

次回、傾きの値が合わない状況に出くわしたら、このあたりを確認することにした。