とりあえずやってみる(単回帰)
何はともあれ、とりあえずやってみましょう。
まず全体像をつかむことで、より早くRに慣れ親しめると思います。今回は細かいことは書きません。
タイトルの「あてはめ」とは、手元にあるデータをうまく説明する直線または曲線を特定する作業です。今回は「あてはめ」の代表、単回帰にチャレンジします。
ライブラリ準備
本稿で用いるライブラリは以下の通りです。
あらかじめ呼び出しておきます。
library(tidyverse)
データの準備
以下のデータを用います。
d <- read.csv("./sampledata1.csv")
「直線」状に並んでいるように見えますよね。
今からやりたいことは、その「直線」を求める作業になります。
このデータはここからダウンロードできます。
乱数を用いて適当に作ったものですが、参考までに作り方を示しておきます。
x <- runif(50, 0, 10)
f <- function(x) {
y <- rep(0, 50)
for (i in 1:50) {
y[i] <- x[i] + rnorm(1, 0, sd=1)
}
return(y)
}
y <- f(x)
d <- data.frame(x, y)
単回帰
いよいよ「あてはめ」の実行です。
与えられたデータに対して最小二乗法で単回帰するわけですが、Rを使えば、次の1行で完了します。
結果がsample.lm に代入されます。
sample.lm <- lm(y~x, data=d)
たったこれだけです!
結果をテキスト情報で見てみましょう。
> summary(sample.lm)
Call:
lm(formula = y ~ x, data = d)
Residuals:
Min 1Q Median 3Q Max
-2.3382 -0.5340 0.1310 0.6636 1.8289
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.17415 0.26243 0.664 0.51
x 0.96350 0.05187 18.574 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.9719 on 48 degrees of freedom
Multiple R-squared: 0.8779, Adjusted R-squared: 0.8753
F-statistic: 345 on 1 and 48 DF, p-value: < 2.2e-16
結果の読み方ですが、求めたい「直線」の切片は0.17415、傾きは0.96350と推定されています。切片のp値は0.51と大きいですが、傾きに関しては$10^{-16}$程度なので十分小さいと言えるでしょう。
描画
さて、この結果を描画してみましょう。
ggplot2で描画するには
d %>%
ggplot(aes(x, y)) +
geom_point() +
geom_smooth(method = "lm", se=FALSE, formula = y ~ x)
R標準のplot()で描画することもできます。
plot(d)
abline(sample.lm)
以上が単回帰という、Rでできることのほんの一例です。
次回以降、項目に分けてより詳しく述べていく予定です。
トップページはこちら