LINESTで線形回帰分析

昔、Excelで分析ツールというものを用いて線形回帰分析をする方法を大学の講義で教わったが、OpenOffice Calcにはそれが無い。
しかし、LINESTという関数を使うことで線形回帰分析を行うことができることが分かった。この関数はExcelでもOpenOffice CalcでもGnumericでも使うことができる。

下に張ったサイトにも書いてあるのだが、

  • LINEST( Y [ ; X [ ; 定数? [ ; 補正 ] ] ] )
    • [〜]は省略可能な部分であることを表す。
    • Yは回帰目標の配列を渡す。
      • 例: C1:C10
    • Xは依存変数の配列を渡す。複数パラメータも可能。省略すると1〜Nが指定されるようだ。
      • 例: A1:B10
    • 定数?」は回帰に定数を加えるか(y=ax+b)、加えないか(y=ax)を指定する。
      • 定数あり:True, true, 0 など…
      • 定数なし:False, false, 1 など…
    • 補正?」:よく分からないですw 省略して使うのが無難かもしれない
    • 戻り値右から(注意!)定数、Xの第1変数の係数、Xの第2変数の係数…という配列が返される。


この関数をセルにそのまま書くと戻り値配列の第一要素つまりXの第M要素(MはX変数の数)の係数が見える。これだけでは使えない…

他の要素を取り出す方法は二つある

  • INDEX関数
    • 配列のある部分を切り出すということをしてくれる。説明は省略
  • 配列をすべて表示させる
    • Ctrl+Shift+Enterを押す

セルに「=LINEST(〜〜)」と書いた後に、確定せずにCtrl+Shift+Enterを押すと横並びに配列の内容が表示される。
ちなみに横並びじゃ嫌だと言う場合は「=TRANSPOSE(LINEST(〜〜))」とすれば良い。
順番を逆にしたいという場合はINDEXを使えば良いのかな?それともなんか簡単にできないかな?






試し画像


A列は1〜10でB列はA列の二乗。C列はA+0.1*B+0.05*RAND()という様に二次関数+ノイズとした。D列は{=TRANSPOSE(LINEST(C1:C10,A1:B10,False))}としたもの。





参考・関連