# ーーー【ランダムな誤差を可視化する】ーーー

#【0】直線「y = x」に正規分布誤差を付加する

# 区間 [-1, +1] からランダムに100個の変数値を選ぶ(定義域)
n <- 100
x <- runif(n, min = -1, max = 1)

# ランダム誤差がない場合
y <- x
plot(x, y)

# ランダム誤差:正規分布 N(0, 0.05)
y <- x + rnorm(n, 0, 0.05)
plot(x, y)

# ランダム誤差:正規分布 N(0, 0.1)
y <- x + rnorm(n, 0, 0.1)
plot(x, y)

# ランダム誤差:正規分布 N(0, 0.5)
y <- x + rnorm(n, 0, 0.5)
plot(x, y)

# 四つのグラフを並べて描く(1)

par(mfrow=c(2,2))

n <- 100
x <- runif(n, min = -1, max = 1)
y <- x; plot(x, y)
y <- x + rnorm(n, 0, 0.05); plot(x, y)
y <- x + rnorm(n, 0, 0.1); plot(x, y)
y <- x + rnorm(n, 0, 0.5); plot(x, y)

par(mfrow=c(1,1))

# 四つのグラフを並べて描く(2)

par(mfrow=c(2,2))

n <- 100
x <- runif(n, min = -1, max = 1)
y <- x; plot(x, y);
  curve(identity, -1, 1, add=T, col="red")
y <- x + rnorm(n, 0, 0.05); plot(x, y);
  curve(identity, -1, 1, add=T, col="red")
y <- x + rnorm(n, 0, 0.1); plot(x, y);
  curve(identity, -1, 1, add=T, col="red")
y <- x + rnorm(n, 0, 0.5); plot(x, y);
curve(identity, -1, 1, add=T, col="red")

par(mfrow=c(1,1))

# 抽出サンプル数を変える

par(mfrow=c(2,2))

x <- runif(10, min = -1, max = 1)
y <- x + rnorm(10, 0, 0.3); plot(x, y)

x <- runif(50, min = -1, max = 1)
y <- x + rnorm(50, 0, 0.3); plot(x, y)

x <- runif(100, min = -1, max = 1)
y <- x + rnorm(100, 0, 0.3); plot(x, y)

x <- runif(1000, min = -1, max = 1)
y <- x + rnorm(1000, 0, 0.3); plot(x, y)

par(mfrow=c(1,1))


#【1】直線「y = x」に正規分布誤差を付加する

n <- 100
x <- runif(n, min = -1, max = 1)
y <- x + rnorm(n, 0, 0.04)
plot(x, y)

#【2】曲線「y = 1 - x^2」に正規分布誤差を付加する

n <- 100
x <- runif(n, min = -1, max = 1)
y <- (1 - x^2) + rnorm(n, 0, 0.04)
plot(x, y)

#【3】曲線「y = 1 - x + x^3」に正規分布誤差を付加する

n <- 100
x <- runif(n, min = -1, max = 1)
y <- (1 - x + x^3) + rnorm(n, 0, 0.04)
plot(x, y)

#【4】曲線「y = (x - 0.9)*(x - 0.6)*(x - 0.1)*(x + 0.3)*(x + 1)」に正規分布誤差を付加する

n <- 100
x <- runif(n, min = -1, max = 1)
y <- (x - 0.9)*(x - 0.6)*(x - 0.1)*(x + 0.3)*(x + 1) + rnorm(n, 0, 0.04)
plot(x, y)

# 四つのグラフを並べて描く(1)

par(mfrow=c(2,2))

n <- 100
x <- runif(n, min = -1, max = 1)
y <- x + rnorm(n, 0, 0.05); plot(x, y)
y <- (1 - x^2) + rnorm(n, 0, 0.05); plot(x, y)
y <- (1 - x + x^3) + rnorm(n, 0, 0.05); plot(x, y)
y <- (x - 0.9)*(x - 0.6)*(x - 0.1)*(x + 0.3)*(x + 1) + rnorm(n, 0, 0.05); plot(x, y)

par(mfrow=c(1,1))

# 四つのグラフを並べて描く(2)

par(mfrow=c(2,2))

n <- 100
x <- runif(n, min = -1, max = 1)
y <- x + rnorm(n, 0, 0.05); plot(x, y); 
  curve(identity, -1, 1, add=T, col="red")
y <- (1 - x^2) + rnorm(n, 0, 0.05); plot(x, y); 
  curve(1 - x^2, -1, 1, add=T, col="red")
y <- (1 - x + x^3) + rnorm(n, 0, 0.05); plot(x, y); 
  curve(1 - x + x^3, -1, 1, add=T, col="red")
y <- (x - 0.9)*(x - 0.6)*(x - 0.1)*(x + 0.3)*(x + 1) + rnorm(n, 0, 0.05); plot(x, y); 
  curve((x - 0.9)*(x - 0.6)*(x - 0.1)*(x + 0.3)*(x + 1), -1, 1, add=T, col="red")

par(mfrow=c(1,1))