Rで重回帰分析

こんばんは。namakemonoです。
今回は重回帰分析について記載します。

重回帰分析とは?

重回帰分析とは、説明変数が複数ある場合に行う回帰分析のことです。
分析の結果、「y=a1x1+a2x2+…+b」という回帰式が得られます。
※説明変数が1つの場合は、「単回帰分析」と呼びます。単回帰分析については、こちらを参照ください。

Rでの重回帰分析の手順



1.データの準備
2.lm関数を利用して、分析
3.結果の検証


それでは分析してみましょう。

1.データの準備

今回は「stackloss」という、硝酸とアンモニアの酸化のためのプラントの運用データを利用します。

> stackloss
Air.Flow Water.Temp Acid.Conc. stack.loss
1 80 27 89 42
2 80 27 88 37
3 75 25 90 37
4 62 24 87 28
5 62 22 87 18
6 62 23 87 18
7 62 24 93 19
8 62 24 93 20
9 58 23 87 15
10 58 18 80 14
11 58 18 89 14
12 58 17 88 13
13 58 18 82 11
14 58 19 93 12
15 50 18 89 8
16 50 18 86 7
17 50 19 72 8
18 50 19 79 8
19 50 20 80 9
20 56 20 82 15
21 70 20 91 15



目的変数を「stack.loss」、「Air.Flow」、「Water.Temp」、「Acid.Conc.」を説明変数とします。
ちなみに各変数の意味は以下のようになります。
Air.Flow:冷却空気の流量
Water.Temp:注入口における冷却水の温度
Acid.Conc.:硝酸濃度(/1000, -500)
stack.loss:スタック損失


次に、データを整形します。
lm関数は、引数に行列を利用することができます。
ただ、行列の形だと、1列目のものを目的関数にするため、今回の分析にそのまま利用できません。
そこで、行列の順番を入れ替えます。
cbild(列A,列B)で列の結合を行います。
今回はstacklossデータの4列目と1~3列目を結合します。

> mystackloss<-cbind(stackloss[4],stackloss[1:3]) > mystackloss
stack.loss Air.Flow Water.Temp Acid.Conc.
1 42 80 27 89
2 37 80 27 88
3 37 75 25 90
4 28 62 24 87
5 18 62 22 87
6 18 62 23 87
7 19 62 24 93
8 20 62 24 93
9 15 58 23 87
10 14 58 18 80
11 14 58 18 89
12 13 58 17 88
13 11 58 18 82
14 12 58 19 93
15 8 50 18 89
16 7 50 18 86
17 8 50 19 72
18 8 50 19 79
19 9 50 20 80
20 15 56 20 82
21 15 70 20 91



これでデータの準備は終わりです。

2.lm関数を利用して、分析

続いて、実際に分析を行います。
先ほど整形したデータを利用し、lm関数を用いて重回帰分析を行います。
その結果をsummary関数の引数にして、詳細な結果を取得します。

> summary(lm(mystackloss))

Call:
lm(formula = mystackloss)

Residuals:
Min 1Q Median 3Q Max
-7.237713 -1.711654 -0.455093 2.361418 5.697774

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -39.9196744 11.8959969 -3.35572 0.0037503 **
Air.Flow 0.7156402 0.1348582 5.30661 5.799e-05 ***
Water.Temp 1.2952861 0.3680243 3.51957 0.0026301 **
Acid.Conc. -0.1521225 0.1562940 -0.97331 0.3440461

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.243364 on 17 degrees of freedom
Multiple R-squared: 0.9135769, Adjusted R-squared: 0.8983258
F-statistic: 59.90223 on 3 and 17 DF, p-value: 3.016327e-09



これで分析は終了です。
「stackloss= 0.7156402×Air.Flow + 1.2952861×Water.Temp + (-0.1521225)×Acid.Conc. + (-39.9196744)」という回帰式が得られました。

3.結果の検証

さて、最後に結果の検証を行います。
まず、寄与率です。寄与率は「Adjusted R-squared:0.8983258」なので、約90%のことがこれら3つの説明変数で説明できるということがわかります。
また、寄与率のp値も「3.016327e-09」であることから、99%信頼できるということがわかります。



つづいて各変数の信用度です。
 Air.Flowはp値が「5.799e-05」のため、ほぼ確実に「stackloss」に影響を与えていることがわかります。また、偏回帰係数が正の値(0.7156402)のため、stacklossとの間に正の相関があるといえます。
 続いてWater.Tempですが、p値が「0.0026301」なので、99%の確率で「stackloss」に影響を与えていることがわかります。また、偏回帰係数が正の値(1.2952861)のため、stacklossとの間に正の相関があるといえます。
 最後にAcid.Conc.ですが、p値が「0.3440461」のため、「stackloss」に影響を与えているとは言いにくいです。


これらの結果より、スタック損失には「冷却空気の流量」(Air.Flow)と「注入口における冷却水の温度」(Water.Temp)が大きく影響を与えてるということがわかります。

最後に

重回帰分析も基本は単回帰分析と大きくやり方は変わりません。
少し敷居が高くなってきたかもしれませんが、ぜひ試してみてください。
ではでは。


コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA