회귀분석은 변수 간 관계를 모형화하는 통계적 방법.
하나의 독립변수와 하나의 종속변수 간 회귀분석은 단순 회귀분석이라함. 이에 비해 독립변수가 여러 개인 경우를 다중 회귀분석 이라함.
회귀분석은 변수 간의 관계를 추정하는 통게적인 방법. 선형회귀분석은 독립변수에 대한 종속변수의 값들을 이용해 두 변수 간의 선형 관계를 설명하는 회귀선인 직선의 방정식을 만듦.
사용 패키지 회귀선의 기울기와 y절편을 구해봄. 기울기와 Y절편의 변화에 따라 비용함수 값의 크기 변화를 3차원으로 보기 위해 scatterplot3d 패키지를 사용하도록 함.

**x = c(10, 22, 35, 40, 52, 64, 71, 83, 92, 100)
y = c(41, 45, 62, 75, 85, 90, 110, 115, 125, 140)**
plot(x, y, xlim = c(0, max(x)), ylim = c(0, max(y)))

a = 25.5
b = 0.8
db = 0.1
da = 0.1
f.min = 100000
plot(x, y, xlim = c(0, max(x)), ylim = c(0, max(y)))
a = 25.5
b = 0.8
db = 0.1
da = 0.1
f.min = 100000
A = NULL
b = NULL
c = NULLi = 0
while(TRUE) {
i = i + 1
# 비용함수 f(a, b)
err.sum = 0
for (k in 1:length(x)) {
y_hat = b * x[k]^2
err = (y_hat - y[k]) ^ 2
err.sum = err.sum + err
}
f = round(err.sum/2,1)
print(paste("a = ",a, "b = ", b,sep = ""))
print(paste(i, "단계", sep = ""))
print(paste("Cf.min = ", round(Cf.min,1), ",Cf = ",round(Cf,1),sep = ""))
# 종료여부 결정.
if (f >= f.min)
break
else {
f.min = f
a.min = a
b.min = b
}
A = c(A, a)
B = c(B, b)
C = c(F, f)
# a의 변화와 비용함수 값.
err.sum <- 0
for (k in 1 : length(x)) {
y_hat = b*x[k] + (a + da)
err = (y_hat - y[k]^ 2)
err.sum = err.sum + err
}
f.da = round(err.sum / 2, 1)
slope.da = (f.da - f) /da
print(paste("f.da = ", round(f.da, 1), " , slope.da = ", round(slope.da , 1), "da = ",
da, "a = ", a, sep = ""))
da <-- sign(slope.da) * abd(da)
# b의 변화와 비용함수 값.
err.sum <- 0
for (k in 1: length(x)) {
y_hat = (b + db) * x[k] + a
err = (y_hat - y[k]^2)
err.sum = err.sum + err
}
f.db = round(err.sum/2, 1)
print(paste("f.db = ", round(f.db, 1),", slope.db = ", round(slope.db,1), "db = ",
,db,", b = ",b, sep = ""))
db <-- sign(slope.db) * abd(db)
a = round(a + da, 2)
b = round(b + db, 2)
print(paste("da = ", da, "db = ", db, "a = ",a, "b = ", b, sep = ""))
}
}
plot(x, y, xlim = c(0, max(x)), ylim = c(0, max(y)))
abline(b = b.min, a = a.min, col = "red", lty = 2)
lm(y ~ x)
# 비용함수 값의 변화.
par(mfrow = c(1, 3))
plot(1:length(A), A,
xlab = "반복 수", ylab = "Y절편",
main = "y절편의 변화",
type = "o")
plot(1:length(B), B,
xlab = "반복 수", ylab = "기울기",
main = "기울기의 변화",
type = "o")
plot(1:length(F), F,
xlab = "반복 수", ylab = "비용함수 값",
main = "비용함수값의 변화",
type = "o")
# 비용함수 값의 변화(3차원 비교)
install.packages("scatterplot3d")
lbrary(scatterplot3d)
s3d = scatterplot3d(x = A, y = B, z = F/1000,
pch = 19,
cex.symbols = 1.5,
color = "steelbule",
type = "h",
main = "비용함수의 변화",
xlab = "y절편",
ylab = "기울기",
zlab = "비용함수(X1000)")
text(s3d$xyz.convert(A,B,F/1000 + 0.3),
labels = 1:length(A),
cex = 0.8, col = "red")
