おはようございます、ゆきちゃんママです!
先週は、「回帰分析」と「線形モデル(LM)」の関係についてまとめました。
似ているけれど、やっぱりちょっと違う――そんな話をしましたよね。
では実際にデータを使って分析してみると、何がどう違うのか?
それを体感するために、今回はまず「回帰分析」について、初心者目線でやってみたことをまとめてみます!
私と同じように、
「Rって聞いたことはあるけど…?」
「回帰分析って何するの?」
という方や、
「これからモデリングを勉強したいけど、何から始めたらいいの?」
と思っている方の参考になればうれしいです☺️
回帰分析って?
ざっくり言うと、「あるデータが別のデータとどんな関係にあるかを見る方法」です。
たとえば、
-
勉強時間が長いとテストの点数は上がるのか?
-
年齢が上がると睡眠時間は減るのか?
といった「○○が増えたら、△△も増える(減る)?」を調べたいときに使います。
まずは単回帰分析から!
データをつくってみる
まずは、Rでデータを作ります。
x <- rnorm(100, 5, 2) # 平均5、標準偏差2の乱数を100個
y <- 2 + 3 * x + rnorm(100, 0, 5) # yはxに基づく値 + ノイズ
d <- data.frame(y, x) # データフレームにまとめる
「rnorm」は正規分布にしたがう乱数を作る関数です。

データの中身を確認!
いきなり回帰分析に入る前に、データの傾向をざっと見ておくと安心です。
View(d) # dの中身を確認

mean(d$y) # yの平均
sd(d$y) # yの標準偏差

hist(d$y) # yの分布をヒストグラムで

plot(d$x, d$y) # xとyの散布図を表示

ここで、xが大きいほどyも大きくなる傾向があれば、回帰分析の出番です!
ぱっと見、xが大きいほどyも大きくなっている気がするので、回帰分析の出番ってことですかね?
回帰分析してみよう!
単回帰分析(xが1つ)
fit <- lm(y ~ x, data = d) # 回帰分析モデルを作成
summary(fit) # 結果の確認
「lm」はlinear model(線形モデル)の略です。
実際にRstudioでやってみた結果がこちらです。

結果の中には、係数(interceptやxの影響)、p値、決定係数(R-squared)など、重要な情報が出てきます!
グラフで可視化もできる!
分析結果をグラフにしてみると、より直感的にわかります。
install.packages("ggeffects")
library(ggeffects)
plot(ggpredict(fit))

または、おなじみのggplot2でも描けます。
library(ggplot2)
ggplot(d, aes(x = x, y = y))
+
geom_point()
+
geom_smooth(method = "lm", level = 0.95)

点が実際のデータ、線が回帰直線です📈
複数の説明変数を入れてみよう(重回帰分析)
今度は、xが2つあるバージョンです。
x1 <- rnorm(100, 10, 3)
x2 <- rnorm(100, 4, 2)
y <- 3 + 2 * x1 + 3 * x2 + rnorm(100, 0, 2)
d <- data.frame(y, x1, x2)
fit <- lm(y ~ x1 + x2, data = d)
summary(fit)
これを、実際にRstudioでやってみると以下のような結果が出ました。

この結果からは、
-
x1がyに与える影響
-
x2がyに与える影響
などがそれぞれ数値で見られます。
おわりに
今回は、「Rで回帰分析してみた」記録をシェアしてみました。
データを作って、グラフにして、数字をじっくり読んでみると、
「ただの数の集まり」だったものが、ちゃんと意味を持って語りかけてくるような感覚になって、ちょっと楽しくなってきます。
毎週、統計の勉強で学んだことを発信したいと思って、少しずつ頑張っています。
夏休み中も、隙間時間を見つけて、できる限り続けていきたいです!
ではでは、また次回の統計レポートでお会いしましょう〜✨