近似曲線

散布図に回帰直線を書き入れる場合は abline を利用すればよいが、二次近似曲線などの高次近似曲線を描く場合は nls 関数の結果を利用する。

回帰直線

回帰分析結果の結果を abline 関数に代入することによって回帰直線を描くことができる。

# サンプルデータ
x <- runif(100) * 10
y <- rnorm(100, mean = x, sd = 2)

# 散布図
plot(x, y)
# 回帰直線
abline(lm(y ~ x), col = "darkred", lwd = 2)
ablineによる回帰直線

二次近似曲線

nls 関数を利用して二次近似曲線の各係数を計算し、predict 関数で各店の座標を求めて plot 関数で描くことができる。

# サンプルデータ
x <- runif(100) * 10
y <- rpois(100, lambda = x^2)

# 散布図
plot(x, y, xlim = range(x), ylim = range(y))

# 係数計算(y = axx + bx + c)
obj <- nls(y ~ a*x^2 + b*x + c, start = c(a = 0, b = 0, c = 0))

# 近似曲線の x 座標と y 座標を取得
df <- data.frame(x = seq(0, 10, length = 1000))
yy <- predict(obj, df)

# 近似曲線
par(new = T)
plot(df$x, yy, type = "l", col = "darkred", lwd = 2,
     xlim = range(x), ylim = range(y), xlab = "", ylab = "")
ablineによる回帰直線

三次近似曲線

nls 関数を利用して三次近似曲線も同様に描くことができる。

# サンプルデータ
x <- runif(100, -10, 20)
y <- (rnorm(100, x, 2) + 2)*((rnorm(100, x, 2) -  4))*((rnorm(100, x, 2) - 10))

# 散布図
plot(x, y, xlim = range(x), ylim = range(y))
 
# 係数計算(y = axx + bx + c)
obj <- nls(y ~ a*x^3 + b*x^2 + c*x + d, start = c(a = 0, b = 0, c = 0, d = 0))
 
# 近似曲線の x 座標と y 座標を取得
df <- data.frame(x = seq(-10, 20, length = 1000))
yy <- predict(obj, df)
 
# 近似曲線
par(new = T)
plot(df$x, yy, type = "l", col = "darkred", lwd = 2,
     xlim = range(x), ylim = range(y), xlab = "", ylab = "")
ablineによる回帰直線