双子ママ、今日も楽しい!

双子の2年生の女の子と4歳の男の子を育てています。

Rで回帰分析してみよう!データを使って傾向をつかむ第一歩

おはようございます、ゆきちゃんママです!

 

先週は、「回帰分析」と「線形モデル(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で回帰分析してみた」記録をシェアしてみました。

 

データを作って、グラフにして、数字をじっくり読んでみると、

「ただの数の集まり」だったものが、ちゃんと意味を持って語りかけてくるような感覚になって、ちょっと楽しくなってきます。

 

毎週、統計の勉強で学んだことを発信したいと思って、少しずつ頑張っています。

夏休み中も、隙間時間を見つけて、できる限り続けていきたいです!

 

ではでは、また次回の統計レポートでお会いしましょう〜✨