# ーーー【ランダム誤差と回帰】ーーー
#【0】直線「y = x」に正規分布誤差を付加する
# 区間 [-1, +1] からランダムに100個の変数値を選ぶ(定義域)
n <- 100
x <- runif(n, min = -1, max = 1)
# ランダム誤差:正規分布 N(0, 0.1)
y <- x + rnorm(n, 0, 0.1)
plot(x, y)
# 回帰直線とそのグラフ描画
一次関数 <- lm(y ~ x)
abline(一次関数, lty=1, lwd=3, col="red")
# 回帰直線の係数
一次関数
##
## Call:
## lm(formula = y ~ x)
##
## Coefficients:
## (Intercept) x
## 0.006063 0.986315
# 回帰直線とデータとのずれ(残差)
names(一次関数)
## [1] "coefficients" "residuals" "effects" "rank"
## [5] "fitted.values" "assign" "qr" "df.residual"
## [9] "xlevels" "call" "terms" "model"
一次関数$model
## y x
## 1 -0.284404116 -0.22033115
## 2 0.143864699 0.07761944
## 3 0.146864762 -0.02027945
## 4 -0.375295688 -0.29757074
## 5 -0.233229774 -0.24491521
## 6 -0.855000349 -0.88225741
## 7 -0.995950772 -0.98674201
## 8 0.871006789 0.90833937
## 9 0.560227125 0.78771473
## 10 0.458979646 0.28706745
## 11 0.775008827 0.86495570
## 12 -0.767320464 -0.77819007
## 13 -0.369218203 -0.32740628
## 14 0.814412136 0.80438910
## 15 -0.629948655 -0.82765290
## 16 -1.051150408 -0.93644919
## 17 -0.741608515 -0.54004020
## 18 -0.115432055 0.01396122
## 19 -0.874471143 -0.82109723
## 20 0.656195805 0.56510160
## 21 -0.302637169 -0.23383848
## 22 -0.017242196 -0.08085688
## 23 -0.028632188 -0.03917274
## 24 0.373072243 0.37547118
## 25 -0.781067675 -0.65713085
## 26 -0.705379621 -0.91656133
## 27 -0.489737708 -0.50453863
## 28 -0.804786995 -0.93679737
## 29 -0.858069845 -0.81624660
## 30 0.839003888 0.71889211
## 31 0.199227657 -0.08027072
## 32 -0.121520387 -0.14949266
## 33 0.247944462 0.18869825
## 34 0.618978642 0.50556020
## 35 0.743368517 0.69283550
## 36 0.082240519 0.03715347
## 37 -0.323071074 -0.41714986
## 38 0.451960282 0.52099638
## 39 0.196719600 0.20619420
## 40 0.195704135 0.06881859
## 41 0.580340573 0.48936264
## 42 0.137060611 0.10477698
## 43 -0.157014699 -0.18123664
## 44 0.985149470 0.95903556
## 45 -0.713854029 -0.72646645
## 46 0.782743472 0.83370565
## 47 -0.902755740 -0.98745273
## 48 -0.178441445 -0.33216693
## 49 -0.385024305 -0.38347838
## 50 0.795356882 0.80987869
## 51 -0.912312805 -0.82412305
## 52 -0.667093693 -0.69425198
## 53 0.420010798 0.45526502
## 54 -0.263496660 -0.29459031
## 55 -0.306374147 -0.38534495
## 56 0.099469896 0.21350162
## 57 0.679978234 0.88955102
## 58 0.461595047 0.41498373
## 59 -0.181475488 -0.15993533
## 60 -0.559126047 -0.74379064
## 61 0.443721043 0.41749799
## 62 0.472102098 0.61916594
## 63 0.493021701 0.38275613
## 64 0.738173136 0.70687820
## 65 0.554221962 0.53198521
## 66 0.274275641 0.28376666
## 67 -0.131786178 -0.16798666
## 68 0.261091024 0.32226751
## 69 0.876855997 0.96255713
## 70 0.386067247 0.53995164
## 71 -0.908486307 -0.88925674
## 72 -0.319716657 -0.30593191
## 73 1.001004364 0.97023292
## 74 -0.612020526 -0.56744257
## 75 0.002507615 0.11656987
## 76 -0.313463530 -0.33432759
## 77 0.031320314 0.17603757
## 78 0.154147498 0.33142449
## 79 -0.524498244 -0.32325916
## 80 0.770431861 0.78802901
## 81 -0.931050148 -0.99140977
## 82 0.924794228 0.82574629
## 83 0.544024837 0.47559283
## 84 0.285915220 0.20877691
## 85 0.315529724 0.21336935
## 86 -1.034311443 -0.88585850
## 87 0.177530273 0.16843119
## 88 0.102581472 0.18830129
## 89 -0.016924099 -0.13681600
## 90 -0.542420685 -0.39253147
## 91 0.930521150 0.95008274
## 92 0.490852054 0.26605814
## 93 0.510344653 0.47723782
## 94 -0.706138548 -0.69343064
## 95 -0.665027480 -0.68983108
## 96 0.463125763 0.44639644
## 97 0.692170209 0.76212414
## 98 0.915992231 0.84239894
## 99 0.337989655 0.25849499
## 100 -0.465310237 -0.45878094
fitted <- predict(一次関数)
for (i in 1:100)
lines (
c(x[i],x[i]),
c(y[i],fitted[i])
)
#【1】曲線「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)
# 回帰直線とそのグラフ描画
一次関数 <- lm(y ~ x)
abline(一次関数, lty=1, lwd=3, col="red")
# 回帰二次関数とそのグラフ描画
x2 <- x^2
二次関数 <- lm(y ~ x + x2)
xx <- seq(-1, 1, 0.01)
yy <- predict(二次関数, list(x=xx, x2=xx^2))
lines(xx, yy, lty=1, lwd=3, col="blue")
# 回帰二次関数の係数
二次関数
##
## Call:
## lm(formula = y ~ x + x2)
##
## Coefficients:
## (Intercept) x x2
## 1.006555 0.004972 -1.009304
#【3】曲線「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)
# 回帰直線とそのグラフ描画
一次関数 <- lm(y ~ x)
abline(一次関数, lty=1, lwd=3, col="red")
# 回帰二次関数とそのグラフ描画
x2 <- x^2
二次関数 <- lm(y ~ x + x2)
xx <- seq(-1, 1, 0.01)
yy <- predict(二次関数, list(x=xx, x2=xx^2))
lines(xx, yy, lty=1, lwd=3, col="blue")
# 回帰三次関数とそのグラフ描画
x3 <- x^3
三次関数 <- lm(y ~ x + x2 + x3)
xx <- seq(-1, 1, 0.01)
yy <- predict(三次関数, list(x=xx, x2=xx^2, x3=xx^3))
lines(xx, yy, lty=1, lwd=3, col="green")
# 回帰四次関数とそのグラフ描画
x4 <- x^4
四次関数 <- lm(y ~ x + x2 + x3 + x4)
xx <- seq(-1, 1, 0.01)
yy <- predict(四次関数, list(x=xx, x2=xx^2, x3=xx^3, x4=xx^4))
lines(xx, yy, lty=1, lwd=3, col="pink")
# 回帰五次関数とそのグラフ描画
x5 <- x^5
五次関数 <- lm(y ~ x + x2 + x3 + x4 + x5)
xx <- seq(-1, 1, 0.01)
yy <- predict(五次関数, list(x=xx, x2=xx^2, x3=xx^3, x4=xx^4, x5=xx^5))
lines(xx, yy, lty=1, lwd=3, col="black")
# 回帰六次関数とそのグラフ描画
x6 <- x^6
六次関数 <- lm(y ~ x + x2 + x3 + x4 + x5 + x6)
xx <- seq(-1, 1, 0.01)
yy <- predict(六次関数, list(x=xx, x2=xx^2, x3=xx^3, x4=xx^4, x5=xx^5, x6=xx^6))
lines(xx, yy, lty=1, lwd=3, col="gray")
# 回帰七次関数とそのグラフ描画
x7 <- x^7
七次関数 <- lm(y ~ x + x2 + x3 + x4 + x5 + x6 + x7)
xx <- seq(-1, 1, 0.01)
yy <- predict(七次関数, list(x=xx, x2=xx^2, x3=xx^3, x4=xx^4, x5=xx^5, x6=xx^6, x7=xx^7))
lines(xx, yy, lty=1, lwd=3, col="gold")
# 回帰八次関数とそのグラフ描画
x8 <- x^8
八次関数 <- lm(y ~ x + x2 + x3 + x4 + x5 + x6 + x7 + x8)
xx <- seq(-1, 1, 0.01)
yy <- predict(八次関数, list(x=xx, x2=xx^2, x3=xx^3, x4=xx^4, x5=xx^5, x6=xx^6, x7=xx^7, x8=xx^8))
lines(xx, yy, lty=1, lwd=3, col="violet")
logLik(一次関数)
## 'log Lik.' 127.5359 (df=3)
logLik(二次関数)
## 'log Lik.' 137.7784 (df=4)
logLik(三次関数)
## 'log Lik.' 138.7903 (df=5)
logLik(四次関数)
## 'log Lik.' 144.7091 (df=6)
logLik(五次関数)
## 'log Lik.' 184.7505 (df=7)
logLik(六次関数)
## 'log Lik.' 186.1935 (df=8)
logLik(七次関数)
## 'log Lik.' 186.5937 (df=9)
logLik(八次関数)
## 'log Lik.' 187.2953 (df=10)
AIC(一次関数)
## [1] -249.0719
AIC(二次関数)
## [1] -267.5569
AIC(三次関数)
## [1] -267.5806
AIC(四次関数)
## [1] -277.4181
AIC(五次関数)
## [1] -355.5011
AIC(六次関数)
## [1] -356.3871
AIC(七次関数)
## [1] -355.1873
AIC(八次関数)
## [1] -354.5907