第155回: 「統計の実務」15 回帰分析《その1:単回帰分析》
◀前の記事へ 次の記事へ▶
≡ はじめに
前回は、「仮説検定《その4:p値》」について書きました。
内容としては、「そもそも有意差検定ってなんだっけ?」という話でした。
今回から話題は「仮説検定」から「回帰分析」に移ります。
JaSST'21 Kyushuで、「統計についてのnoteを書かれているそうですが、そこに、『その方法は何に使えるか』は書いてありますか?」という主旨のご質問がありました。
そのつもりで書いてきたけど、今後もより一層、「それは何の役に立つのか?」について書いていきたいなと思います。
そういえば、151回目からツイート時にスミ括弧で、「このノートを読むベネフィット」(あなたにもたらす価値)を書くようにしています。
例えば、151回目では、
【グループ間の平均値の違いについて、“誤差の範囲”なのか“本当に差がある”のか有意差検定(t検定)出来るようになります】
と書きました。
まだまだうまくベネフィットを書けず、「それってベネフィットではなく単にメリットじゃん」ってことも多いのですが。おいおい上手く書けるようになることを期待しつつつつっっー-。(笑)
それで、今回から数回続く予定の「回帰分析」ですが、計画を立てるときの見積もりに使います。
たとえば、過去案件の実績値から開発規模とバグ数の散布図を描いて、近似直線を引くということをします。
以下は、2017年度のSQiPの発表資料の抜粋です。とても、分かりやすく書いてあったので引用させていただきます。

赤文字の計算式(aとbは枠外に記載)から、開発規模が1000行増えたらバグは4.6件増えるだろうという見積もりに使えます。
開発規模からバグ数の見積もりができれば、テストを始める前に、今回の開発規模から今回のバグ数が分かります。
一般的な言葉に直せば、開発規模が説明変数、バグ数が目的変数です。
例えば10,000行(10 KLOC)だったら、上のスライドの式に代入して、
Y=4.6×10+430=476件
と見積もって、あとは、例えばDDPでそれぞれのテストレベルで80%見つけようという目標値を立てます。こんな感じになります。
CT: 476×80/100 = 380.8 (CTでは380件見つけて、残り96件)
IT: 96×80/100 = 76.8 (ITでは76件見つけて、残り20件)
ST: 20×80/100 = 16.0 (STでは16件見つけて、残り4件)
UAT: 4×80/100 = 3.2 (UATでは3件見つけて、残り1件はリリース後の本番障害として出るリスクあり)
テストをするときに、何件バグを見つけたらよいかの目標値があるとテストが順調かどうかの目安にもなります。
いいことずくめでしょう?(笑)
もちろん、こんなに理想的に進まないから、苦労しているわけですが、まずは、回帰分析をすることのイメージを業務の流れでつかんでいただければと思います。
(ここまでのまとめ)
回帰分析は、相関が高い変数間の関係式を作り、説明変数から目的変数を予測する方法です。
≡ 単回帰分析
今回は、もっとも簡単な回帰分析である「単回帰分析」がテーマです。
単回帰分析は先の例のように「Y=aX+b」の式を導く方法です。
まずは、Rコマンダーを立ち上げて「散布図行列」の回で使った「フィッシャーのあやめ」ファイルを読み込みます。
「散布図行列」の回で「“花びら”と“花びら幅”の相関係数は、0.9629」と最も相関が高いことが分かっていますので、まずは、その散布図を描きます。
(「プロットオプション」で「最小2乗直線」を選択しておきます)

上記散布図に引かれている直線の式を求めることが単回帰分析ですることです。
Rコマンダーで行う方法を書きます。
まずは、メニューから、
[統計量]>[モデルへの適合]>[線形回帰]
を選択します。

すると以下のウィンドウが開きますので、

目的変数(Y軸)に「花びら幅」、説明変数(X軸)に「花びら」を選びOKボタンを押します。
(略)
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.363076 0.039762 -9.131 4.7e-16 ***
花びら 0.415755 0.009582 43.387 < 2e-16 ***
(略)いま、Y軸に「花びら幅」、X軸に「花びら」を選びましたので、「Y=aX+b」の式は、「(花びら幅) = a(花びら) + b」という式のaとbを上の出力の「花びら 0.415755」と「(Intercept) -0.363076」に置き換えるだけです。
(花びら幅) = 0.415755(花びら) - 0.363076
という回帰式が得られました。花びらの行の最後にあるp値についてチェックしてください。0.05未満なら信じて良いです。Interceptのp値は0.05以上でも気にしなくて大丈夫です。
元データは、

と、有効桁は2桁ですので、回帰式も「(花びら幅) = 0.42(花びら) - 0.36」としたほうが良いでしょう。これで、式に花びらの数を代入することで、花びらの幅を予測することができるようになりました。
≡ おわりに
今回は、回帰分析の1回目として「単回帰分析」を実施して回帰式を求める方法について説明しました。
ここまで読んで、「そもそも、回帰式を求めるまでは回帰分析の前半なのでは?」と思われた方がいらっしゃるかもしれません。
はい、その通りです。でも、「傾きaがゼロということは、XとYに相関がない」とか、「決定係数R^2の意味」といった情報を増やしてもなあ。
まずは回帰式を作ることができるようになって、見積もりの時に使えることを知り、その次に、『じゃあ、過去データを集めてみるか』という気持ちになることが大切なんじゃないかなあと思っています。
次回は、説明変数が複数個あったときの回帰式の求め方になります。「重回帰分析」といいます。
